为什么在 webRtc 中针对 FF->Edge 或 Chrome 连接生成“静音”事件,而在 FF->FF 连接中不生成

问题描述 投票:0回答:1

我已经在peer1(开始连接)和peer2之间实现了webRtc连接。
Peer1 - 是 Firefox v.112。
如果peer2 = Firefox 也没有问题。
如果peer2 = Ms Edge v.118 或 Chrome v.117,那么我观察到两种情况:

  1. 如果我没有在行 (*) 中设置断点 - 请参阅下面的代码,则 Peer2 会获取事件:

    unmute
    (音频),
    unmute
    (视频)——没关系,
    mute
    (视频)!!!并且视频和音频无法播放(显示播放器)。

    我不明白
    mute
    事件的原因是什么!
    所以,问题是 - 浏览器在没有断点的情况下无法正常播放视频/音频。

  2. 如果我在 (*) 行设置断点,则peer2会获取上述事件,除了

    mute
    (!),并且浏览器正常播放音频和视频。

    在我看来,我的断点造成了延迟,从而消除了问题。为什么它有帮助 - 我不知道。

问题:案例1的

mute
事件的原因是什么?
您有什么建议来检查、追踪等以消除问题?

代码是:

       navigator.mediaDevices.getUserMedia(constraints).then(
        function Resolve_GetUserMedia(stream) {
            // add track to peerConnection to send it to peer

            let streamToAdd = mediaControl.stream;

            let tracksArray = streamToAdd.getTracks();

            let msgText = "(1) Adding tracks of the stream _" + streamToAdd.id + "_  " +
            "Activity = " + streamToAdd.active + "  Total = " + tracksArray.length;
            appendMessageText(msgText, "msg_log");

            for (let i = 0; i < tracksArray.length; i++) {
                let track = tracksArray[i];

                // try to add track
                let ok_add_1track = false;
                try {
                    //  "par_webRtc.peerConnection" is a peerConnection
                    par_webRtc.peerConnection.addTrack(track, streamToAdd);
                    ok_add_1track = true;
                }
                catch(err) {
                    if (err.code === DOMException.INVALID_ACCESS_ERR) {
                        // track already sent - no error
                        ok_add_1track = true;                   // (*) BREAKPOINT HERE SOLVES THE PROBLEM
                    }
                    else {
                        // other code are "true" errors
                        errorsCount++;
                    }
                }

                if (ok_add_1track) {
                    // track added successfully
                    console.log("OK_Status of adding <" + track.kind + "> = " + "OK");
                }
                else {
                    console.warn("ERR_Status of adding <" + track.kind + "> = " + "ERROR");
                }

                if (track.kind === "audio") {
                    // remember status of track adding
                    connection.noAudio = !ok_add_1track;
                }
                else if (track.kind === "video") {
                    // remember status of track adding
                    connection.noVideo = !ok_add_1track;
                }

                let sig_state = (par_webRtc.peerConnection === undefined) ?
                                    "NO PEER CONN!!!" :
                                    par_webRtc.peerConnection.signalingState;

                let msgText = "Resolve_RemoteDescriptionSet !!!>> " +
                "We sent track to remote.peerConnection : kind=" + track.kind +
                "  label=" + track.label +
                "  muted=" + track.muted.toString() +
                "  id=" + track.id +
                "  State = " + sig_state;

                console.log("WebRTC - " + msgText);

                appendMessageText(msgText, "msg_log");
            }


        } // function Resolve_GetUserMedia(stream)
javascript google-chrome firefox webrtc microsoft-edge
1个回答
0
投票

由于 Microsoft Edge 和 Google Chrome 均使用基于 Chromium 项目的渲染引擎,因此会导致 FF->Edge 或 Chrome 连接产生“静默”事件。您可以在此处发送反馈:https://bugs.chromium.org/p/chromium/issues/list

有关“静音”事件的更多信息,您可以参考:https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/mute_event

© www.soinside.com 2019 - 2024. All rights reserved.