1

有什么方法可以区分 webrtc 视频通话中的屏幕共享轨迹和摄像头轨迹?

我可以使用适当的协商事件添加两个视频轨道(相机以及屏幕共享轨道)。但是,我无法区分这两个轨道(因为它们都具有kind视频属性并且它们的 id 似乎是随机生成的并且与轨道的实际所有者的 ID)

我还经历了几个类似的问题,这些问题提出了以下几点:

1.区分使用他们的ID。

这个解决方案对我不起作用,因为一旦我重新共享我的屏幕(在停止共享然后再次共享之后),一个新的 ID 将被分配给来自重新共享的轨道。

2.使用transceiver.mid属性区分

这似乎也不起作用,因为在关闭摄像头时,摄像头轨道会从对等实例中删除(以节省带宽),并在打开摄像头时添加回来。这会在轨道所在的远程端调用 ontrack 事件不同的transceiver.mid属性(与mid之前的摄像机轨迹所具有的属性不同)

此外,我不能为从getUserMediaapi 获得的流分配任何额外的属性。track对象似乎是不可变的。

请提出一种我可以用来区分这两条轨道的方法。

谢谢

4

2 回答 2

1

据我所知, mid 和 rid 是唯一端到端保留的轨道属性(保留 id)。因此,您使用 mid 的方法可能是正确的方法。

正如您所注意到的,mid只要从对等连接中删除轨道,就可能会重新计算 s 。您有两种解决方案:

  • 维护 ids 和 mids 之间的映射,并在重新协商时重新计算映射;
  • 永远不要删除轨道,并使用轨道的enabled属性来停止发送视频数据。

后一种解决方案更简单,并且避免了在相机被禁用时执行一轮信令的需要。(当一侧设置enabled时,另一侧应注意并设置muted在相应的远程轨道上。)

于 2021-08-17T17:57:28.013 回答
1

根据我的观察,我认为您有以下选择可以实现:

  • 最简单的解决方案是在用户想要关闭相机时禁用视频轨道。
  • 第二种解决方案是生成一个新的peer实例来添加屏幕轨迹。这种方法在大多数生产应用程序中被广泛使用。
于 2021-08-20T08:32:39.590 回答