我正在尝试使用 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
});
});
});
});
});
});
我有几个问题:
- 整体结构是否正确?
- webRTCEndpoint.gatherCandidates 有什么用?文档说必须在processOffer之后调用。为什么?它如何连接到 addIceCandidate 方法?
- RTPendpoint 连接到 webrtcEndpoint,但如何控制 RTPEndpointgenerateOffer 生成 RTP 配置文件?我的意思是,例如,我如何从 RTPEndpoint 获取 RTP/AVPF 而不是 RTP/AVP?如果不是,并且 AVPF 必须映射到 AVP,Kurento 将在从 AVPF 桥接到 AVP 时处理 AVPF 中的“F”。
为了简单起见,我没有添加错误处理、OnIceGatheringDone 事件处理、多用户/会话的配置等。
另一方面,我正在应用程序服务器中构建自己的 SIP 请求并处理 SIP 响应。如果需要,我将更改 RTPEndpoint.generateOffer 生成的 SDP(如果需要)。当我克服最初的障碍时,就会到达这一点!
1)看起来不错。您可以完成WebRtcEndpoint
创建之前进行协商RtpEndpoint
,如果你愿意的话。另外,您错过了拨打gatherCandidates
,这将在您的下一个问题中介绍。
2) gatherCandidates
用于向 WebRtcEndpoint 发出信号以开始收集 ICE 候选者。那是滴冰,这是 ICE 协议的优化:候选者在被发现时被发出,并发送到另一个对等点进行探测。这会加快连接时间,因为可以在收集所有候选者之前找到有效的候选者(这可能需要 20 秒或更长时间)。这WebRtcEndpoint
需要将候选者发送到远程对等点,而从远程对等点接收到的候选者则使用addIceCandidate
方法。如果你打电话gatherCandidates
在处理要约或生成答案之前,这些候选人将被添加到 SDP 要约或答案中,并且您将使用 Vanilla ICE。
3) 如果您打算仅使用 RtpEndpoint 进行发送,我建议您提供一个包含您需要的选项的损坏的 SDP,并提供提供的端点进程。例如,如果您要发送到 Wowza,您可以修复 Wowza 媒体服务器期望 RTP 流的 IP 和端口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)