为什么 webrtc Peer 在 `track` 事件中得到空的 event.streams 数组?

问题描述 投票:0回答:1

当 webrtc 连接(javascript)中的远程调用removeTrack() 和 addTrack() 时,本地对等点会获取带有

track(event)
event.streams.length === 0
事件。
所以,我无法将
videoTag.srcObject
设置为
event.streams[0]

我必须手动构造新的 MediaStream 对象并将其分配给
srcObject
:

let streamToAdd;
if (event.streams.length === 0)
    streamToAdd = new MediaStream([addedTrack]);
else
    streamToAdd = event.streams[0];


userAV.video.srcObject = streamToAdd; //// instead of event.streams[0];

我的问题是:

  1. 本地对等方获取空的 Streams[] 数组是否正确?
  2. 我应该如上所示创建新的 MediaStreamObject 还是建议使用其他方法?
webrtc
1个回答
0
投票

我想回应,完全归功于Philipp Hancke,因为我只是偶然看到他的评论,我认为对于那些将来遇到同样问题的人来说,答案会更明显。

我引用了

addTrack
文档的相关部分:

addTrack(track, stream1, stream2, /* …, */ streamN)

...

track

A

MediaStreamTrack
对象,表示要添加到对等点的媒体轨道 连接。

stream1, …, streamN
可选

应添加轨道的一个或多个本地

MediaStream
对象。

关于问题:

  1. 是的,如果在不指定第二个参数的情况下调用远程对等点中的
    streams
    ,则
    addTrack
    是空数组是正确的
  2. 是的,您可以通过构造函数创建一个
    MediaStream
    并添加接收到的曲目。

但是,如果同一流中还有另一个音频/视频轨道,建议使用第二个参数。这样,WebRTC 层将为您同步两个轨道(即唇形同步)。

© www.soinside.com 2019 - 2024. All rights reserved.