From e83e6c1e26431e8c7ba8d5bb0304632709466c5e Mon Sep 17 00:00:00 2001 From: Luca Rullo Date: Mon, 5 Jun 2023 13:38:23 +0200 Subject: [PATCH] Add: Basic Docker based on Kaltura HLS Nginx Module --- README.md | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..d0aa50e --- /dev/null +++ b/README.md @@ -0,0 +1,116 @@ +Based on https://github.com/nytimes/nginx-vod-module-docker + +# Basic config + +Included nginx.conf: + +~~~ +worker_processes auto; +pid /run/nginx.pid; + +events { + use epoll; +} + +http { + log_format main '$remote_addr $remote_user [$time_local] "$request" ' + '$status "$http_referer" "$http_user_agent"'; + + access_log /dev/stdout main; + error_log stderr debug; + + default_type application/octet-stream; + include /usr/local/nginx/conf/mime.types; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + + vod_mode local; + vod_metadata_cache metadata_cache 16m; + vod_response_cache response_cache 512m; + vod_last_modified_types *; + vod_segment_duration 9000; + vod_align_segments_to_key_frames on; + vod_dash_fragment_file_name_prefix "segment"; + vod_hls_segment_file_name_prefix "segment"; + + vod_manifest_segment_durations_mode accurate; + + open_file_cache max=1000 inactive=5m; + open_file_cache_valid 2m; + open_file_cache_min_uses 1; + open_file_cache_errors on; + + aio on; + + server { + listen 80; + server_name localhost; + root /var/www/html; + + location ~ ^/videos/.+$ { + autoindex on; + } + + location /hls/ { + vod hls; + alias /var/www/html/videos/; + + if ($arg_token) { + set $input_token $arg_token; + } + + add_header Access-Control-Allow-Headers '*'; + add_header Access-Control-Allow-Origin '*'; + add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS'; + + #secure_token $secure_token; + #secure_token_types application/vnd.apple.mpegurl; + #secure_token_expires_time 100d; + #secure_token_query_token_expires_time 1h; + } + + location /thumb/ { + vod thumb; + alias /var/www/html/videos/; + add_header Access-Control-Allow-Headers '*'; + add_header Access-Control-Allow-Origin '*'; + add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS'; + } + } +} +~~~ + +# Use + +Create videos directory, map to docker-compose and copy a video.mp4 file: + +~~~ +$ mkdir videos +$ vim docker-compose.yml +... + volumes: + - ./videos:/var/www/html/videos:ro + ... +~~~ + +# Example + +Get thumbnail second 300: + +~~~ +$ http://localhost:8001/thumb/video.mp4/thumb-300.jpg +~~~ + +Play HLS: + +~~~ +$ mpv http://localhost:8001/hls/video.mp4,.urlset/master.m3u8 +~~~ + +# References + +https://en.acodeof.com/video-on-demand-nginx-vod-module/ +https://github.com/kaltura/nginx-vod-module +https://docs.jwplayer.com/platform/reference/studio-drm-standalone-nginx-vod-module