2016-05-06 7 views
0

WebRTCendpointからRTPendpointへのKurentoのブリッジを使用しようとしています。 webRTCendpointクライアントはChromeブラウザです。 RTPendpointクライアントはSIPサーバ(プロキシ/ B2BUA)です。WebRTCEndpointをRTPEndpointに接続するためのKurentoのAPIについての明確化が必要

//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. 全体的な構造は正しいですがここでは(私は私のアプリサーバにKurento-client.jsを使用しています)私が持っている基本的なコードまたは擬似コードはありますか?
  2. webRTCEndpoint.gatherCandidatesの使用方法を教えてください。ドキュメントには、processOfferの後に呼び出さなければならないと書かれています。どうして?どのようにaddIceCandidateメソッドに接続されていますか?
  3. RTPendpointはwebrtcEndpointに接続されますが、RTPEndpoint generateOfferによって生成されるRTPプロファイルを制御するにはどうすればよいですか?つまり、RTP/AVPFをRTPEndpointから取得するのではなく、どうすればよいのですか?そうでない場合、AVPFをAVPにマッピングする必要がある場合、AVPFからAVPにブリッジする際に、AVPFの「F」を処理することになります。

私が側としてなど、シンプル、エラー処理、OnIceGatheringDoneイベント処理、マルチユーザー/セッションのための準備のために、

を追加していない、私は、アプリケーションサーバに自分のSIPリクエストを構築していますSIP応答を処理するステップとを含む。必要に応じて、RTPEndpoint.generateOfferによって生成されたSDPを必要に応じて変更します。私はこの初期のハードルを乗り越えて、その時点になるでしょう!

答えて

3

1)うまく見えます。あなたが望むなら、RtpEndpointを作成する前に、WebRtcEndpoint交渉を終えることができます。また、次の質問に記載されているgatherCandidatesへの電話がありません。

2)gatherCandidatesは、WebRtcEndpointにICE候補の収穫を開始するように通知するために使用されます。これはtrickle ICEです。これはICEプロトコルの最適化です。候補が発見されると生成され、プロービングのために他のピアに送信されます。これにより、接続時間が短縮されます。有効な候補がすべて取得される前に検出されます(最大20秒以上かかる場合があります)。 WebRtcEndpointはリモートピアに候補を送信する必要があり、リモートピアから受信した候補はaddIceCandidateメソッドで処理されます。オファーを処理したり回答を生成する前にgatherCandidatesに電話すると、その候補者はSDPオファーまたは回答に追加され、あなたはVanilla ICEを使用します。

3)RtpEndpointを発信専用に使用する場合は、必要なオプションを提供し、エンドポイントプロセスを提供することを推奨します。たとえば、Wowzaに送信する場合は、Wowza Media ServerがRTPフローを予期しているIPとポートを修正できます。

+0

ありがとうございました。ポイント2:オファーを処理したり回答を生成する前にgatherCandidatesを呼び出すと、SDPのオファーまたは回答にその候補が追加され、バニラICEを使用します。私が理解しているように、ブラウザでは、setLocalDescriptionの呼び出し後にローカルのICE候補が起動します。 「バニラ」ICEではなく、ブラウザが正確な候補を生成するための情報を取得するので意味をなさない。したがって、Kurentoでは、リモートオファーが処理され、回答が生成されるまで、候補者は解雇されるべきではありません。 gatherCandidatesメソッドは必要ありません。私は何が欠けていますか? – Sam

+0

ポイント3:私は両方の端からメディアフローとRTPEndpointを使用するつもりです。 「mangled SDP」とは、手書きSDPを意味しますか? RTPEndpointからSIPコールをブリッジし、SIP電話機でサポートされているSDPを事前に知っているので、私はrtpEndpointを持つことができます。SIP電話機のSDPに基づいてprocessOfferを実行するか、私が想像するgenerateOfferを開始することができます。私は、SIP INVITEリクエストとともにタグ付けできるKurentoのSDPまたはすべてのRTP機能を私に与えます。どちらが良いですか? ** KurentoでサポートされているRTPプロファイルに関するドキュメントはありますか?** RTPEndpointのAVPFはサポートされていますか? – Sam

+0

rtpEndpoint [here](https://doc-kurento.readthedocs.io/en/stable/_static/langdoc/jsdoc/kurento-client-js/module-elements.RtpEndpoint.html)のドキュメントには、 generateOffer、getLocalSessionDescriptorなどのメソッド...または私は間違った場所を探していますか? – Sam

関連する問題