需要澄清Kurento的API以将webRTCEndpoint连接到RTPEndpoint

时间:2016-05-06 18:00:35

标签: webrtc kurento

我正在尝试使用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
           });
         });
       });
     });
   });
 });

我有几个问题:

  1. 整体结构是否正确?
  2. webRTCEndpoint.gatherCandidates有什么用?文档说它必须在processOffer之后调用。为什么?它是如何连接到addIceCandidate方法的?
  3. RTPendpoint连接到webrtcEndpoint,但如何控制RTPEndpoint generateOffer生成的RTP配置文件?我的意思是,我如何从RTPEndpoint获得RTP / AVPF而不是RTP / AVP?如果没有,并且AVPF必须映射到AVP,Kurento将处理" F"在从AVPF桥接到AVP的AVPF中。
  4. 为简单起见,我没有添加错误处理,OnIceGatheringDone事件处理,为多用户/会话提供服务等。

    作为一方,我正在应用服务器中构建自己的SIP请求并处理SIP响应。如果需要,我将更改RTPEndpoint.generateOffer生成的SDP(如果需要)。当我克服这个最初的障碍时,将会到达那一点!

1 个答案:

答案 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和端口。