Можно ли расшифровать содержимое DRM HLS в Windows?

Мне нужно разработать функцию, которая расшифровывает контент DRM HLS с помощью библиотеки video.js. Я узнал об этой проблеме и нашел ее (https://docs.microsoft.com/ko-kr/azure/media-services/previous/media-services-protect-hls-with-fairplay). используется playready, как показано ниже

const setPlayerForDashHLS = (src, type, key, licenseURL) => {
                    const customData = DRM_TYPE + SITE_ID + key;

                    player.src({
                        src: src,
                        type: type,
                        keySystems: {
                            'com.microsoft.playready': {
                                url: licenseURL,
                                licenseHeaders: {
                                    'pallycon-customdata': customData
                                }
                            }
                        }
                    });
                }

но он не работает для воспроизведения видео DRM HLS и не печатает ничего о журнале ошибок. Я хочу знать, как это играть.


person Mingyu Choi    schedule 17.07.2020    source источник


Ответы (3)


Поскольку вы используете службы мультимедиа Azure, у вас уже есть динамическая упаковка — т. е. вы можете получить вывод HLS и MPEG-DASH из одних и тех же основных видеоресурсов. Я настоятельно рекомендую вам использовать MPEG-DASH, если вы пытаетесь воспроизвести контент в браузере. HLS + PlayReady поддерживается только на очень небольшом количестве устройств, тогда как MPEG-DASH + PlayReady поддерживается практически во всех местах, поддерживающих PlayReady.

Кроме того, я предполагаю, что вы уже работаете с поставщиком PlayReady DRM, если не на сайте PlayReady и/или Widevine указан ряд поставщиков.

Кроме того, вы, вероятно, также захотите поддерживать Widevine, поскольку именно он поддерживается для воспроизведения в Google Chrome и Firefox.

person colde    schedule 21.07.2020

Существует официальный плагин для VideoJS, который поддерживает воспроизведение DRM, используя стандарт EME.

EME (Encrypted Media Standard) — это расширение HTML5 для поддержки воспроизведения зашифрованных мультимедиа стандартным способом — https://www.w3.org/TR/2017/REC-encrypted-media-20170918/)

Вы можете увидеть плагин VideoJS здесь: https://github.com/videojs/videojs-contrib-eme

Он включает инструкции по настройке и воспроизведению с помощью PlayReady DRM.

Глядя на сообщение об ошибке, которое вы получаете:

введите здесь описание изображения

Это генерируется платформой или браузером и указывает:

Не поддерживается ошибка

Либо указанная система ключей не поддерживается платформой или браузером, либо ни одна из конфигураций, указанных в поддерживаемых конфигурациях, не может быть удовлетворена (если, например, ни один из кодеков, указанных в contentType, недоступен).

(https://developer.mozilla.org/en-US/docs/Web/API/Navigator/requestMediaKeySystemAccess)

Глядя на вашу конфигурацию выше, одной из причин, по которой вы можете получить это, может быть воспроизведение видео в браузере, который не поддерживает PlayReady. Как общее (не абсолютное) правило, в настоящее время DRM поддерживаются «изначально» браузерами и устройствами:

  • Устройства Android – Widevine
  • Браузер Chrome - Widevine
  • FireFox — Широкая лоза
  • iOS-устройство – FairPlay
  • Браузер Safari - FairPlay
  • Браузер Internet Explorer - PlayReady

Чтобы попытаться минимизировать накладные расходы для поставщиков видеопотоков CENC (https://en.wikipedia.org/wiki/MPEG_Common_Encryption) позволяет защитить один поток с помощью PlayReady или Widevine.

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

person Mick    schedule 20.07.2020
comment
Спасибо за комментарий. но у меня была установлена ​​библиотека videojs-contrib-eme. и я пробовал это, как указано выше. но я получил сообщение об ошибке. github.com/videojs/videojs-contrib-eme/issues/115 - person Mingyu Choi; 21.07.2020
comment
@MingyuChoi См. обновление выше - я включил ваше сообщение об ошибке для ясности. - person Mick; 22.07.2020

Можно ли расшифровать содержимое DRM HLS в Windows?

Мне нужно разработать функцию, которая дешифрует [...]

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

В любом случае вы не сможете расшифровать содержимое, защищенное DRM, в Windows. Вам понадобится ключ дешифрования, и когда дело доходит до дешифрования, этот ключ применяется известным, четко определенным способом. Однако ключ — это именно то, что вам никогда не дадут. Особенно в Windows, например, в случае Microsoft PlayReady DRM, совместимые браузеры предоставляют услугу расшифровки посредством реализации спецификации EME (Encrypted Media Extensions). Браузеры расшифровывают контент на условиях, при которых расшифрованный контент воспроизводится с учетом дополнительных ограничений (довольно ограничительных, подумайте о принудительно защищенном контенте, защищенном на физическом кабеле для мониторинга при воспроизведении такого контента!), и вы никогда не получите назад, в частности, простые расшифрованные данные.

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

person Roman R.    schedule 15.11.2020