在Firefox和Safari中,RTCPeerConnection不是构造函数

时间:2018-05-31 15:24:39

标签: javascript firefox websocket safari webrtc

我编写了一个非常简单的WebRTC应用程序,用于从RaspberryPi Zero相机中流式传输实时视频。我使用Linux Project's UV4L driver设置服务器和JavaScript来连接和播放视频流。我的JavaScript代码基于UV4L's demo,它基本上使用RTC Web套接字方法来执行协商。

他们的代码在Chrome中运行得非常好,但似乎无法在Firefox或Safari下运行。

RTCPeerConnection = window.webkitRTCPeerConnection;
RTCSessionDescription = window.RTCSessionDescription;
RTCIceCandidate = window.RTCIceCandidate;
var ws;

function signal(url, onStream, onError, onClose, onMessage) {    
    if("WebSocket" in window) {
        var pc;
        ws = new WebSocket(url);

        ws.onopen = function () {
            var config = {"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]};
            pc = new RTCPeerConnection(config);     // <---- ERROR here.
            pc.onicecandidate = function (event) {
                // ... ICE negotiation.
            };

            if('ontrack' in pc) {
                pc.ontrack = function(event) {
                    // ... set stream object and play
                };
            } else {  // onaddstream() is deprecated
                pc.onaddstream = function (event) {
                    // ... set stream object and play
                };
            }
            // ... other event listeners.
            ws.send(...); // Signals the remote peer to initiate a call
        };
    }
}

特别是,我收到错误当我尝试连接时,Firefox v60.0.1中引发了以下错误(在Safari中非常类似):

  

TypeError:RTCPeerConnection不是构造函数

根据MDN docs,Firefox从v22开始就支持这个构造函数。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

我的错误结果是一个愚蠢的错字。在代码开头声明RTCPeerConnection是错误的。它应该是:

RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection;