27

我正在开发 webRTC 视频通话。我成功实现了数据通道。现在我想将视频流添加到同一个对等连接。

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

如果我在提供或回答之前添加了流,我如何停止流并在需要时重新开始?

维护这么多流会有什么问题吗?

4

3 回答 3

18

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

pc1.addstream(stream)

然后再次创建报价并将其发送给其他 Peer。

远程对等方将添加流并发送应答 SDP。

要停止流:

stream.stop();
pc1.removeStream(stream);
于 2013-05-09T11:24:11.030 回答
14

根据我的经验,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. 由于我们之前设置的处理程序,peer 2 发送了一个答案
  8. 与此同时(并且相当不透明),对等连接对象开始产生候选冰。它们在两个对等点之间来回发送并处理(上面的步骤 2 和 3)
  9. 由于 2 个条件,流式传输本身不透明地开始:
    • 提供/回答交换
    • 接收、交换和处理的ICE候选人

在第 9 步之后我还没有找到添加视频的方法。当我想更改某些内容时,我会回到第 3 步。

于 2014-02-06T18:57:18.690 回答
-3

MediaStream 应该首先添加到 peerconnection 中,然后才能交换 offer、answer、candidates。如果调用了 onAddStream() ,则表示您正在接收远程视频。

于 2015-08-13T05:57:18.907 回答