在夜间(22)和Chrome(25)中使用WebRTC的麻烦

时间:2013-03-19 14:07:42

标签: javascript html5 webrtc

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

函数 sendMessage(消息)通过长轮询向服务器发送消息,另一方面,使用 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() {
    });
}

2 个答案:

答案 0 :(得分:0)

我最好的猜测是您的STUN服务器配置存在问题。要确定这是否是问题,请尝试使用谷歌的公共眩晕服务器stun:stun.l.google.com:19302(在Firefox中不起作用,但绝对可以在Chrome中运行)或在没有配置STUN服务器的本地网络上进行测试。

另外,请确认您的冰候选人是否正确交付。 Firefox实际上并不会生成“icecandidate”事件(它包括提议/答案中的候选人),因此提供候选消息的问题也可以解释这种差异。

答案 1 :(得分:0)

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