encrypt video

Интеграция drmnow! и Shaka Packager

В данной статье мы расскажем, как подготавливать (шифровать) видео для работы с multi-drm от drmnow! с помощью Shaka Packager.

Содержание статьи:

Shaka Packager + Widevine, Playready, Wiseplay + DASH Manifest

Используйте следующий bash-скрипт для конвертации mp4 в MPEG-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"

Советы

  • Строки, начинающиеся с “in”, соответствуют дорожкам аудио и видео в исходном mp4 файле.
    Для получения информации о дорожках используйте утилиту ffprobe, запустив команду ffprobe path/to/video.mp4.
  • Для того, чтобы используемый вами плеер правильно показывал язык дорожки в списке доступных дорожек, добавьте в строку, начинающуюся с "in" параметр "language=<LANG>", где <LANG> — двухсимвольное обозначение языка по ISO 639-1. Наиболее часто используемые: ru (русский), en (английский), de (немецкий), fr (французский), zh (китайский). Пример: in="$videoSource,stream=5,language=ru,init_segment=$outputFolder/a5_init.m4a,segment_template=$outputFolder/a5_\$Number\$.m4a"
  • Для совместимости с Wiseplay Вам понадобится специальная сборка Shaka Packager. Для ее получения напишите нам на электронную почту req@drmnow.ru.
    При этом необходимо заменить строку:
    --protection_systems Widevine,PlayReady \
    на
    --protection_systems Widevine,PlayReady,Wiseplay \
  • Вы можете использовать утилиту mp4dump для проверки правильности запаковки с помощью Shaka packager, а также при создании собственного запаковщика. Для этого нужно проверять первый чанк — в нем должна содержаться информация об используемых DRM-системах, а именно в mp4-атомах [pssh]. Эти атомы добавляются по числу используемых DRM-систем, их значением является полный заголовок pssh (pssh box). Помимо этого в mp4-атоме [tenc] содержится краткая информация о ключе шифрования: default_KID (key id, который будет использоваться по умолчанию для данной дорожки), default_Per_Sample_IV_Size (обычно 16), default_isProtected (1).
    Пример работы mp4dump для первого чанка видео, запакованного по скрипту выше: ./mp4dump path/to/output/folder/v0_init.mp4 (вывод только атомов [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-систем, то есть запаковка прошла успешно.

Обратите внимание — в ответе /v2/keyservice/contentkey/get отдается только тело pssh, которое Shaka packager сам приводит к виду pssh box. При реализации собственного запаковщика Вам нужно будет самостоятельно реализовать приведение к нужному виду, если вы планируете использовать совместимость с данным методом. Если вы хотите получать уже готовый pssh box, используйте SPEKE API (см. ниже).

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

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/drm/speke?token=[token].

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

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.

Читайте также

Воспроизведение зашифрованного DRM видео.

↑ Наверх
Оставьте заявку

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

Напишите нам