0

RTCPeerConnection と独自のロングポーリング実装を使用して、2 つのブラウザー間で 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

私の推測では、STUN サーバーの構成に問題があると思われます。これが問題かどうかを判断するには、Google のパブリック スタン サーバーstun:stun.l.google.com:19302(Firefox では機能しませんが、Chrome では確実に機能するはずです) を使用するか、STUN サーバーが構成されていないローカル ネットワークでテストします。

また、氷の候補が適切に配信されていることを確認します。Firefox は実際には「icecandidate」イベントを生成しません (オファー/回答に候補が含まれます)。そのため、候補メッセージの配信に関する問題も不一致の原因となる可能性があります。

于 2013-03-21T17:03:23.833 に答える