我在Linux上使用google chrome 21.x,已建立webrtc对等连接,但无法接收任何远程视频流,对等连接“.onaddstream”的回调从未被调用,某些机构可以建议我需要查找的地方?
我粘贴了我的整个代码,仍然无法接收远程视频流,也没有任何错误。
var peerConnCreated = false;
var peerConn = null;
var cameraOn = false;
var clientId = 0;
var svcName = "";
var clientIdRecvd = false;
var myname = "";
var hisname = "";
var myJsep;
var hisJsep;
var mySdp;
var hisSdp;
function login()
{
var loginid = document.getElementById("login").value;
var jsonText = {"clientid":clientId, "service":"rtc", "mtype": "online", "username": loginid};
myname = loginid;
socket.send(JSON.stringify(jsonText));
}
function iceCallback(canditate, moreToFollow)
{
if(canditate) {
console.log("ice canditate");
var jsonText = {"clientid":clientId, "service":"rtc", "mtype": "canditate", "sndr": myname, "rcpt": hisname,
"label": canditate.label, "cand": canditate.toSdp()};
socket.send(JSON.stringify(jsonText));
}
}
function onSessionConnecting(message)
{
console.log("session connecting ...");
}
function onRemoteStreamRemoved(event)
{
console.log("remote stream removed");
remotevid.src = "";
}
function onSessionOpened(message)
{
console.log("session opened");
}
function onRemoteStreamAdded(event)
{
console.log("remote stream added");
remotevid.src = window.webkitURL.createObjectURL(event.stream);
remotevid.style.opacity = 1;
}
function createPeerConnection()
{
if (peerConnCreated) return;
peerConn = new webkitPeerConnection00("STUN stun.l.google.com:19302", iceCallback);
peerConn.onconnecting = onSessionConnecting;
peerConn.onopen = onSessionOpened;
peerConn.onaddstream = onRemoteStreamAdded;
peerConn.onremovestream = onRemoteStreamRemoved;
console.log("peer connection created");
peerConnCreated = true;
}
function turnOnCameraAndMic()
{
navigator.webkitGetUserMedia({video:true, audio:true}, successCallback, errorCallback);
function successCallback(stream) {
sourcevid.style.opacity = 1;
sourcevid.src = window.webkitURL.createObjectURL(stream);
peerConn.addStream(stream);
console.log("local stream added");
}
function errorCallback(error) {
console.error('An error occurred: [CODE ' + error.code + ']');
}
cameraOn = true;
}
function dialUser(user)
{
if (!peerConnCreated) createPeerConnection();
hisname = user;
var localOffer = peerConn.createOffer({has_audio:true, has_video:true});
peerConn.setLocalDescription(peerConn.SDP_OFFER, localOffer);
mySdp = peerConn.localDescription;
myJsep = mySdp.toSdp();
var call = {"clientid":clientId, "service":"rtc", "mtype": "call", "sndr": myname, "rcpt": hisname, "jsepdata": myJsep};
socket.send(JSON.stringify(call));
console.log("sent offer");
//console.log(myJsep);
peerConn.startIce();
console.log("ice started ");
}
//handle the message from the sip server
//There is a new connection from our peer so turn on the camera
//and relay the stream to peer.
function handleRtcMessage(request)
{
var sessionRequest = eval('(' + request + ')');
switch(sessionRequest.mtype)
{
case 'online':
console.log("new user online");
var newuser = sessionRequest.username;
var li = document.createElement("li");
var name = document.createTextNode(newuser);
li.appendChild(name);
li.onclick = function() { dialUser(newuser); };
document.getElementById("Contact List").appendChild(li);
break;
case 'call':
console.log("recvng call");
alert("Incoming call ...");
if (!peerConnCreated) createPeerConnection();
peerConn.setRemoteDescription(peerConn.SDP_OFFER, new SessionDescription(sessionRequest.jsepdata));
hisname = sessionRequest.sndr;
var remoteOffer = peerConn.remoteDescription;
//console.log("remoteOffer" + remoteOffer.toSdp());
var localAnswer = peerConn.createAnswer(remoteOffer.toSdp(), {has_audio:true, has_video:true});
peerConn.setLocalDescription(peerConn.SDP_ANSWER, localAnswer);
var jsonText = {"clientid":clientId,"service":"rtc", "mtype": "pickup", "sndr" :myname, "rcpt": hisname, "jsepdata": localAnswer.toSdp()};
socket.send(JSON.stringify(jsonText));
console.log("sent answer");
//console.log(localAnswer.toSdp());
peerConn.startIce();
if (!cameraOn) turnOnCameraAndMic();
break;
case 'pickup':
console.log("recvd pickup");
peerConn.setRemoteDescription(peerConn.SDP_ANSWER, new SessionDescription(sessionRequest.jsepdata));
hisname = sessionRequest.sndr;
if (!cameraOn) turnOnCameraAndMic();
break;
case 'canditate':
console.log("recvd canditate");
var canditate = new IceCandidate(sessionRequest.label, sessionRequest.cand);
peerConn.processIceMessage(canditate);
break;
case 'bye':
console.log("recvd bye");
break;
}
}
//open the websocket to the antkorp webserver
var socket = new WebSocket('ws://bldsvrub:9981');
var sourcevid = null;
var remotevid = null;
socket.onopen = function () {
console.log("websocket opened");
sourcevid = document.getElementById("sourcevid");
remotevid = document.getElementById("remotevid");
};
socket.onmessage = function (event) {
if (!clientIdRecvd) {
var reqObj = eval('(' + event.data + ')');
clientId = reqObj.clientid;
svcName = reqObj.service;
clientIdRecvd = true;
} else {
//hookup the new handler to process session requests
handleRtcMessage(event.data);
}
};
socket.onclose = function (event) { socket = null; };
最佳答案
上面粘贴的代码包含一个小错误,应在生成答案或要约之前将流添加到对等连接,即应在调用setlocalDescription或setRemoteDescription之前调用“addStream”。
关于webrtc - 我无法接收远程视频流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11794305/