В данной статье мы расскажем, как подготавливать (шифровать) видео для работы с multi-drm от drmnow! с помощью Shaka Packager.
Содержание статьи:
Используйте следующий 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"
ffprobe path/to/video.mp4
.
"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"
--protection_systems Widevine,PlayReady \
на
--protection_systems Widevine,PlayReady,Wiseplay \
./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 систем.
Используйте следующий 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.
Используйте следующий 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.