我指的是AppRTCDemo的源代码,它是WebRTC的一个演示应用程序。
我想要的是:
https://apprtc.appspot.com/服务器和相关功能。为了存档以上各点,我想了解WebRTC函数调用的基本流程和进行/接收调用的步骤(我需要调用的函数和流程)。
我已经看过源代码,了解了很少的东西,但是作为代码理解起来相当复杂,而且没有任何文档。
如果有人提供任何示例或文档来解释进行/接收AV呼叫的步骤(我们如何获得/设置SDP、如何呈现本地/远程视频等),将有很大帮助。
我见过这些帖子,很有帮助:
我能够构建和运行AppRTCDemo应用程序。
在这方面的任何帮助都将是很大的帮助!
发布于 2014-07-07 01:18:09
没有时间表,它是异步的,但我会尝试解释,但有两个主要的流程,提供和回答的流程与SDP和冰淇淋流。
流程1: SDP
第一步-提供同侪:
在提供端,创建一个RTCPeerconnection (使用stun、trun服务器作为参数)。
var STUN = {
url:'stun:stun.l.google.com:19302'
};
var TURN = {
url: 'turn:homeo@turn.bistri.com:80',
credential: 'homeo'
};
var iceServers = {
iceServers: [STUN, TURN]
};
var peer = new RTCPeerConnection(iceServers);第二步-提供同侪:
使用约束调用getUserMedia。在成功回调中,使用RTCPeerconnection方法将流添加到addStream中。然后,您可以通过调用Peerconnection对象上的createOffer来创建服务。
navigator.webkitGetUserMedia(
{
audio: false,
video: {
mandatory: {
maxWidth: screen.width,
maxHeight: screen.height,
minFrameRate: 1,
maxFrameRate: 25
}
}
},
gotStream, function(e){console.log("getUserMedia error: ", e);});
function gotStream(stream){
//If you want too see your own camera
vid.src = webkitURL.createObjectURL(stream);
peer.addStream(stream);
peer.createOffer(onSdpSuccess, onSdpError);
}第三步-提供同侪:
在createOffer的回调方法中,将参数( sdp提供的)设置为RTCPeerConnection的localDescription (谁将开始收集ICE候选人)。然后使用信令服务器将报价发送给另一个对等方。(我将不描述信令服务器,它只是将数据从另一个传送到另一个)。
function onSdpSuccess(sdp) {
console.log(sdp);
peer.setLocalDescription(sdp);
//I use socket.io for my signaling server
socket.emit('offer',sdp);
}第五步-回答同伴:
答案对等者,每次收到报价时,都会创建一个带有RTCPeerConnection的转身、眩晕服务器,然后是getUserMedia,然后在回调中将流添加到RTCPeerconnection。在提供SDP时,使用setRemoteDescription和sdpOffer。然后触发createAnswer。在createAnswer的成功回调中,使用带有参数的setLocalDescription,然后使用信令服务器将应答sdp发送给提供对等方。
//Receive by a socket.io socket
//The callbacks are useless unless for tracking
socket.on('offer', function (sdp) {
peer.setRemoteDescription(new RTCSessionDescription(sdp), onSdpSuccess, onSdpError);
peer.createAnswer(function (sdp) {
peer.setLocalDescription(sdp);
socket.emit('answer',sdp);
}, onSdpError);
}); 第7步:提供同侪
接收sdp答案,setRemoteDescription on RTCPeerConnection。
socket.on('answer', function (sdp) {
peer.setRemoteDescription(new RTCSessionDescription(sdp), function(){console.log("Remote Description Success")}, function(){console.log("Remote Description Error")});
}); 流程2: ICECandidate
双方:
每次RTCPeerConnection触发onicecandidate时,通过信号服务器将候选发送到另一个对等点。当收到来自信令服务器的icecandidate时,只需使用RTCPeerConnection (新RTCIceCandidate(obj))将其添加到
peer.onicecandidate = function (event) {
console.log("New Candidate");
console.log(event.candidate);
socket.emit('candidate',event.candidate);
};
socket.on('candidate', function (candidate) {
console.log("New Remote Candidate");
console.log(candidate);
peer.addIceCandidate(new RTCIceCandidate({
sdpMLineIndex: candidate.sdpMLineIndex,
candidate: candidate.candidate
}));
}); 最后:
如果上面的两个流运行良好,那么可以在每个RTCPeerConnection上使用onaddstream事件。当ICE候选人将配对并找到最佳的对等方式时,他们将添加与SDP相关联的流,这将通过对等连接。因此,在这种情况下,您只需要添加您的流,然后添加到一个视频标签,例如,它是好的。
peer.onaddstream = function (event) {
vid.src = webkitURL.createObjectURL(event.stream);
console.log("New Stream");
console.log(event.stream);
};我将在明天编辑一些代码,我认为,以帮助理解我在说什么。如果有问题就去问吧。
这是我的信令服务器:
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(3000);
app.get('/', function (req, res) {
res.send('The cake is a lie');
});
io.on('connection', function (socket) {
console.log('NEW CONNECTION');
socket.on('offer', function (data) {
console.log(data);
socket.broadcast.emit("offer",data);
});
socket.on('answer', function (data) {
console.log(data);
socket.broadcast.emit("answer",data);
});
socket.on('candidate', function (data) {
console.log(data);
socket.broadcast.emit("candidate",data);
});});
https://stackoverflow.com/questions/24575368
复制相似问题