我在linux上使用谷歌chrome 21.x,webrtc对等连接已建立,但我无法接收任何远程视频流,给予peerconnection".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; };
Run Code Online (Sandbox Code Playgroud)
Rav*_*ugu 12
上面的代码粘贴包含一个小错误,应该在生成答案或商品之前将流添加到对等连接,即应在setlocalDescription或setRemoteDescription调用之前调用"addStream".
许多 WebRTC 演示:
例如一对一的 WebRTC 音频/视频/屏幕呼叫:
这个问题太老了。这就是为什么我认为我不应该在此处添加工作片段代码片段的原因。以上链接回答了所有问题。
但是,如果您是新的 WebRTC 用户并且您面临类似的问题,那么这里有一些提示:
你可以在这里找到一些教程:
此答案针对 WebRTC-1.0。它不回答 WebRTC-1.1 (ORTC) 或更新版本。