WebRTC端在track事件中为何获取到空的event.streams数组?
WebRTC removeTrack后addTrack的相关问题解答
1. 本地端获取到空的streams[]数组是否符合预期?
符合预期。当远端先调用removeTrack()移除轨道,再调用addTrack()添加新轨道时,如果远端没有将新轨道关联到已有的MediaStream(比如调用addTrack(track)时未传入第二个参数指定关联的流),本地触发的track事件中event.streams数组就会是空的。WebRTC规范里,track事件的streams仅包含与新增轨道明确绑定的媒体流,无绑定关系时则为空数组,这是正常行为。
2. 是否应按上述方式创建新MediaStream对象,还是有更推荐的方案?
你给出的手动创建新MediaStream的方式是可行的,也是常用方案之一。除此之外还有两种更灵活的选择:
- 远端主动关联流:远端在调用
addTrack()时,把新轨道关联到原有的MediaStream(比如peerConnection.addTrack(newTrack, existingStream)),这样本地track事件的event.streams就会包含该流,直接使用event.streams[0]即可,无需本地手动创建流。 - 本地复用原有流:如果本地保存了之前的
MediaStream引用,可以直接将新增轨道添加到该流中:// 假设existingStream是之前保存的媒体流引用 existingStream.addTrack(addedTrack); // video标签的srcObject无需修改,流会自动更新
这种方式避免了创建新流,更适合需要保持流引用一致性的场景。
内容的提问来源于stack exchange,提问作者Tobic
相关产品推荐
相关产品推荐

