Потоковая передача HLS на сафари с использованием MediaSource api

Я хочу транслировать фрагменты 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? Или есть какой-нибудь кодек, который по умолчанию сафари поддерживает и можно тут использовать?

Спасибо.


person sonam    schedule 22.05.2015    source источник