繁体   English   中英

WebRTC - 调用 stop() 后重新启动视频流

[英]WebRTC - Restart Video Stream After Calling stop()

因此,我使用 webRTC 创建本地流(视频和音频),并希望能够停止和重新启动所述流的视频。

在我想停止流时,我正在获取本地视频轨道:

     var vidTrack = this.videoEl.srcObject.getTracks().find(track => track.kind == 'video')

然后我在轨道上调用 stop() ,它可以工作,并关闭我设备上的相机指示灯(这是我想要的)。 问题是这似乎是一种单向方法,一旦我调用 stop() 就无法重新启动流。

我玩过只是在轨道对象上切换enabled布尔值,这确实禁止轨道通过,但不会停止在我的设备上显示相机指示灯(我需要,stop() 确实如此)。

只是想知道是否有人遇到过这个问题/有想法或解决方案来获得我需要的东西。

根据 Dirk V 的回应,这是我为将来可能会看到此问题的任何人而最终得出的解决方案:

  if (vidTrack && toggle && vidTrack.readyState && vidTrack.readyState == "ended") {
    let newVideoStreamGrab = await navigator.mediaDevices.getUserMedia({
      video: true
    })
    this.stream.removeTrack(this.stream.getVideoTracks()[0])
    this.stream.addTrack(newVideoStreamGrab.getVideoTracks()[0])
  } else {
    vidTrack.stop()
  }

最好的方法是在停止后再次从相机请求流,因为无法重新启动停止的轨道。

启用标志仅用于允许或禁止轨道渲染帧。 所以这意味着它不会影响相机的状态。

如果为 true,则启用表示允许轨道将其实际媒体呈现到输出。 当 enabled 设置为 false 时,轨道仅生成空帧。 来源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM