【问题标题】:webRTC - disable media sent to remote peer but not local mediawebRTC - 禁用发送到远程对等体但不是本地媒体的媒体
【发布时间】:2020-12-25 06:30:42
【问题描述】:

我正在尝试能够禁用(空白视频和静音音频)正在发送到其他对等方,同时保持本地媒体启用。

我想要电话接听或拒绝按钮。但我不想等待被叫方按下“接听”按钮,然后才能发送媒体,这会导致媒体出现在屏幕上之前有点延迟。我知道我可以收听iceState 并仅在connectedcompleted 时显示视频,但我认为用户单击应答按钮通常会给连接更多时间来完成操作,所以我确信媒体连接通常已经在他们“接听”电话之前进行设置。

为此,我将发送媒体但已禁用,当按下“回答”按钮时,我将启用正在发送的媒体。

我正在尝试以下代码来禁用媒体,但它也适用于本地媒体。

document.getElementById("local_video").srcObject = webcamStream;

webcamStream.getTracks().forEach(
    function (track){
        myPeerConnection.addTrack(track, webcamStream);
    });

function initialMediaMuted(){
    let videoTrackBlank;
    let audioTrackBlank;
    myPeerConnection.getSenders().find(function (s) {
        if (s.track.kind === "video") {
            videoTrackBlank = s.track;
        }
        if (s.track.kind === "audio") {
            audioTrackBlank = s.track;
        }
    });
    videoTrackBlank.enabled = false;
    audioTrackBlank.enabled = false;
}

谁能指导我如何调整它以保持启用本地媒体但禁用传出媒体?

谢谢

【问题讨论】:

    标签: webrtc


    【解决方案1】:

    问题是您对本地显示和流式传输使用相同的MediaStreamTrack 实例。如果在调用addTrack之前调用MediaStreamTrack.clone()创建副本,可以单独设置启用状态。

    webcamStream.getTracks().forEach(
        function (track){
            const cloneTrack = track.clone();
            myPeerConnection.addTrack(cloneTrack, webcamStream);
            cloneTrack.enabled = false;
        });
    

    【讨论】:

    • 是的,我就是这样管理的。谢谢你。我会接受你的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2018-06-26
    • 2017-11-21
    • 1970-01-01
    相关资源
    最近更新 更多