encrypt video

Интеграция drmnow! с kaltura/nginx-vod-module

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

О модуле

Модуль nginx kaltura/nginx-vod-module позволяет «на лету» шифровать оригинальные mp4 файлы для DRM систем Fairplay, Playready и Widevine.

Подробнее о модуле kaltura/nginx-vod-module можно прочитать в репозитории на github: github.com/kaltura/nginx-vod-module.

Конфигурация nginx

Для работы с Fairplay, Playready и Widevine мы рекомендуем использовать следующий шаблон конфигурации nginx:

server {

  listen 443 ssl http2;

  ...

  root [path];

  vod_max_upstream_headers_size 640k;
  vod_max_mapping_response_size 640k;

  location ~* ^/drmnow-keyserver/(.*)$ {
    internal;
    proxy_pass https://[project].nowdrm.co/$1?token=[token];
    proxy_set_header Host [project].nowdrm.co;
    proxy_ssl_name [project].nowdrm.co;
  }

  location ~ ^/drm/([^/]+)/(.*)\.(mp4|m4s|m4v|m4a|mpd)$ {
    vod dash;

    vod_dash_manifest_format segmenttemplate;

    vod_drm_enabled on;
    vod_drm_upstream_location /drmnow-keyserver/;
    vod_drm_request_uri "drm/keyservice/getpsshbox/$1/WIDEVINE,PLAYREADY";
    vod_drm_clear_lead_segment_count 0;
    vod_drm_single_key off;

    vod_segment_duration 3000;
    vod_align_segments_to_key_frames on;

    add_header Last-Modified "Sun, 19 Nov 2000 08:52:00 GMT";
    add_header Access-Control-Allow-Headers "origin,range,accept-encoding,referer";
    add_header Access-Control-Expose-Headers "Server,range,Content-Length,Content-Range";
    add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS";
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Credentials "true";
  }

  location ~ ^/drm/([^/]+)/(.*)\.(m3u8|ts)$ {
    vod hls;

    vod_hls_encryption_method sample-aes;
    vod_hls_encryption_key_uri "skd://$1";
    vod_hls_encryption_key_format "com.apple.streamingkeydelivery";
    vod_hls_encryption_key_format_versions "1";

    vod_drm_enabled on;
    vod_drm_upstream_location /drmnow-keyserver/;
    vod_drm_request_uri "drm/keyservice/getpsshbox/$1/FAIRPLAY";
    vod_drm_clear_lead_segment_count 0;

    vod_segment_duration 3000;
    vod_last_modified_types *;

    add_header Access-Control-Allow-Headers *;
    add_header Access-Control-Expose-Headers "Server,range,Content-Length,Content-Range";
    add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS";
    add_header Access-Control-Allow-Origin *;
  }

  location ~ ^/drm/mss/([^/]+)/(.*) {

    set $content_id $1;
    rewrite ^/drm/mss/([^/]+)/(.*).ism/(.*)$ /drm/mss/$1/$2/$3;
    rewrite ^/drm/mss/([^/]+)/(.*)/Manifest$ /drm/mss/$1/$2/manifest break;

    vod mss;

    vod_drm_enabled on;
    vod_drm_upstream_location /drmnow-keyserver/;
    vod_drm_request_uri "drm/keyservice/getpsshbox/$content_id/PLAYREADY";
    vod_drm_clear_lead_segment_count 0;

    vod_segment_duration 3000;
    vod_manifest_segment_durations_mode accurate;
    vod_last_modified_types *;

    add_header Access-Control-Allow-Headers *;
    add_header Access-Control-Expose-Headers "Server,range,Content-Length,Content-Range";
    add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS";
    add_header Access-Control-Allow-Origin *;
  }
}

где

  • [project] — проект drmnow!
  • [token] — токен от проекта drmnow!
  • [root] — путь до оригинальных mp4 файлов.

Пример использования

Обратите внимание. Для проигрывания файлов, зашифрованных DRM, использование протокола httpS обязательно.

MPEG-DASH

Для получения плейлиста в формате MPEG-DASH используйте следующий запрос:

https://[domain]/drm/[contentId]/[file].mp4/manifest.mpd

где

  • [domain] — домен, на котором вы разместили и настроили вышеуказанный конфигурационный файл nginx
  • [contentId] — идентификатор контента, может быть любой строкой
  • [file] — имя оригинального файла.

HLS

Для получения плейлиста в формате hls используйте следующий запрос:

https://[domain]/drm/[contentId]/[file].mp4/master.m3u8

где

  • [domain] — домен, на котором вы разместили и настроили вышеуказанный конфигурационный файл nginx
  • [contentId] — идентификатор контента, может быть любой строкой
  • [file] — имя оригинального файла.

Полезная информация

Модуль kaltura/nginx-vod-module кеширует в памяти мета-информацию из оригинальных mp4 файлов.

Это означает, что однажды прочитанная мета-информация из оригинального mp4 файла будет находится в памяти модуля до рестарта nginx.

В связи с этим:

  • Если после запроса с помощью модуля к файлу, вы захотите загрузить на его место другой файл с тем же именем, то после окончания загрузки необходимо будет перезапустить nginx (systemctl restart nginx).
  • Не стоит обращаться с помощью модуля к частично загруженному оригинальному файлу во время его загрузки. Модуль сохранит в памяти не корректную мета-информацию.

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

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

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

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

Напишите нам