【问题标题】:WebRTC - Restart Video Stream After Calling stop()WebRTC - 调用 stop() 后重新启动视频流
【发布时间】:2021-01-09 19:15:54
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: javascript webrtc


    【解决方案1】:

    根据 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()
      }
    

    【讨论】:

      【解决方案2】:

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

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

      当为 true 时,启用表示允许轨道将其实际媒体渲染到输出。当 enabled 设置为 false 时,轨道只生成空帧。 source

      【讨论】:

      • 谢谢德克。根据此响应提出了解决方案。那是我认为我必须做的,但希望在赛道的原型上有一个更简单的方法来做到这一点。
      • 很高兴它有帮助。不幸的是,没有其他办法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      相关资源
      最近更新 更多