0

我正在使用 RTCPeerConnection 和我自己的长轮询实现在两个浏览器之间试验 WebRTC。我已经创建了演示应用程序,它成功地与 Mozilla Nightly (22) 一起使用,但是在 Chrome (25) 中,我无法获得远程视频,并且只出现“空黑色视频”。我的 JS 代码有问题吗?

函数sendMessage(message)通过长轮询向服务器发送消息,另一方面,使用onMessage()接受

var peerConnection;
var peerConnection_config = {"iceServers": [{"url": "stun:23.21.150.121"}]};

// when message from server is received
function onMessage(evt) {

    if (!peerConnection)
        call(false);

    var signal = JSON.parse(evt);
    if (signal.sdp) {
        peerConnection.setRemoteDescription(new RTCSessionDescription(signal.sdp));
    } else {
        peerConnection.addIceCandidate(new RTCIceCandidate(signal.candidate));
    }
}

function call(isCaller) {

    peerConnection = new RTCPeerConnection(peerConnection_config);

    // send any ice candidates to the other peer
    peerConnection.onicecandidate = function(evt) {
        sendMessage(JSON.stringify({"candidate": evt.candidate}));
    };

    // once remote stream arrives, show it in the remote video element
    peerConnection.onaddstream = function(evt) {
        // attach media stream to local video - WebRTC Wrapper
        attachMediaStream($("#remote-video").get("0"), evt.stream);
    };

    // get the local stream, show it in the local video element and send it
    getUserMedia({"audio": true, "video": true}, function(stream) {
        // attach media stream to local video - WebRTC Wrapper
        attachMediaStream($("#local-video").get("0"), stream);
        $("#local-video").get(0).muted = true;
        peerConnection.addStream(stream);

        if (isCaller)
            peerConnection.createOffer(gotDescription);
        else {
            peerConnection.createAnswer(gotDescription);
        }

        function gotDescription(desc) {
            sendMessage(JSON.stringify({"sdp": desc}));
            peerConnection.setLocalDescription(desc);

        }
    }, function() {
    });
}
4

2 回答 2

0

确保您的视频标签属性自动播放设置为“自动播放”。

于 2013-06-30T14:18:15.277 回答
0

我最好的猜测是你的 STUN 服务器配置有问题。要确定这是否是问题所在,请尝试使用 google 的公共 stun 服务器stun:stun.l.google.com:19302(在 Firefox 中无法使用,但在 Chrome 中肯定可以使用)或在未配置 STUN 服务器的本地网络上进行测试。

此外,请验证您的候选冰是否正确交付。Firefox 实际上并没有生成“icecandidate”事件(它包括报价/答案中的候选人),因此传递候选人消息的问题也可以解释这种差异。

于 2013-03-21T17:03:23.833 回答