Содержание статьи:
Модуль nginx kaltura/nginx-vod-module позволяет «на лету» шифровать оригинальные mp4 файлы для DRM систем Fairplay, Playready и Widevine.
Подробнее о модуле kaltura/nginx-vod-module можно прочитать в репозитории на github: github.com/kaltura/nginx-vod-module.
Для работы с 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 *;
}
}
где
Обратите внимание. Для проигрывания файлов, зашифрованных DRM, использование протокола httpS обязательно.
Для получения плейлиста в формате MPEG-DASH используйте следующий запрос:
https://[domain]/drm/[contentId]/[file].mp4/manifest.mpd
где
Для получения плейлиста в формате hls используйте следующий запрос:
https://[domain]/drm/[contentId]/[file].mp4/master.m3u8
где
Модуль kaltura/nginx-vod-module кеширует в памяти мета-информацию из оригинальных mp4 файлов.
Это означает, что однажды прочитанная мета-информация из оригинального mp4 файла будет находится в памяти модуля до рестарта nginx.
В связи с этим: