encrypt video

Как подключить DRM? Документация по интеграции Multi-DRM – drmnow!

1. Начало работы

В состав нашего Multi-DRM решения входят следующие DRM-системы:

Мы рекомендуем использовать Shaka Packager — утилиту для запаковывания и шифрования аудио/видео-контента.

Если вы планируете подключить DRM-систему Wiseplay от Huawei, Вам понадобится специальная сборка Shaka Packager. Для ее получения напишите нам на электронную почту req@drmnow.ru.

Для начала работы Вам понадобятся [project] и [token].

Для их получения создайте Multi-DRM проект в личном кабинете cdnnow!

2. Подготовка видео

2.1. Общие сведения

Shaka packager поддерживает видео в различных форматах.

Для VOD мы рекомендуем использовать формат mp4.

Для Live есть возможность использовать два варианта:

Защищенное Multi-DRM видео можно запаковать в один из следующих форматов:

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

Информация о фрагментах записывается в плейлист, который передается плееру для воспроизведения.

Ниже приведены примеры работы Multi-DRM для разных DRM-систем.

Здесь и далее подразумевается использование ОС Linux.

2.2. Shaka Packager + Widevine, Playready, Wiseplay + DASH Manifest

Используйте следующий bash-скрипт для конвертации mp4 в DASH.

#!/usr/bin/env bash

# Проект из личного кабинета cdnnow!
project=""

# Ключ доступа из личного кабинета cdnnow!
token=""

# Идентификатор контента, уникальное для каждого вашего видео файла имя
contentId=""

# Путь до исходного видео файла
videoSource="path/to/video.mp4"

# Путь до директории с результатами
outputFolder="path/to/output/folder"

# Shaka Packager

./packager \
in="$videoSource,stream=0,init_segment=$outputFolder/v0_init.m4v,segment_template=$outputFolder/v0_\$Number\$.m4v" \
in="$videoSource,stream=1,init_segment=$outputFolder/a0_init.m4a,segment_template=$outputFolder/a0_\$Number\$.m4a" \
--generate_static_live_mpd \
--segment_duration 6 \
--fragment_duration 6 \
--default_language ru \
--mpd_output "$outputFolder/index.mpd" \
--enable_widevine_encryption \
--protection_systems Widevine,PlayReady \
--key_server_url "https://$project.nowdrm.co/v2/keyservice/contentkey/get?token=$token" \
--content_id "$contentId"

Советы

Утилита (вывод только секций [pssh]):

...
[pssh] size=12+76
  system_id = [ed ef 8b a9 79 d6 4a ce a3 c8 27 dc d5 1d 21 ed]
  data_size = 56
[pssh] size=12+538
  system_id = [9a 04 f0 79 98 40 42 86 ab 92 e6 5b e0 88 5f 95]
  data_size = 518
[pssh] size=12+235
  system_id = [3d 5e 6d 35 9b 9a 41 e8 b8 43 dd 3c 6e 72 c4 2c]
  data_size = 215

Присутствуют идентификаторы всех трех DRM-систем, то есть запаковка прошла успешно.

Список идентификаторов DRM систем.

2.3. Shaka Packager + Fairplay + HLS playlist

Используйте следующий bash-скрипт для конвертации mp4 в HLS.

#!/usr/bin/env bash

# Проект из личного кабинета cdnnow!
project=""

# Ключ доступа из личного кабинета cdnnow!
token=""

# Идентификатор контента, уникальное для каждого вашего видео файла имя
contentId=""

# Идентификатор ключа шифрования, base64
keyIdBase64=""

# Ключ шифрования, base64
keyBase64=""

# Начальный вектор ключа шифрования, base64
ivBase64=""

# Путь до исходного видео файла
videoSource="path/to/video.mp4"

# Путь до директории с результатами
outputFolder="path/to/output/folder"

# Shaka Packager

