WebRTC:如何在提供和回答后添加流?

时间:2013-04-15 12:20:58

标签: javascript webrtc

我正在开展webRTC视频通话。我已成功实施datachannel。现在我想将视频流添加到同一个对等连接。

我已经读过应该在回答和提供之前添加流。有没有办法在回答或提供后添加流?

如果我在提供或回答之前添加了流,我怎么能停止流式传输并在需要时再次启动它?

维护这么多流可能有任何问题吗?

3 个答案:

答案 0 :(得分:14)

要在创建完整信号后添加流,Peer连接应重新协商与流。

pc1.addstream(stream)

然后再次创建优惠并将其发送给其他同行。

远程对等体将添加流并发送答案SDP。

停止流:

stream.stop();
pc1.removeStream(stream);

答案 1 :(得分:11)

根据我的经验,Konga Raju建议不起作用。我无法发送“更新的优惠”并且实际上发生了视频流。

我发现这个事件序列适用于我的情况,我希望将视频从对等体1流式传输到对等体2。

  1. 为对等方设置了一些交换消息的方法。 (人们如何实现这一点的差异使得不同的WebRTC代码样本如此不可通约,令人遗憾。)
  2. 在每一侧,为重要的信号事件设置处理程序。 (有些人报告说你需要在特殊时间创建这些处理程序,但我还没有发现这种情况。 )有3个基本事件:
    • 从另一方发送的冰候选人==>用它来呼叫addIceCandidate
    • 优惠讯息==> SetRemoteDescription&回答&发送它
    • 回答消息===> SetRemoteDescription
  3. 在每一侧,使用我们关心的事件处理程序创建peerconnection对象:onicecandidate,onremovestream,onaddstream等。
    • ice候选者弹出peerconnection对象===>将其发送到另一方
  4. 当两个对等方都存在并且所有处理程序都已到位时,对等方1会获得某种触发消息以启动视频捕获(getUserMedia调用)
  5. 一旦getUserMedia成功,我们就有了一个流。在对等连接对象上调用addStream
  6. 然后同伴1提出要约
  7. 由于我们之前设置的处理程序,对等方2发送了答案
  8. 与此同时(并且相当不透明地),对等连接对象开始产生冰候选者。它们在两个同伴之间来回传递并处理(上面的步骤2和3)
  9. 由于两个条件,流式传输本身是不透明的:
    • 提供/回答交流
    • 冰候选人收到,交换和处理
  10. 我还没有找到在第9步之后添加视频的方法。当我想要改变某些内容时,我会回到第3步。

答案 2 :(得分:-2)

首先应该将MediaStream添加到peerconnection然后才能进行交换提供,回答,候选人。如果调用onAddStream(),则表示您正在接收远程视频。