Использование расширений источника мультимедиа соответствует 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/


person Jack Pu    schedule 24.02.2018    source источник


Ответы (1)


Вы устанавливаете тип mime на видео/mp4, но пытаетесь добавить сегменты транспортного потока в исходный буфер. В результате добавления завершаются со сбоем, и данные не буферизуются.

Вы вызываете play после получения всех сегментов, не проверяя, были ли какие-либо данные буферизованы, и Promise отклоняется.

Вам нужно будет создать SourceBuffer с правильным типом mime, если ваш пользовательский агент способен это сделать.

person Anonymous Coward    schedule 28.02.2018
comment
любой инструмент получает значение кодека, например avc1.42E01E, mp4a.40.2 - person Jack Pu; 02.03.2018
comment
Проблема заключается в формате контейнера, а не в типе кодека. Вы создаете SourceBuffer типа video/mp4, но добавляете сегменты транспортного потока. Вам нужно либо переупаковать сегменты вашего транспортного потока в сегменты MP4, либо создать SourceBuffer с типом mime video/mp2t (при условии, что вы можете найти пользовательский агент, который позволит вам это сделать). - person Anonymous Coward; 02.03.2018