Предварительные требования
Перед реализацией автономного DRM для FairPlay на устройстве iOS 10+ вам нужно:
- Ознакомьтесь с требованиями к лицензиям и конфигурацией Apple FairPlay.
- Получить пакет SDK FPS из сети разработчиков Apple. Пакет SDK FPS состоит из двух компонентов:
- Пакет SDK сервера FPS, который содержит модуль безопасности ключа (KSM), образцы клиентов, спецификацию и набор тестовых векторов.
- Пакет развертывания FPS, содержащий спецификацию функции D, а также инструкции по созданию закрытого ключа FPS-сертификата клиента и секретного ключа приложения. Apple выдает пакет развертывания FPS только лицензированным поставщикам содержимого.
- Файлы сертификатов .der или .cer, которые вы получаете при создании сертификата FPS, содержат открытый ключ и могут быть доступны клиенту. Закрытый ключ (.pfx) должен храниться в Azure Key Vault или другом безопасном расположении.
Хранение закрытого ключа FairPlay (PFX) в Azure Key Vault
Закрытый ключ (.pfx), полученный от Apple, должен рассматриваться как безопасный сертификат и может храниться в Azure Key Vault.
- Файл .pfx сертификата сначала должен быть преобразован в текстовый файл Base64 администратором.
- После преобразования этот файл можно сохранить в Azure DevOps Services в виде безопасного текстового файла.
- Затем строку можно сохранить в Azure KeyVault вручную как объект секрета либо как часть скрипта развертывания или сборки для вашего решения. Пример хранения закрытого сертификата FairPlay в Azure KeyVault см. в примере кода проекта Gridwich.
- При необходимости сохраните пароль для файла .pfx в виде секрета в хранилище ключей.
Пример скрипта CLI
Чтобы скопировать файл закрытого ключа в кодировке Base64 в Хранилище ключей Azure, выполните следующие действия.
set -eu
echo key vault : $SHARED_KV_NAME
echo "Copying FairPlay certificate to key vault as secret"
az keyvault secret set --vault-name $SHARED_KV_NAME -n ams-fairPlay-certificate-b64 -f $(FairPlayCertificate.secureFilePath) --output none
Клонирования репозитория
Клонируйте примеры служб мультимедиа .NET.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
вносит изменения в код;
Измените код в разделе Шифрование с помощью DRM с помощью .NET , чтобы добавить конфигурации FairPlay.
Примечание
Widevine недоступен в регионе GovCloud.
Предварительные требования
Перед реализацией автономного DRM для Widevine на устройствах Android вам потребуется:
- Ознакомиться с концепциями, реализованными для защиты интернет-содержимого с помощью Widevine DRM.
- Клонировать https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git.
- Ознакомиться с пакетом SDK ExoPlayer Google для Android, пакетом SDK видеопроигрывателя с открытым исходным кодом, поддерживающего автономное воспроизведение Widevine DRM.
Включение автономного режима
Чтобы включить автономный режим для лицензий Widevine, настройте шаблон лицензии Widevine. В объекте policy_overrides задайте для свойства can_persistзначение true, как показано в разделе ConfigureWidevineLicenseTemplate.
Для разработки приложений со встроенным проигрывателем для устройств Android проще всего использовать пакет SDK Google ExoPlayer, пакет SDK видеопроигрывателя с открытым кодом. ExoPlayer поддерживает функции, не поддерживаемые встроенным API MediaPlayer для Android, в том числе протоколы доставки MPEG-DASH и Microsoft Smooth Streaming.
ExoPlayer версии 2.6 и более поздних версий включает в себя множество классов, поддерживающих воспроизведение Widevine DRM в автономном режиме. В частности, OfflineLicenseHelper
класс предоставляет служебные функции для упрощения использования DefaultDrmSessionManager для скачивания, обновления и освобождения автономных лицензий. Классы, предоставляемые в папке library/core/src/main/java/com/google/android/exoplayer2/offline/
SDK, поддерживают скачивание автономного видеосодержимого.
Указанный ниже перечень классов упрощает автономный режим в пакете SDK ExoPlayer для Android.
library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ErrorStateDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java
library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloaderConstructorHelper.java
library/core/src/main/java/com/google/android/exoplayer2/offline/Downloader.java
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/offline/DashDownloader.java
Во время разработки приложения разработчикам следует использовать руководство разработчика ExoPlayer и соответствующий блог разработчиков.
Работа со старыми устройствами Android
Для некоторых старых устройств Android необходимо задать значения для следующих свойств policy_overrides (определенных в шаблоне лицензии Widevine): rental_duration_seconds, playback_duration_seconds и license_duration_seconds. Кроме того, можно задать для них 0
значение , что означает отсутствие ограничений по времени.
Предупреждение
Значения необходимо задать, чтобы избежать ошибки переполнения целочисленного значения. Дополнительные сведения об этой проблеме приведены на страницах https://github.com/google/ExoPlayer/issues/3150 и https://github.com/google/ExoPlayer/issues/3112.
Если не задать значения явно, для свойств PlaybackDurationRemaining и LicenseDurationRemaining будут назначены очень большие значения (например, 9223372036854775807, которое является максимально положительным значением для 64-разрядного целого числа). В результате этого срок действия лицензии Widevine истечет и расшифровка не произойдет.
Эта проблема не возникает в Android 5.0 Lollipop или более поздней версии, так как Android 5.0 является первой версией Android, которая полностью поддерживает ARMv8 (Advanced RISC Machine) и 64-разрядные платформы, тогда как Android 4.4 KitKat изначально поддерживает ARMv7 и 32-разрядные платформы, как и другие ранние версии Android.
Создание приложения для воспроизведения Android с помощью Xamarin
Привязки Xamarin для ExoPlayer доступны по следующим ссылкам:
Ознакомьтесь со следующим обсуждением: Привязка Xamarin.
Приложения проигрывателя Chrome для Android
Начиная с выпуска Chrome для Android версии 62 в EME поддерживается постоянная лицензия.
Widevine L1 теперь поддерживается в браузере Chrome для Android. Это позволяет создавать приложения для автономного воспроизведения в браузере Chrome, если у пользователей эта версия Chrome (или более поздняя).
Кроме того, Компания Google подготовила пример прогрессивного веб-приложения (PWA):
Если обновить браузер Chrome версии 62 (или более поздней) для мобильных устройств на телефоне Android и протестировать размещенный выше пример приложения, будет работать как потоковая передача в оперативном режиме, так и воспроизведение в автономном.
Приведенное выше приложение PWA с открытым исходным кодом создается на языке Node.js. Если вы хотите разместить собственную версию на сервере Ubuntu, необходимо учитывать следующие распространенные обнаруженные проблемы, которые могут помешать воспроизведению.
- Проблема CORS: пример видео в примере приложения размещен в https://storage.googleapis.com/biograf-video-files/videos/. Компания Google настроила CORS для всех своих тестовых примеров, размещенных в контейнере Google Cloud Storage. Они обслуживаются с заголовками CORS, где явно указана запись CORS
https://biograf-155113.appspot.com
(домен, в котором компания Google разместила свой пример), препятствующая доступу с других сайтов. При попытке доступа появится сообщение об ошибке HTTP: Failed to load https://storage.googleapis.com/biograf-video-files/videos/poly-sizzle-2015/mp4/dash.mpd: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https:\//13.85.80.81:8080' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
- Проблема с сертификатом: начиная с версии 58 Chrome для EME для Widevine требуется протокол HTTPS. Таким образом, необходимо разместить пример приложения по протоколу HTTPS с сертификатом X509. Обычный тестовый сертификат не подходит из-за следующих требований. Вам необходимо получить сертификат, который удовлетворяет следующим минимальным требованиям:
- Для Chrome и Firefox требуется, чтобы в сертификате был параметр "Альтернативное имя субъекта" (SAN).
- Сертификат должен быть подписан доверенным центром сертификации, самозаверяющий сертификат разработки не подходит.
- Сертификат должен иметь имя CN, соответствующее DNS-имени веб-сервера или шлюза.
Формат файла потоковой передачи Smooth Streaming (PIFF) с H264/AAC имеет привязку к PlayReady (AES-128 CTR). ISMV-файл smooth streaming, предполагающий мультиплексирование звука в видео, сам по себе является FMP4 и может использоваться для воспроизведения. Если содержимое smooth streaming проходит через шифрование PlayReady, каждый ISMV-файл становится защищенным фрагментом MP4 PlayReady. Вы можете выбрать ISMV-файл с предпочтительной скоростью и переименовать его как .mp4 для скачивания.
Для поэтапной загрузки существует два варианта размещения MP4, защищенного с помощью PlayReady:
- Вы можете поместить MP4 в тот же ресурс службы контейнеров или мультимедиа и использовать конечную точку потоковой передачи Служб мультимедиа Azure для постепенного скачивания.
- URL-адрес SAS можно использовать для последовательного скачивания непосредственно из службы хранилища Azure.
Вы можете использовать два типа доставки лицензии PlayReady:
- Служба доставки лицензий PlayReady в Службах мультимедиа Azure
- серверы лицензирования PlayReady, размещенные в любом месте.
Чтобы получить лицензию PlayReady со службой доставки AMS, см. шаблон лицензии Службы мультимедиа версии 3 с PlayReady.
Для тестирования воспроизведения можно использовать универсальное Windows-приложение в Windows 10. В примерах приложений универсальной платформы Windows 10 есть пример простого проигрывателя, который называется Adaptive Streaming Sample. Добавьте код для выбора скачиваемого видео и используйте его в качестве источника вместо источника адаптивной потоковой передачи.