区分普通 webrtc 中的屏幕共享轨道和相机轨道

Differentiate between screen share track and camera track in a normal webrtc

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

我可以使用适当的协商添加两个视频轨道(相机和屏幕共享轨道)event.But,我无法区分这两个轨道(因为它们都有 属性 个 kind 视频及其 ID 似乎是随机生成的,与曲目的实际所有者的 ID 不同)

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

1.Differentiating 使用他们的 ID。

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

2.Differentiating 使用 transceiver.mid 属性

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

此外,我无法将任何额外的 属性 分配给从 getUserMedia api 获得的流。track 对象似乎是不可变的。

请建议我可以用来区分这 2 个音轨的方法。

谢谢

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

正如您刚刚注意到的那样,每当从对等连接中删除轨道时,可能会重新计算 mids。您有两种解决问题的方法:

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

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

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

  • 最简单的解决方案是在用户想要关闭相机时禁用视频轨道。
  • 第二种解决方案是生成一个新的peer实例用于添加屏幕track.This这种方法在大多数生产应用中被广泛使用。