From 8d86aad759de3561beaeeb9e6fb78b9eb6232b1a Mon Sep 17 00:00:00 2001 From: Yuri van Midden Date: Sat, 31 Oct 2020 14:08:28 +0000 Subject: [PATCH] Init streaming config --- docker-compose.yml | 39 +++++++++++++++++++ nginx.conf | 97 ++++++++++++++++++++++++++++++++++++++++++++++ nginx.conf.copy | 97 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 233 insertions(+) create mode 100644 docker-compose.yml create mode 100644 nginx.conf create mode 100644 nginx.conf.copy diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..6f22b28 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +version: "3.5" +services: + nginx-streamer: + image: alfg/nginx-rtmp + restart: unless-stopped + ports: + - 1935:1935 + - 8080:80 + - 8443:443 + environment: + - HTTP_PORT=80 + - RTMP_PORT=1935 + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf.template + - /data/teampresentaties_recording:/data + + htc_page: + build: ./harambee-tv + restart: unless-stopped + container_name: htc_page + volumes: + - ./harambee-tv/site:/usr/local/apache2/htdocs + ports: + - 80:80 + +# proxy: +# image: jwilder/nginx-proxy:alpine +# container_name: pre-u-db-proxy +# volumes: +# - /var/run/docker.sock:/tmp/docker.sock:ro +# - ./dev/certs:/etc/nginx/certs +# - ./docker/nginx/vhost.d:/etc/nginx/vhost.d +# environment: +# - TZ=Europe/Amsterdam +# - DEFAULT_HOST=harambee-woest.student.utwente.nl +# - SSL_POLICY=Mozilla-Modern +# ports: +# - "80:80" +# - "443:443" diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..ba9f7b5 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,97 @@ +daemon off; + +error_log /dev/stdout info; + +events { + worker_connections 1024; +} + +rtmp { + server { + listen 1935; + chunk_size 4000; + + application stream { + live on; + + exec ffmpeg -i rtmp://localhost:1935/stream/$name + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 10000k -f flv -g 60 -r 60 -s 1920x1080 -preset fast -profile:v baseline rtmp://localhost:1935/hls/$name_1080p60_10128kbs + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 8000k -f flv -g 30 -r 30 -s 1920x1080 -preset fast -profile:v baseline rtmp://localhost:1935/hls/$name_1080p8128kbs + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 4000k -f flv -g 30 -r 30 -s 1280x720 -preset veryfast -profile:v baseline rtmp://localhost:1935/hls/$name_720p4128kbs + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 8000k -f flv -g 60 -r 60 -s 1280x720 -preset veryfast -profile:v baseline rtmp://localhost:1935/hls/$name_720p60_4128kbs + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 1000k -f flv -g 30 -r 30 -s 854x480 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_480p1128kbs + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 750k -f flv -g 30 -r 30 -s 640x360 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_360p878kbs; + } + + application hls { + live on; + hls on; + hls_fragment_naming system; + hls_fragment 5; + hls_playlist_length 10; + hls_path /opt/data/hls; + hls_nested on; + + hls_variant _1080p60_10128kbs BANDWIDTH=10128000,RESOLUTION=1920x1080; + hls_variant _1080p8128kbs BANDWIDTH=8128000,RESOLUTION=1920x1080; + hls_variant _720p4128kbs BANDWIDTH=4128000,RESOLUTION=1280x720; + hls_variant _720p60_4128kbs BANDWIDTH=8128000,RESOLUTION=1280x720; + hls_variant _480p1128kbs BANDWIDTH=1128000,RESOLUTION=854x480; + hls_variant _360p878kbs BANDWIDTH=878000,RESOLUTION=640x360; + } + } +} + +http { + access_log /dev/stdout combined; + + ssl_ciphers HIGH:!aNULL:!MD5; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 10m; + + server { + listen 80; + + # Uncomment these lines to enable SSL. + # Update the ssl paths with your own certificate and private key. + # listen 443 ssl; + # ssl_certificate /opt/certs/example.com.crt; + # ssl_certificate_key /opt/certs/example.com.key; + + location /hls { + types { + application/vnd.apple.mpegurl m3u8; + video/mp2t ts; + } + root /opt/data; + add_header Cache-Control no-cache; + add_header Access-Control-Allow-Origin *; + } + + location /live { + alias /opt/data/hls; + types { + application/vnd.apple.mpegurl m3u8; + video/mp2t ts; + } + add_header Cache-Control no-cache; + add_header Access-Control-Allow-Origin *; + } + + location /stat { + rtmp_stat all; + rtmp_stat_stylesheet static/stat.xsl; + } + + location /static { + alias /www/static; + } + + location = /crossdomain.xml { + root /www/static; + default_type text/xml; + expires 24h; + } + } +} diff --git a/nginx.conf.copy b/nginx.conf.copy new file mode 100644 index 0000000..044d9f8 --- /dev/null +++ b/nginx.conf.copy @@ -0,0 +1,97 @@ +daemon off; + +error_log /dev/stdout info; + +events { + worker_connections 1024; +} + +rtmp { + server { + listen 1935; + chunk_size 4000; + + application stream { + live on; + + exec ffmpeg -i rtmp://localhost:1935/stream/$name + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 8000k -f flv -g 30 -r 30 -s 1920x1080 -preset fast -profile:v baseline rtmp://localhost:1935/hls/$name_1080p8128kbs + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 2500k -f flv -g 30 -r 30 -s 1280x720 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_720p2628kbs + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 1000k -f flv -g 30 -r 30 -s 854x480 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_480p1128kbs + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 750k -f flv -g 30 -r 30 -s 640x360 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_360p878kbs + -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 400k -f flv -g 30 -r 30 -s 426x240 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_240p528kbs + -c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 200k -f flv -g 15 -r 15 -s 426x240 -preset superfast -profile:v baseline rtmp://localhost:1935/hls/$name_240p264kbs; + } + + application hls { + live on; + hls on; + hls_fragment_naming system; + hls_fragment 5; + hls_playlist_length 10; + hls_path /opt/data/hls; + hls_nested on; + + hls_variant _1080p8128kbs BANDWIDTH=8128000,RESOLUTION=1920x1080; + hls_variant _720p2628kbs BANDWIDTH=2628000,RESOLUTION=1280x720; + hls_variant _480p1128kbs BANDWIDTH=1128000,RESOLUTION=854x480; + hls_variant _360p878kbs BANDWIDTH=878000,RESOLUTION=640x360; + hls_variant _240p528kbs BANDWIDTH=528000,RESOLUTION=426x240; + hls_variant _240p264kbs BANDWIDTH=264000,RESOLUTION=426x240; + } + } +} + +http { + access_log /dev/stdout combined; + + ssl_ciphers HIGH:!aNULL:!MD5; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 10m; + + server { + listen 80; + + # Uncomment these lines to enable SSL. + # Update the ssl paths with your own certificate and private key. + # listen 443 ssl; + # ssl_certificate /opt/certs/example.com.crt; + # ssl_certificate_key /opt/certs/example.com.key; + + location /hls { + types { + application/vnd.apple.mpegurl m3u8; + video/mp2t ts; + } + root /opt/data; + add_header Cache-Control no-cache; + add_header Access-Control-Allow-Origin *; + } + + location /live { + alias /opt/data/hls; + types { + application/vnd.apple.mpegurl m3u8; + video/mp2t ts; + } + add_header Cache-Control no-cache; + add_header Access-Control-Allow-Origin *; + } + + location /stat { + rtmp_stat all; + rtmp_stat_stylesheet static/stat.xsl; + } + + location /static { + alias /www/static; + } + + location = /crossdomain.xml { + root /www/static; + default_type text/xml; + expires 24h; + } + } +}