我正在使用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() {
});
}
答案 0 :(得分:0)
我最好的猜测是您的STUN服务器配置存在问题。要确定这是否是问题,请尝试使用谷歌的公共眩晕服务器stun:stun.l.google.com:19302
(在Firefox中不起作用,但绝对可以在Chrome中运行)或在没有配置STUN服务器的本地网络上进行测试。
另外,请确认您的冰候选人是否正确交付。 Firefox实际上并不会生成“icecandidate”事件(它包括提议/答案中的候选人),因此提供候选消息的问题也可以解释这种差异。
答案 1 :(得分:0)
确保您的视频标记属性自动播放设置为“自动播放”。