【问题标题】:How to clear html video element when removing track删除轨道时如何清除html视频元素
【发布时间】:2020-03-23 23:07:52
【问题描述】:

以下代码几乎可以满足我的要求:

video = document.querySelector('video');
video.srcObject = new MediaStream();

navigator.mediaDevices.getUserMedia({video: true}).then(stream => {
  stream.getTracks().forEach(track => {
    video.srcObject.addTrack(track);
  });
});

setTimeout(() => {
  video.srcObject.getVideoTracks().forEach(track => {
    track.stop()
    video.srcObject.removeTrack(track);
  });
}, 5000);

它启动相机并在屏幕上显示结果。 5 秒后,相机再次停止。但是,来自摄像机的最后一张图像在视频中仍为定格画面。如何清除视频元素?

(请注意,我只删除了视频轨道,因此可能仍有音频轨道在播放。)

编辑:我搞砸了问题的音频部分。在实际代码中,个音轨应该继续播放,我只是忘记将它们添加到示例中。

【问题讨论】:

    标签: javascript html5-video getusermedia mediastream


    【解决方案1】:

    您的代码正在从 MediaStream 中删除所有轨道,而不仅仅是视频轨道。 要仅删除视频,您可以这样做

    video.srcObject.getVideoTracks().forEach(track => {
      track.stop()
      video.srcObject.removeTrack(track);
    });
    

    注意getTracks 是如何被getVideoTracks 替换的。

    但即便如此,视频轨道的最后一帧很可能仍保留在<video> 元素中。要摆脱它,但保留音轨,您最好从音轨创建一个新的 MediaStream 并将其设置为您的 <video> 的新 srcObject:

    this fiddle 的代码,因为 StackSnippet 的 iframe 不允许调用 getUserMedia。

    (async ()=>{
    
      const video = document.querySelector('video');
      const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true } );
      video.srcObject = stream;
      video.play();
    
      btn.onclick = e => {
        stream.getVideoTracks().forEach( vidTrack => vidTrack.stop() );
        const new_stream = new MediaStream(stream.getAudioTracks());
        video.srcObject = new_stream;
        btn.remove();
      }
    
    })();
    
    <button id="btn">keep only audio</button>
    <video controls autoplay></video>
    

    如果您想用纯色替换它(例如黑色框架),那么您可以将 CanvasCaptureStreamTrack 与音轨一起传递,并在源 &lt;canvas&gt;:fiddle 上绘制纯色p>

    【讨论】:

    • 关于getVideoTracks() 的部分是我的错误,已在问题中修复。其余的听起来很有希望。如果它解决了我的问题,我会尝试。
    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多