用于进行调用的WebRTC函数调用流[Android]
我指的是ApprtDemo的源代码,它是WebRTC的一个演示应用程序 我尝试的是:用于进行调用的WebRTC函数调用流[Android],android,webrtc,apprtcdemo,Android,Webrtc,Apprtcdemo,我指的是ApprtDemo的源代码,它是WebRTC的一个演示应用程序 我尝试的是: 构建我自己的WebRTC应用程序,在Android设备上进行AV调用 替换现有的https://apprtc.appspot.com/服务器和相关功能 对于以上几点的存档,我想了解WebRTC函数调用的基本流程和发出/接收调用的步骤(我需要调用的函数和流程) 我浏览了源代码,了解了一些东西, 但由于代码理解起来相当复杂,而且没有任何文档 如果有人提供任何示例或文档来解释进行/接收AV呼叫的步骤(如何获取/设置S
https://apprtc.appspot.com/
服务器和相关功能李>
对于以上几点的存档,我想了解WebRTC函数调用的基本流程和发出/接收调用的步骤(我需要调用的函数和流程)
我浏览了源代码,了解了一些东西,
但由于代码理解起来相当复杂,而且没有任何文档
如果有人提供任何示例或文档来解释进行/接收AV呼叫的步骤(如何获取/设置SDP,如何呈现本地/远程视频等),这将非常有帮助
我看过这些帖子,非常有帮助:
这方面的任何帮助都将是巨大的帮助 没有时间表,它是异步的,但我将尝试解释,但有两个主要流程,SDP提供和回答流程和ICE候选流程 流程1:SDP 步骤1-提供对等服务: 在提供端,创建一个RTPeerConnection(以stun、trun服务器作为参数) 第2步-提供对等服务: 使用您的约束调用getUserMedia。在成功回调中,使用addStream方法将流添加到RTPeerConnection。然后,您可以通过调用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);
}
第3步-提供对等服务:
在createOffer的回调方法中,将参数(sdp offer)设置为RTPeerConnection(将开始收集ICE候选对象)的localDescription。然后使用信令服务器将报价发送给另一个对等方。(我不会描述信令服务器,它只是将数据从一个服务器传递给另一个服务器)
第5步-回答同伴:
应答对等方每次收到要约时,都会与TURN、STUN服务器、getUserMedia创建一个RTPeerConnection,然后在回调中,将流添加到RTPeerConnection。对于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应答,在RTPeerConnection上设置RemoteDescription
socket.on('answer', function (sdp) {
peer.setRemoteDescription(new RTCSessionDescription(sdp), function(){console.log("Remote Description Success")}, function(){console.log("Remote Description Error")});
});
流程2:ICE候选者
双方:
每次RTPeerConnection触发onicecandidate时,通过signalingserver将候选对象发送给另一个对等方。
当接收到来自信令服务器的ICEScandidate时,只需使用addIceCandidate(新的RTICEScandidate(obj))将其添加到RTPeerConnection
最后:
如果上述两个流工作正常,请在每个RTPeerConnection上使用onaddstream事件。当ICE候选者将彼此配对并找到点对点的最佳方式时,他们将添加与SDP协商的流,该流将通过点对点连接。因此,在这种情况下,你只需要添加你的流,然后到一个视频标签,例如,它是好的
peer.onaddstream = function (event) {
vid.src = webkitURL.createObjectURL(event.stream);
console.log("New Stream");
console.log(event.stream);
};
我将用一些我认为有助于理解我所说内容的代码编辑tommorow。如果你有问题,就去问吧
这是我的信令服务器:
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);
});
})) 感谢您的流,但是这是JavaScript API流还是Android API流,还是通用流?我正在寻找android版本。如果你能提供示例代码,这将非常有帮助。我编辑过,它不容易理解,但webRTC不容易理解。我刚刚意识到它不是你想要的,你不是在寻找JS API,我不知道Android API是否不同。谢谢
@jujukeder
,JS流很有帮助,Android API中的getUserMedia
等价物是什么?您可以在下面的应用程序代码中找到已经编译的libjingle\u peerconnection库。getUserMedia是该库的一部分。此外,流与webrtc专家定义的流几乎相同,应该用于执行webrtc调用。
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
}));
});
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);
});