视频元素上的captureMediaStream()不能触发mediaStreamTrack结束事件?

时间:2018-09-03 07:27:48

标签: javascript webrtc

我正在使用WebRTC API来实现屏幕共享和媒体文件播放,我能够成功共享屏幕并收听mediaStreamTrack结束事件。但是我能够在WebRTC上成功播放媒体文件,但无法收听mediaStreamTrack结束事件(未触发)。因此我无法更改为网络摄像头,也不知道文件何时播放到最后。

_setScreenEndedListener(track) {
    track.addEventListener('ended', () => {
        this.removeLocalVideo(true);
        logger.warn('#screen sharing stoped !!');
        this.emit('screen-sharing-stop');
    });
}

以上是我收听活动的方式。我认为没有问题。但是在元素上播放的媒体文件和 video.captureStream()生成的流,当媒体文件移至文件末尾时,其streamTrack不能触发end事件。不知道是bug还是其他东西,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

是的,即使您的媒体播放结束了,您的MediaStream仍然有效,这是因为您可能非常想从该相同的流中显示其他媒体(Chrome不支持...)或只是设置它返回到另一个currentTime,因此它确实循环了:

source.onplaying = e => {
  source.onplaying = null;
  target.srcObject = source.captureStream ? source.captureStream() : source.mozCaptureStream ? source.mozCaptureStream() : console.error('unsupported browser');
  target.play();
};
source.onended = e => {
  console.log('Ended. Looping back in time.');
  source.load();
  source.play();
}
source.play();
video{
  max-width: 48vw;
}
<video id="target" muted></video>
<video id="source" crossorigin controls
  src="https://upload.wikimedia.org/wikipedia/commons/transcoded/a/a4/BBH_gravitational_lensing_of_gw150914.webm/BBH_gravitational_lensing_of_gw150914.webm.480p.webm#t=25"></video>

因此,在您遇到的情况下,您要监听的事件是MediaElement之一(例如<video>),而不是MediaStream之一。