HTML-видео: возможен ли откат к HLS из-за отсутствия поддержки DASH / Webm-VP9 в Safari или как я могу поддерживать и Webm, и H264 в DASH? - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь обслуживать некоторый видеоконтент с веб-сервера с намерением поддерживать достаточно широкий набор браузеров.

Для iOS, насколько я могу судить, нужно использоватьHLS (HTTP Live Streaming), тогда как на настольном компьютере (и я полагаю, Android?) MPEG-DASH - это современный уровень.В качестве запасного варианта я могу предоставить несколько статичных видео.

У меня это работает на iOS с HLS и Chrome, Firefox, Opera и Edge на рабочем столе, но Safari на Mac просто показывает вращатель активности, когда яНажмите кнопку PLAY.Насколько я могу судить, это потому, что Safari пытается и не может использовать DASH в качестве метода воспроизведения, несмотря на отсутствие поддержки Webm и HLS, перечисленных в списке первым.

Для MPEG-DASH я использовал Webm с VP9 и Opusи мой тег <video> выглядит примерно так:

<video controls style="display:inline-block;max-width:174.22vh;max-height:98vh;width:98vw;height:55.125vw;background-color:#ccc;" preload="auto" poster="my-preview-image.jpg" data-dashjs-player>
    <source src="myvideo/hls/playlist.m3u8" type="application/x-mpegURL">
    <source src="myvideo/dash/manifest.mpd" type="application/dash+xml">
    <source src="myvideo/myvideo-vp9.webm" type="video/webm; codecs=vp9,opus">
    <source src="myvideo/myvideo-vp8.webm" type="video/webm; codecs=vp8,vorbis">
    <source src="myvideo/myvideo-h264.m4v" type="video/mp4; codecs=h264,aac">
</video>

И я просто импортирую эталонную реализацию DASH, используя

<script src="dash.all.min.js"></script>

Я генерирую потоки HLS и DASHиспользуя ffmpeg из высококачественного мастер-видео, экспортированного из Final Cut Pro.Статические резервные файлы Webm также создаются с использованием ffmpeg, в то время как статический резервный файл H264 представляет собой экспорт с более низкой скоростью передачи битов из Final Cut Pro.

Есть ли способ, которым я могу либо:

  • Скажите DASH соблюдать порядок источников и не переходить вперед от потока HLS
  • Или не вставлять, если video/webm; codecs=vp9,opus не поддерживается браузером.

Наконец, если ни один из них не возможен, могу ли я поддерживать несколько разных кодеков одновременно с DASH?то есть я могу предоставить потоки DASH VP9 и H264 и выбрать VP9 вместо H264, где это поддерживается, и в противном случае вернуться к H264 (с более высоким битрейтом или более низким качеством)?Как бы я начал создавать данные этого потока?

1 Ответ

1 голос
/ 19 июня 2019

Из того, чем вы поделились, ваш браузер будет использовать проигрыватель dashjs, когда он обнаружит тег видео с атрибутом «data-dashjs-player», а проигрыватель DASH сосредоточится на тех форматах, которые он поддерживает, но не включает HLS.

В качестве грубого решения вы можете проверить, может ли браузер воспроизводить HLS, и использовать собственный тег видео, если он может, и ваш проигрыватель DASH, если нет.Проверка воспроизведения HLS немного не определена, но следующий подход, кажется, работает в это время:

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

Это должно возвращать «возможно» в браузере, который может воспроизводить HLS (только Safari в настоящее время AFAIK) иничего, если он не может - я только что протестировал его на Safari и Chrome, и похоже, что он ведет себя следующим образом.

Стоит отметить, что dash.js должен иметь возможность проигрывать файлы MPEG DASH на Safari, поэтому он может бытьСтоит заглянуть в консоль или в логи, чтобы выяснить, почему она не будет воспроизводить ваше DASH-видео.

...