通过 forEach(function(track) {track.stop();} 关闭流后重新启动流

问题描述 投票:0回答:3
myVideoStream.getTracks().forEach(function(track) {
  track.stop();
}

关闭所有轨道后如何重新启动流轨道。 或在视频流应用程序中打开和关闭摄像头的任何替代方法(例如在 google meet 中打开关闭视频按钮)

javascript html video-streaming
3个回答
0
投票

MDN 的文档介绍了以下有关停止轨道的信息。

调用 stop() 告诉用户代理 MediaStreamTrack 不再需要轨道的源(无论该源是什么,包括文件、网络流或本地摄像头或麦克风)。由于多个轨道可能使用相同的源(例如,如果两个选项卡正在使用设备的麦克风),因此源本身不一定会立即停止。相反,它与轨道解除关联并且轨道对象停止。一旦没有媒体轨道正在使用该源,该源实际上可能会完全停止。

这意味着您必须通过创建一个新流来重新启动流,因为媒体已完全停止运行。


0
投票

我也遇到了同样的问题,我通过使用

track.enable = false
静音,然后使用
track.enable = true
重新激活来解决它,只需在静音之前将原始轨道保存在独立变量中,并使用该变量独立的轨道重新激活,记住重新激活时需要使用
track.enable = true

希望这有帮助。


0
投票

你也可以尝试这个:

track.enabled = false;// to mute
console.log(track);
track.enabled = true;//to unmute
                    
© www.soinside.com 2019 - 2024. All rights reserved.