Использование MediaSource для видео с MediaRecord
Я пытаюсь транслировать видео с моей веб-камеры в формате javascript. я использую MediaStream
чтобы получить видео с моей веб-камеры, MediaRecorder
записывать такое видео порциями (которые будут передаваться на сервер), и MediaSource
собрать эти куски и воспроизводить их без проблем в видео-контейнере под названием watchVideo
на источнике ниже.
Все отлично работает, когда я снимаю только видео, т.е. constraints = { video: true } ;
но если я добавлю аудио, то watchVideo
ничего не отображается, и консоль показывает мне следующую ошибку:
Uncaught DOMException: Failed to execute 'appendBuffer' on 'SourceBuffer': This SourceBuffer has been removed from the parent media source.
Это соответствующая часть кода:
var mime = 'video/webm; codecs=vp8';
if (navigator.mediaDevices) {
constraints = { video: true, audio: true };
navigator.mediaDevices.getUserMedia(constraints)
.then(handleUserMedia)
.catch( err => {
console.log("ERROR: " + err);
})
}
function handleUserMedia(stream) {
source = new MediaSource();
watchVideo.src = window.URL.createObjectURL(source);
source.onsourceopen = () => {
buffer = source.addSourceBuffer(mime);
};
var options = { mimeType: mime };
mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.ondataavailable = handleDataAvailable;
}
function handleDataAvailable(evt) {
var filereader = new FileReader();
filereader.onload = () => {
buffer.appendBuffer(filereader.result );
};
filereader.readAsArrayBuffer(evt.data);
}
1 ответ
Я столкнулся с вопросом, и он действительно помог мне больше, чем многие ответы, связанные с этой темой. Я не знаю, если вы все еще заинтересованы в ответе, но я попытался
mime="video/webm; codecs="vp9,opus"
и он отлично работал с аудио и видео, я надеюсь, что этот ответ поможет вам