123 lines
2.5 KiB
Markdown
123 lines
2.5 KiB
Markdown
Based on https://github.com/nytimes/nginx-vod-module-docker
|
|
|
|
# Build
|
|
|
|
~~~
|
|
$ docker build . -t kaltura-nginx
|
|
~~~
|
|
|
|
# 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
|