Я пытаюсь объединить медиапоток веб-камеры с короткими аудиотреками, полученными из видео, которые воспроизводятся один за другим на странице.Объединенный поток записывается с использованием 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
, в противном случае аудиопоток еще не готов для захвата после того, как видео только начало воспроизводиться, и он перехватывает блокировку и застреваниев бесконечный цикл.
Полагаю, должен быть более элегантный способ обработки случаев, когда видео еще не готово захватывать аудиотреки с него, подождать, пока оно не будет готово, и немедленно извлечь аудио после этого.