Я хочу транслировать фрагменты HLS с использованием расширения источника мультимедиа. Я пробовал то же самое, используя фрагменты mpeg-dash (сгенерированные с помощью MP4Box) и расширение источника мультимедиа.
var mediaSource = new window.MediaSource();
mediaSource.addEventListener('sourceopen', _onSourceOpen);
$('video').attr('src', URL.createObjectURL(self.mediaSource));
function _onSourceOpen() {
sourceBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.64000d,mp4a.40.2"');
}
function _onFragmentDataLoad(data) {
sourceBuffer.appendBuffer(data);
}
Плавно работает на Chrome, Windows 8 IE, Android Chrome. Он также работает на сафари, но не получает полную продолжительность мультимедиа. Так что я попробовал то же самое с фрагментами HLS на сафари. Произведенные данные HLS содержат .m3u8
файл и другие .ts
фрагменты. Когда я назначаю файл .m3u8 в качестве источника видеоэлементу:
$('video').attr('src', 'filename.m3u8');
все работает как шарм. Но потом я теряю контроль над транспортом. Чтобы иметь полный контроль над транспортом и изменением разрешения, я попытался поместить .ts
фрагментов один за другим в инициализированные sourcebuffer
. Плохо проваливается в сафари. Но те же фрагменты HLS хорошо работают с exo player
. Мои вопросы: 1. Как добиться потоковой передачи HLS на сафари с помощью расширения Media Source Extension. 2. Поскольку генерация HLS не создает никаких init
фрагментов, в отличие от генерации тире, как медиаплеер понимает продолжительность и другие метаданные? 3. Как получить кодек этого HLS? Или есть какой-нибудь кодек, который по умолчанию сафари поддерживает и можно тут использовать?
Спасибо.