./packager \
in="$videoSource,stream=0,init_segment=$outputFolder/v0_init.m4v,segment_template=$outputFolder/v0_\$Number\$.m4v" \
in="$videoSource,stream=1,init_segment=$outputFolder/v1_init.m4v,segment_template=$outputFolder/v1_\$Number\$.m4v" \
in="$videoSource,stream=2,init_segment=$outputFolder/v2_init.m4v,segment_template=$outputFolder/v2_\$Number\$.m4v" \
in="$videoSource,stream=3,init_segment=$outputFolder/v3_init.m4v,segment_template=$outputFolder/v3_\$Number\$.m4v" \
in="$videoSource,stream=4,init_segment=$outputFolder/v4_init.m4v,segment_template=$outputFolder/v4_\$Number\$.m4v" \
in="$videoSource,stream=5,language=ru,init_segment=$outputFolder/a5_init.m4a,segment_template=$outputFolder/a5_\$Number\$.m4a" \
--segment_duration 6 \
--fragment_duration 6 \
--default_language ru \
--hls_master_playlist_output "$outputFolder/master.m3u8" \
--hls_playlist_type VOD \
--protection_scheme cbcs \
--enable_raw_key_encryption \
--protection_systems FairPlay \
--keys label=:key_id=$keyIdBase64:key=$keyBase64 \
--iv $ivBase64 \
--hls_key_uri skd://$contentId

Советы

Для получения значений переменных keyIdBase64, keyBase64, ivBase64 по contentId и keyId можно использовать SPEKE API V1 по адресу https://[project].nowdrm.co/v2/keyservice/speke/v1.0/copyProtection?token=[token].

Подробнее о формате запроса можно прочитать на официальном сайте — https://docs.aws.amazon.com/speke/latest/documentation/standard-payload-components.html.

2.4. Shaka Packager + Playready + MSS playlist

Используйте следующий bash-скрипт для конвертации mp4 в MSS.

#!/usr/bin/env bash

# Проект из личного кабинета cdnnow!
project=""

# Ключ доступа из личного кабинета cdnnow!
token=""

# Идентификатор контента, уникальное для каждого вашего видео файла имя
contentId=""

# Путь до исходного видео файла
videoSource="path/to/video.mp4"

# Путь до директории с результатами
outputFolder="path/to/output/folder"

# Shaka Packager With MSS support

