Firefox需要WEBRTC调用的一些用户媒体



我有以下代码来创建WEBRTC连接。我只需要从服务器到呼叫者的一种方式流。

const RTCCon = new RTCPeerConnection({});
WS = new WebSocket(`ws://${location.host}`);
WS.onmessage = e => {
        const data = JSON.parse(e.data);
        RTCCon.setRemoteDescription(data)
                // .then(() =>
                //         window.navigator.mediaDevices.getUserMedia({
                //                 audio: true,
                //                 video: false
                //         })
                // )
                .then(() => RTCCon.createAnswer())
                .then(answer => RTCCon.setLocalDescription(answer))
                .then(() => {
                        WS.send(
                                JSON.stringify({
                                        type: "answer",
                                        sdp: RTCCon.localDescription.sdp
                                })
                        );
                        const video = document.getElementsByTagName("video")[0];
                        video.muted = true;
                        video.autoplay = true;
                        video.srcObject = new MediaStream(RTCCon.getReceivers().map(receiver => receiver.track));
                });
};

此代码可与Chrome一起使用,但不适用于Firefox。当我没有window.navigator.mediaDevices.getUserMedia的评论部分,并允许在浏览器中使用麦克风时,进行了启用,一切都可以。

看来候选冰层的问题。我有多个网络接口,一个是用于Internet连接,另一个是WiFi热点,在其中连接了服务器。如果没有建立连接(没有麦克风(,则仅通过Internet连接的界面创建ICE候选者。当我询问并允许麦克风时,使用WiFi热点的ICE候选者,因此可以创建和使用正确的IP。

看来Usermedia和Ice连接完全无关,但是只能不计算代码才能正常工作。

我没有在服务器上进行任何ICE连接操作,并且提供的代码仅是客户端上的JS代码。

答案是,当您不给予相机或麦克风铬和Firefox时,只会为您的网络接口之一提供候选冰候选人。如果您可以访问CAM/MIC,他们将为所有接口提供候选冰候选。

现在,当他们只给出单个接口的地址时,他们需要选择要发出哪个接口。现在,Firefox将提供界面的IP地址,该接口的IP地址将路由到8.8.8.8,因此基本上是您的默认Internet上行链路。Firefox开发人员正在考虑更改该行为,以散发加载页面的接口的IP地址,这应该解决您的使用情况。

我不确定为什么它在Chrome中起作用。要么是因为Chrome记得您以前已允许共享您的CAM/MIC。或者也许Chrome已经实现了Firefox即将更改为的逻辑。您应该能够通过查看Chrome Chrome脱颖而出来验证这一点。

最新更新