Подтвердить что ты не робот

Видео HTML5: Как проверить возможности воспроизведения HLS? (Video.canPlayType)

У меня есть видео, которое передается через HLS. Теперь я бы хотел протестировать JavaScript, если устройство действительно может воспроизводить видео HLS в HTML5.

Обычно в Javascript я делал что-то вроде document.createElement('video').canPlayType('video/mp4') Однако я не могу понять, какой "тип" является правильным для HLS.

Apple Safari HTML5 Audio и Video Guide, кажется, предлагает "vnd.apple.mpegURL" ( "Листинг 1-7. Возврат к подключению -в для IE" )

<video controls>
    <source src="HttpLiveStream.m3u8" type="vnd.apple.mpegURL">
    <source src="ProgressiveDowload.mp4" type="video/mp4">
....

но canPlayType("vnd.apple.mpegURL") возвращает пустую строку даже на устройствах iOS, которые отлично воспроизводят реальные потоки HLS.

Есть ли способ проверить возможности воспроизведения без "внешних знаний" (например, "проверить для пользовательского агента iOS и предположить, что он может играть в hls" )?

Я знаю, что могу указать несколько источников в элементе, и браузер будет использовать первый воспроизводимый источник. Однако в моем случае мне нужно подать один URL-адрес JW Player, который я не могу изменить. Поэтому мне как-то нужно найти "лучший воспроизводимый URL" из набора видеокодировок. (Библиотека JS с открытым исходным кодом, которая обрабатывает выбор источника, будет хорошим обходным решением.)

4b9b3361

Ответ 1

Я не тестировал это по всем направлениям, но похоже, что вы должны тестировать полный MIMEType HLS application/vnd.apple.mpegURL вместо просто vnd.apple.mpegURL.

application/x-mpegURL и audio/mpegurl также являются подходящими mimetypes для файла HLS m3u8. audio/x-mpegurl также указан как приемлемый тип изображения в соответствии с Apple, но он не упоминается в фактической спецификации спецификации HLS.

В Safari на iOS и OS X,

document.createElement('video').canPlayType('application/vnd.apple.mpegURL')

возвращает maybe. Я не уверен, есть ли другие браузеры, поддерживающие HLS-Android, похоже, не нравится этот синтаксис (несмотря на некоторые утверждения, которые я видел наоборот), и я считаю, что это может быть связано с тем, что фактическое воспроизведение видео передается внешнему приложению, а не самому браузеру.

Литература: