Использование расширений источника мультимедиа соответствует DOMException: не удалось загрузить, поскольку не найден поддерживаемый источник
Я использую преобразование ffmpeg mp4 в m3u8; И он сохраняет то же значение кодека. И когда я использую fetch, чтобы получить буфер TS и добавить его к экземпляру MSE. Так плохо. Не работает
Некоторый код здесь:
function sourceOpen(e) {
URL.revokeObjectURL(video.src);
// var mime = 'video/mp4; codecs="avc1.42c015, mp4a.40.5"';avc1.42001e"
var mime = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
var mediaSource = e.target;
sourceBuffer = mediaSource.addSourceBuffer(mime);
var videoUrl = './video/' + playManifest.segments[index]['uri'];
log('.js-log-m3u8', 'Fetch Segment ~' + videoUrl);
fetch(videoUrl, {
// headers: { range: 'bytes=0-5671398' }
})
.then(function (response) {
return response.arrayBuffer();
})
.then(function (arrayBuffer) {
sourceBuffer.appendBuffer(arrayBuffer);
sourceBuffer.addEventListener('updateend', updateEnd);
});
}
Онлайн тестовая страница: http://events.jackpu.com/media-source/
1 ответ
Вы устанавливаете тип mime для video/mp4, но пытаетесь добавить сегменты транспортного потока в исходный буфер. В результате добавления не выполняются, и данные не буферизируются.
Вы вызываете play после того, как все сегменты извлечены, без проверки, буферизованы ли какие-либо данные, и Promise отклоняется.
Вам необходимо создать SourceBuffer с правильным типом MIME, предполагая, что ваш пользовательский агент способен на это.