VideoJS выбирает источник в соответствии с браузером - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть тире и поток HLS.Я могу играть их отдельно на сафари хром и край.Тем не менее, я хочу создать один плеер и определить браузер, чтобы я мог передать правильную конфигурацию в качестве источника для игрока.

Я пробовал что-то вроде следующего

myPlayer.src([
  { type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" },
  { type: "video/webm", src: "http://www.example.com/path/to/video.webm" },
  { type: "video/ogg", src: "http://www.example.com/path/to/video.ogv" }
]);

Однако, он просто воспроизводит первый, и если первый поток является тире, и вы открываете его в сафари, он выдает ошибку,Выше приведен только пример, мои источники имеют информацию о DRM и множество вариантов.Можете ли вы помочь мне с примером примера.

1 Ответ

0 голосов
/ 12 декабря 2018

Взаимодействие между DRM и пакетными или потоковыми протоколами немного сложное.

HLS и DASH - это потоковые протоколы с адаптивной скоростью передачи битов.Сервер создает несколько фрагментированных версий видео с битрейтом, и это позволяет клиентскому устройству или проигрывателю загружать видео порциями, например, 10-секундными, и выбирать следующий блок с битрейтом, наиболее подходящим для текущих условий сети.См. Также дополнительную информацию в этом ответе: https://stackoverflow.com/a/42365034/334402

Существует файл индекса или манифеста, который представляет собой просто текстовый / XML-файл, содержащий различные потоки видео, аудио, субтитров и т. Д., А также проверяющие URL-адреса для них.Это файл .mpd или .m3u8.

Большинство браузеров не поддерживают эти файлы манифеста HLS и DASH непосредственно (Safari поддерживает HLS в качестве исключения).Вам необходимо использовать проигрыватель HTML5, такой как video.js, Shaka, BitMovin и т. Д.

DRM позволяют зашифровать содержимое и безопасно разделить ключи для содержимого между сервером и клиентами.

Как правило, следующие DRM изначально поддерживаются на устройстве и браузерах - наивно означает, что DRM обычно встроен в ОС или браузер при покупке устройства:

  • Устройства Android -Браузер Widevine
  • на ПК или MAC - Widevine
  • FireFox - Устройство Widevine
  • для iOS - FairPlay
  • Браузер Safari - FairPlay
  • Браузер Internet Explorer - PlayReady

Взаимодействие между DRM и упаковкой становится немного сложнее - MPEG-DASH (часто называемый просто DASH) призван стать отраслевым стандартом, и Google и MS, похоже, одобряютэто, но устройства Apple все еще предпочитают HLS.

DASH поддерживает CENC, что позволяет одному потоку поддерживать несколько типов DRM.HLS обычно используется с FairPlay, хотя он может поддерживать и другие схемы.

Таким образом, с оговоркой, что это не является абсолютным, и можно найти другие примеры, типичный случай, когда служба достигает всех устройств.в это время будет:

  • MPEG-DASH - одиночный поток с Widevine и PlayReady DRM
  • HLS с FairPlay DRM

Вы можете видеть изКроме того, HTML5-проигрыватели, такие как video.js и т. д., должны проверить браузер, в котором они работают, и типы доступных потоков, чтобы сделать лучший выбор потока.

Итак, возвращаясь к вашему вопросу, вы можете указать потоки HLS и DASH в конфигурации video.js, а не mp4, web и т. Д., Как в приведенном выше фрагменте кода.Это будет выглядеть так:

var player = videojs('some-video-id');

player.src({
  src: 'https://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8',
  type: 'application/x-mpegURL',
  withCredentials: true
});

Этот пример взят из https://github.com/videojs/http-streaming, который теперь является частью стандартной сборки video.js.Документация с примерами очень тяжелая, но она должна работать и с DASH.

...