web-dev-qa-db-ja.com

WebRTC:オファーとアンサーの後にストリームを追加する方法は?

私はwebRTCビデオ通話に取り組んでいます。データチャネルが正常に実装されました。ここで、同じピア接続にビデオストリームを追加したいと思います。

回答と申し出の前にストリームを追加する必要があることを読みました。回答またはオファーの後にストリームを追加する方法はありますか?

オファーまたはアンサーの前にストリームを追加した場合、ストリーミングを停止して、必要に応じて再開するにはどうすればよいですか?

非常に多くのストリームを維持することに問題はありますか?

22
Konga Raju

完全なシグナリングを作成した後にストリームを追加するには、ピア接続は再ネゴシエートストリームを使用する必要があります。

pc1.addstream(stream)

次に、もう一度オファーを作成して、他のピアに送信します。

リモートピアはストリームを追加し、応答SDPを送信します。

ストリームを停止するには:

stream.stop();
pc1.removeStream(stream);
16
Konga Raju

私の経験では、KongaRajuがアドバイスしたことはうまくいきませんでした。 「更新されたオファー」を送信できず、実際にビデオストリーミングを実行できませんでした。

この一連のイベントは、ピア1からピア2にビデオをストリーミングしたいという私の場合に有効であることがわかりました。

  1. ピアがメッセージを交換するための何らかの方法を設定します。 (人々がこれを達成する方法の違いが、悲しいことに、さまざまなWebRTCコードサンプルを非常に通約不可能にしている理由です。)
  2. それぞれの側で、重要なシグナリングイベントのハンドラーを設定します。 (一部の人々は、特別な時間にこれらのハンドラーを作成する必要があると報告していますが、そうであるとは思いません。)3つの基本的なイベントがあります:
    • 反対側から送られた氷の候補==>それでaddIceCandidateを呼び出す
    • オファーメッセージ==> SetRemoteDescription&回答して送信する
    • 回答メッセージ===> SetRemoteDescription
  3. それぞれの側で、関心のあるイベントハンドラー(onicecandidate、onremovestream、onaddstreamなど)を使用してpeerconnectionオブジェクトを作成します。
    • 氷の候補がピア接続オブジェクトから飛び出します===>反対側に送信します
  4. 両方のピアが存在し、すべてのハンドラーが配置されている場合、ピア1は、ビデオキャプチャを開始するための何らかのトリガーメッセージを受け取ります(getUserMedia呼び出し)
  5. getUserMediaが成功すると、ストリームが作成されます。ピア接続オブジェクトでaddStreamを呼び出します。
  6. 次に、ピア1がオファーを行います
  7. 以前に設定したハンドラーのため、ピア2は応答を送信します
  8. これと同時に(そしてかなり不透明に)、ピア接続オブジェクトは氷の候補の生成を開始します。それらは2つのピア間で送受信され、処理されます(上記のステップ2と3)
  9. ストリーミングは、次の2つの条件の結果として、不透明に、それ自体で開始されます。
    • オファー/アンサー交換
    • 氷の候補物を受け取り、交換し、処理しました

手順9の後で動画を追加する方法が見つかりません。何かを変更したい場合は、手順3に戻ります。

11
sandover