./packager-mss \
in="$videoSource,stream=0,init_segment=$outputFolder/v0_init.m4v,segment_template=$outputFolder/v0_\$Number\$.m4v" \
in="$videoSource,stream=1,init_segment=$outputFolder/v1_init.m4v,segment_template=$outputFolder/v1_\$Number\$.m4v" \
in="$videoSource,stream=2,init_segment=$outputFolder/v2_init.m4v,segment_template=$outputFolder/v2_\$Number\$.m4v" \
in="$videoSource,stream=3,init_segment=$outputFolder/v3_init.m4v,segment_template=$outputFolder/v3_\$Number\$.m4v" \
in="$videoSource,stream=4,init_segment=$outputFolder/v4_init.m4v,segment_template=$outputFolder/v4_\$Number\$.m4v" \
in="$videoSource,stream=5,language=ru,init_segment=$outputFolder/a5_init.m4a,segment_template=$outputFolder/a5_\$Number\$.m4a" \
--segment_duration 6 \
--fragment_duration 6 \
--dvr_window_length 36 \
--default_language ru \
--duration 0 \
--segment_sap_aligned \
--fragment_sap_aligned \
--mss_client_manifest_output $outputFolder/manifest.ismc \
--enable_widevine_encryption \
--clear_lead 0 \
--protection_systems PlayReady \
--key_server_url "https://$project.nowdrm.co/v2/keyservice/contentkey/get?token=$token" \
--content_id "$contentId" \
--license_acquisition_server_url https://[project].nowdrm.co/v2/playready \
  • Вам понадобится специальная сборка Shaka Packager с поддержкой MSS. Для ее получения напишите нам на электронную почту req@drmnow.ru.
  • 3. Воспроизведение зашифрованного DRM видео

    3.1. Системные требования

    Минимальные системные требования для настольных устройств:

    Минимальные системные требования для мобильных устройств:

    3.2. Адреса серверов лицензий

    Widevine: https://[project].nowdrm.co/v2/widevine

    Fairplay: https://[project].nowdrm.co/v2/fairplay

    Wiseplay: https://[project].nowdrm.co/v2/wiseplay

    Playready: https://[project].nowdrm.co/v2/playready

    3.3. Тестирование воспроизведения

    Для тестирования можно воспользоваться нашим плеером по адресу https://playernow.ru.
    Перед проигрыванием убедитесь, что ваша операционная система и браузер поддерживают соответствующий тип DRM (список совместимых с вашим браузером и ОС DRM-систем отображается на странице плеера в конце страницы).

    3.3.1. Widevine + Desktop

    1. В браузере откройте https://playernow.ru.
    2. Нажмите «Выберите источник», в появившемся меню выберите пункт «Конструктор».
    3. В поле “Widevine License” вставьте адрес сервера лицензий Widevine (например https://[project].nowdrm.co/widevine)
    4. В поле “DASH” вставьте URL к mpd-файлу с запакованным видео (например https://myhost.tld/some/folder/index.mpd). HTTPS-доступ к файлу обязателен.
    5. Нажмите «Запустить тестирование», после чего в окне плеера нажмите кнопку воспроизведения.
      Несколько секунд в начале видео не кодируется DRM. Если видео было запаковано правильно, оно доиграет до конца без искажений.

    В мобильных браузерах тестирование может быть проведено аналогично.

    3.3.2. Playready + Desktop

    1. В браузере откройте https://playernow.ru.
    2. Нажмите «Выберите источник», в появившемся меню выберите пункт «Конструктор».
    3. В поле “Playready License” вставьте адрес сервера лицензий Playready (например https://[project].nowdrm.co/playready)
    4. В поле “DASH” вставьте URL к mpd-файлу с запакованным видео (например https://myhost.tld/some/folder/index.mpd). HTTPS-доступ к файлу обязателен.
    5. Нажмите «Запустить тестирование», после чего в окне плеера нажмите кнопку воспроизведения.
      Несколько секунд в начале видео не кодируется DRM. Если видео было запаковано правильно, оно доиграет до конца без искажений.

    3.3.3. Fairplay + Desktop

    1. В браузере откройте https://playernow.ru/.
    2. Нажмите «Выберите источник», в появившемся меню выберите пункт «Конструктор».
    3. В поле “Fairplay License” вставьте адрес сервера лицензий Fairplay (например https://[project].nowdrm.co/fairplay)
    4. В поле “HLS” вставьте URL к m3u8-файлу с запакованным видео (например https://myhost.tld/some/folder/master.m3u8). HTTPS-доступ к файлу обязателен.
    5. В поле "Сертификат" вставьте URL к *.der-сертификату, необходимому для запроса к серверу лицензий. HTTPS-доступ к файлу обязателен.
      Для тестирования Вы можете воспользоваться нашим сертификатом https://playernow.ru/cdnnow.der.
    6. Нажмите «Запустить тестирование», после чего в окне плеера нажмите кнопку воспроизведения.
      Несколько секунд в начале видео не кодируется DRM. Если видео было запаковано правильно, оно доиграет до конца без искажений.

    3.3.4. Wiseplay + Mobile

    Вам понадобится скомпилировать и запустить на устройстве Huawei модифицированный Exoplayer https://github.com/HMS-Core/hms-wiseplay-demo-exoplayer.
    При этом в файле “demos/main/src/main/assets/media.exolist.json” необходимо добавить следующий блок информации в секцию “samples”:

    {
        "name": "test",
        "uri": "https://myhost.tld/somevideo.mpd",
        "drm_scheme": "wiseplay",
        "drm_license_url": "https://[project].nowdrm.co/wiseplay"
    },

    Несколько секунд в начале видео не кодируется DRM. Если видео было запаковано правильно, оно доиграет до конца без искажений.

    4. Благодарности

    Спасибо что дочитали нашу краткую инструкцию по интеграции Multi-DRM!

    Если у Вас остались вопросы смело обращайтесь к нам. Мы обязательно поможем.

    Спасибо!

    Оставьте заявку

    если вас заинтересовал наш сервис или есть вопросы

    Напишите нам