我正在尝试使用Kurento将webRTCendpoint桥接到RTPendpoint。 webRTCendpoint客户端是Chrome浏览器。 RTPendpoint客户端是SIP服务器(代理/ B2BUA)。这是我的基本代码或伪代码(我在我的应用服务器中使用Kurento-client.js):
//On receipt of offer from the WebRTC Browser-Peer
mySignalling.on('sdpOffer', function(sdpOffer) { //Action starts!
//Create Mediapipeline so that endpoints can be created
kurentoClient.create('MediaPipeline', function(error, pipeline) {
pipeline.create('webRtcEndpoint', function(error, myWebrtcEndpoint) {
//Get ICE Candidates from webRTC endpoint to send to browser
mySignalling.on('candidate', function(candidate) {
myWebrtcEndpoint.addIceCandidate(candidate);
});
myWebrtcEndpoint.on('OnIceCandidate', function(event) {
var candidate = kurento.register.complexTypes.IceCandidate(event.candidate);
mySignalling.send(candidate); //Send ICE candidate to webRTC browser peer
});
pipeline.create('rtpEndpoint', function(error,myRtpEndpoint) {
myWebrtcEndpoint.connect(myrtpEndpoint,function(error){ });
myWebrtcEndpoint.processOffer(sdpOffer, function(error, sdpAnswer) {
mySignalling.send(sdpAnswer); //Send answersdp to browser
});
myRtpEndpoint.generateOffer(function(error){
myRtpEndpoint.getLocalSessionDescriptor(function(error, sdpRTP) {
mySignalling2.send(sdpRTP); //Send SDP to Asterisk as part of SIP INVITE
});
});
});
});
});
});
我有几个问题:
为简单起见,我没有添加错误处理,OnIceGatheringDone事件处理,为多用户/会话提供服务等。
作为一方,我正在应用服务器中构建自己的SIP请求并处理SIP响应。如果需要,我将更改RTPEndpoint.generateOffer生成的SDP(如果需要)。当我克服这个最初的障碍时,将会到达那一点!
答案 0 :(得分:3)
1)看起来很好。如果您愿意,可以在创建WebRtcEndpoint
之前完成RtpEndpoint
协商。此外,您错过了gatherCandidates
的来电,这将在您的下一个问题中介绍。
2)gatherCandidates
用于表示de WebRtcEndpoint开始收获ICE候选者。那是trickle ICE,它是ICE协议的优化:候选者在被发现时被发射,并被发送到另一个对等体进行探测。这加快了连接时间,因为在收获所有收集之前可以找到有效候选者(可能需要20秒或更长时间)。 WebRtcEndpoint
需要将候选者发送到远程对等体,而从远程对等体接收的候选者需要使用addIceCandidate
方法进行处理。如果您在处理优惠或产生答案之前致电gatherCandidates
,那么这些候选人将被添加到SDP优惠或答案中,您将使用Vanilla ICE。
3)如果您打算仅使用RtpEndpoint进行发射,我建议使用您需要的选项提供损坏的SDP,并使用提供的端点进程。例如,如果您要发送给Wowza,您可以修复Wowza Media Server期望RTP流的IP和端口。