我正在尝试将网络摄像头媒体流与从视频中获得的简短音轨合并,这些视频在页面上逐一播放。合并的流使用MediaRecorder记录。
let newStream, audioTrack = [];
let video = this.video.current; // ref to video with audiotrack
if (video && merger) { // merger is a merged stream for MediaRecorder
let audio = video.captureStream();
try {
audioTrack = audio.getAudioTracks();
newStream = new MediaStream(audioTrack);
merger.addStream(newStream);
} catch (err) {
setTimeout(() => {
if (audioTrack.length > 0) merger.addStream(newStream);
else this.addAudioTrack(); // call this function again
}, 500);
}
}
我不得不使用setTimeout
,否则在视频刚刚开始播放后,音频流还没有准备好捕获,它会捕获块并陷入无限循环。
我想应该有一种更优雅的方法来处理视频尚未准备好从中捕获音轨的情况,等到它准备好后立即提取音频。