From 8ac58973be49138435fe097a751a0799c0365071 Mon Sep 17 00:00:00 2001 From: STAM Date: Tue, 4 Aug 2020 16:02:37 +0300 Subject: [PATCH 1/3] nginx updates --- .travis.yml | 6 + CHANGELOG.md | 3 + balancer/rtmp-hls/Dockerfile | 41 ++++++ balancer/rtmp-hls/LICENSE | 21 +++ balancer/rtmp-hls/Makefile | 5 + balancer/rtmp-hls/README.md | 99 +++++++++++++ balancer/rtmp-hls/conf/nginx.conf | 133 ++++++++++++++++++ balancer/rtmp-hls/conf/nginx_no-ffmpeg.conf | 117 +++++++++++++++ .../conf/nginx_rtmp_minimal_no-stats.conf | 16 +++ balancer/rtmp-hls/players/dash.html | 23 +++ balancer/rtmp-hls/players/hls.html | 23 +++ balancer/rtmp-hls/players/hls_hlsjs.html | 41 ++++++ balancer/rtmp-hls/players/rtmp.html | 24 ++++ balancer/rtmp-hls/players/rtmp_hls.html | 30 ++++ 14 files changed, 582 insertions(+) create mode 100644 balancer/rtmp-hls/Dockerfile create mode 100644 balancer/rtmp-hls/LICENSE create mode 100644 balancer/rtmp-hls/Makefile create mode 100644 balancer/rtmp-hls/README.md create mode 100644 balancer/rtmp-hls/conf/nginx.conf create mode 100644 balancer/rtmp-hls/conf/nginx_no-ffmpeg.conf create mode 100644 balancer/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf create mode 100644 balancer/rtmp-hls/players/dash.html create mode 100644 balancer/rtmp-hls/players/hls.html create mode 100644 balancer/rtmp-hls/players/hls_hlsjs.html create mode 100644 balancer/rtmp-hls/players/rtmp.html create mode 100644 balancer/rtmp-hls/players/rtmp_hls.html diff --git a/.travis.yml b/.travis.yml index 07e22bcce..da354df0d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -168,6 +168,12 @@ matrix: - docker build --compress -t epicmorg/balancer:php balancer/php - docker push epicmorg/balancer:php + - name: NGinx + RTMP-HLS + script: + - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + - docker build --compress -t epicmorg/balancer:rtmp-hls balancer/rtmp-hls + - docker push epicmorg/balancer:rtmp-hls + - name: Apache (latest) script: diff --git a/CHANGELOG.md b/CHANGELOG.md index adedd99a8..7bca619a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ ## Changelog +* `August` + * added `testrail` based on `websites:php7.2` image. always `latest` version + * added `balancer:rtmp-hls` image, based on `balancer:latest` and [TareqAlqutami/rtmp-hls-server](https://github.com/TareqAlqutami/rtmp-hls-server) configs. `TareqAlqutami`, thank you for it. * `May-july 2020` * Upgraded `TeamCity Agnet` * upgraded `nginx` diff --git a/balancer/rtmp-hls/Dockerfile b/balancer/rtmp-hls/Dockerfile new file mode 100644 index 000000000..57fb6f0c6 --- /dev/null +++ b/balancer/rtmp-hls/Dockerfile @@ -0,0 +1,41 @@ +##### Building the final image ##### +FROM epicmorg/balancer + +ARG NGINX_RTMP_MODULE_VERSION=1.2.1 + +# Install dependencies +RUN apt-get update && \ + apt-get install -y \ + tree ca-certificates openssl libpcre3-dev \ + librtmp1 libtheora0 libvorbis-dev libmp3lame0 \ + libx264-dev libx265-dev && \ + wget http://ftp.br.debian.org/debian/pool/main/libv/libvpx/libvpx4_1.6.1-3+deb9u2_amd64.deb && \ + dpkg -i libvpx4_1.6.1-3+deb9u2_amd64.deb && \ + rm -rfv libvpx4_1.6.1-3+deb9u2_amd64.de && \ + rm -rfv /var/lib/apt/lists/* + +RUN mkdir -p /usr/share/nginx/html /mnt/hls /mnt/dash /tmp/build && \ + cd /tmp/build && \ + wget https://github.com/arut/nginx-rtmp-module/archive/v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \ + tar -zxf v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \ + rm v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \ + cp /tmp/build/nginx-rtmp-module-${NGINX_RTMP_MODULE_VERSION}/stat.xsl /usr/share/nginx/html/stat.xsl && \ + rm -rf /tmp/build + + +# Forward logs to Docker +RUN ln -sf /dev/stdout /var/log/nginx/access.log && \ + ln -sf /dev/stderr /var/log/nginx/error.log + +# Copy nginx config file to container +RUN rm -rfv /etc/nginx/nginx.conf +COPY conf/nginx.conf /etc/nginx/nginx.conf + +# Copy html players to container +COPY players /usr/share/nginx/html/players + + +EXPOSE 1935 +EXPOSE 8080 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/balancer/rtmp-hls/LICENSE b/balancer/rtmp-hls/LICENSE new file mode 100644 index 000000000..ad8434abc --- /dev/null +++ b/balancer/rtmp-hls/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Tareq Alqutami + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/balancer/rtmp-hls/Makefile b/balancer/rtmp-hls/Makefile new file mode 100644 index 000000000..70287cf76 --- /dev/null +++ b/balancer/rtmp-hls/Makefile @@ -0,0 +1,5 @@ +all: nginx + +nginx: + docker build --compress -t epicmorg/balancer:rtmp-hls . + docker push epicmorg/balancer:rtmp-hls \ No newline at end of file diff --git a/balancer/rtmp-hls/README.md b/balancer/rtmp-hls/README.md new file mode 100644 index 000000000..228bbe4be --- /dev/null +++ b/balancer/rtmp-hls/README.md @@ -0,0 +1,99 @@ +# RTMP-HLS Docker + +** BASED ON https://github.com/TareqAlqutami/rtmp-hls-server ** + +**Docker image for video streaming server that supports RTMP, HLS, and DASH streams.** + +[![Docker Automated build](https://img.shields.io/docker/cloud/automated/alqutami/rtmp-hls.svg)](https://hub.docker.com/r/alqutami/rtmp-hls/builds/) +[![Build Status](https://img.shields.io/docker/cloud/build/alqutami/rtmp-hls.svg)](https://hub.docker.com/r/alqutami/rtmp-hls) + +## Description + +This Docker image can be used to create a video streaming server that supports [**RTMP**](https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol), [**HLS**](https://en.wikipedia.org/wiki/HTTP_Live_Streaming), [**DASH**](https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP) out of the box. +It also allows adaptive streaming and custom transcoding of video streams. +All modules are built from source on Debian and Alpine Linux base images. + +## Features + * The backend is [**Nginx**](http://nginx.org/en/) with [**nginx-rtmp-module**](https://github.com/arut/nginx-rtmp-module). + * [**FFmpeg**](https://www.ffmpeg.org/) for transcoding and adaptive streaming. + * Default settings: + * RTMP is ON + * HLS is ON (adaptive, 5 variants) + * DASH is ON + * Other Nginx configuration files are also provided to allow for RTMP-only streams or no-FFmpeg transcoding. + * Statistic page of RTMP streams at `http://:/stats`. + * Available web video players (based on [video.js](https://videojs.com/) and [hls.js](https://github.com/video-dev/hls.js/)) at `/usr/local/nginx/html/players`. + +Current Image is built using: + * Nginx 1.17.5 (compiled from source) + * Nginx-rtmp-module 1.2.1 (compiled from source) + * FFmpeg 4.2.1 (compiled from source) + +This image was inspired by similar docker images from [tiangolo](https://hub.docker.com/r/tiangolo/nginx-rtmp/) and [alfg](https://hub.docker.com/r/alfg/nginx-rtmp/). It has small build size, adds support for HTTP-based streams and adaptive streaming using FFmpeg. + +## Usage + +### To run the server +``` +docker run -d -p 1935:1935 -p 8080:8080 alqutami/rtmp-hls +``` + +For Alpine-based Image use: +``` +docker run -d -p 1935:1935 -p 8080:8080 alqutami/rtmp-hls:latest-alpine +``` + +To run with custom conf file: +``` +docker run -d -p 1935:1935 -p 8080:8080 -v custom.conf:/etc/nginx/nginx.conf alqutami/rtmp-hls +``` +where `custom.conf` is the new conf file for Nginx. + +### To stream to the server + * **Stream live RTMP content to:** + ``` + rtmp://:1935/live/ + ``` + where `` is any stream key you specify. + + * **Configure [OBS](https://obsproject.com/) to stream content:**
+Go to Settings > Stream, choose the following settings: + * Service: Custom Streaming Server. + * Server: `rtmp://:1935/live`. + * Stream key: anything you want, however provided video players assume stream key is `test` + +### To view the stream + * **Using [VLC](https://www.videolan.org/vlc/index.html):** + * Go to Media > Open Network Stream. + * Enter the streaming URL: `rtmp://:1935/live/` + Replace `` with the IP of where the server is running, and + `` with the stream key you used when setting up the stream. + * For HLS and DASH, the URLs are of the forms: + `http://:8080/hls/.m3u8` and + `http://:8080/dash/_src.mpd` respectively. + * Click Play. + +* **Using provided web players:**
+The provided demo players assume the stream-key is called `test` and the player is opened in localhost. + * To play RTMP content (requires Flash): `http://localhost:8080/players/rtmp.html` + * To play HLS content: `http://localhost:8080/players/hls.html` + * To play HLS content using hls.js library: `http://localhost:8080/players/hls_hlsjs.html` + * To play DASH content: `http://localhost:8080/players/dash.html` + * To play RTMP and HLS contents on the same page: `http://localhost:8080/players/rtmp_hls.html` + + **Notes:** + + * These web players are hardcoded to play stream key "test" at localhost. + * To change the stream source for these players. Download the html files and modify the `src` attribute in the video tag in the html file. You can then mount the modified files to the container as follows: + ``` + docker run -d -p 1935:1935 -p 8080:8080 -v custom_players:/usr/local/nginx/html/players alqutami/rtmp-hls + ``` + where `custom_players` is the directory holding the modified html files. + +## Copyright +Released under MIT license. + +## More info + * **GitHub repo**: + + * **Docker Hub image**: diff --git a/balancer/rtmp-hls/conf/nginx.conf b/balancer/rtmp-hls/conf/nginx.conf new file mode 100644 index 000000000..924887e51 --- /dev/null +++ b/balancer/rtmp-hls/conf/nginx.conf @@ -0,0 +1,133 @@ +load_module "/usr/lib/nginx/modules/ngx_rtmp_module.so"; + +worker_processes auto; +#error_log logs/error.log; + +events { + worker_connections 1024; +} + +# RTMP configuration +rtmp { + server { + listen 1935; # Listen on standard RTMP port + chunk_size 4000; + # ping 30s; + # notify_method get; + + # This application is to accept incoming stream + application live { + live on; # Allows live input + + # for each received stream, transcode for adaptive streaming + # This single ffmpeg command takes the input and transforms + # the source into 4 different streams with different bitrates + # and qualities. # these settings respect the aspect ratio. + exec_push /usr/bin/ffmpeg -i rtmp://localhost:1935/$app/$name -async 1 -vsync -1 + -c:v libx264 -c:a aac -b:v 256k -b:a 64k -vf "scale=480:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_low + -c:v libx264 -c:a aac -b:v 768k -b:a 128k -vf "scale=720:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_mid + -c:v libx264 -c:a aac -b:v 1024k -b:a 128k -vf "scale=960:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_high + -c:v libx264 -c:a aac -b:v 1920k -b:a 128k -vf "scale=1280:trunc(ow/a/2)*2" -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/show/$name_hd720 + -c copy -f flv rtmp://localhost:1935/show/$name_src; + } + + # This is the HLS application + application show { + live on; # Allows live input from above application + deny play all; # disable consuming the stream from nginx as rtmp + + hls on; # Enable HTTP Live Streaming + hls_fragment 3; + hls_playlist_length 20; + hls_path /mnt/hls/; # hls fragments path + # Instruct clients to adjust resolution according to bandwidth + hls_variant _src BANDWIDTH=4096000; # Source bitrate, source resolution + hls_variant _hd720 BANDWIDTH=2048000; # High bitrate, HD 720p resolution + hls_variant _high BANDWIDTH=1152000; # High bitrate, higher-than-SD resolution + hls_variant _mid BANDWIDTH=448000; # Medium bitrate, SD resolution + hls_variant _low BANDWIDTH=288000; # Low bitrate, sub-SD resolution + + # MPEG-DASH + dash on; + dash_path /mnt/dash/; # dash fragments path + dash_fragment 3; + dash_playlist_length 20; + } + } +} + + +http { + sendfile off; + tcp_nopush on; + directio 512; + # aio on; + + # HTTP server required to serve the player and HLS fragments + server { + listen 8080; + + # Serve HLS fragments + location /hls { + types { + application/vnd.apple.mpegurl m3u8; + video/mp2t ts; + } + + root /mnt; + + add_header Cache-Control no-cache; # Disable cache + + # CORS setup + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length'; + + # allow CORS preflight requests + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } + } + + # Serve DASH fragments + location /dash { + types { + application/dash+xml mpd; + video/mp4 mp4; + } + + root /mnt; + + add_header Cache-Control no-cache; # Disable cache + + + # CORS setup + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length'; + + # Allow CORS preflight requests + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } + } + + # This URL provides RTMP statistics in XML + location /stat { + rtmp_stat all; + rtmp_stat_stylesheet stat.xsl; # Use stat.xsl stylesheet + } + + location /stat.xsl { + # XML stylesheet to view RTMP stats. + root /usr/share/nginx/html; + } + + } +} \ No newline at end of file diff --git a/balancer/rtmp-hls/conf/nginx_no-ffmpeg.conf b/balancer/rtmp-hls/conf/nginx_no-ffmpeg.conf new file mode 100644 index 000000000..37dff15d7 --- /dev/null +++ b/balancer/rtmp-hls/conf/nginx_no-ffmpeg.conf @@ -0,0 +1,117 @@ +load_module "/usr/lib/nginx/modules/ngx_rtmp_module.so"; + +worker_processes auto; +#error_log logs/error.log; + +events { + worker_connections 1024; +} + +# RTMP configuration +rtmp { + server { + listen 1935; # Listen on standard RTMP port + chunk_size 4000; + # ping 30s; + # notify_method get; + + # This application is to accept incoming stream + application live { + live on; # Allows live input + push rtmp://localhost:1935/show; + } + + # This is the HLS application + application show { + live on; # Allows live input from above application + deny play all; # disable consuming the stream from nginx as rtmp + + hls on; # Enable HTTP Live Streaming + hls_fragment 3; + hls_playlist_length 10; + hls_path /mnt/hls/; # hls fragments path + + # MPEG-DASH + dash on; + dash_path /mnt/dash/; # dash fragments path + dash_fragment 3; + dash_playlist_length 10; + } + } +} + + +http { + sendfile off; + tcp_nopush on; + directio 512; + # aio on; + + # HTTP server required to serve the player and HLS fragments + server { + listen 8080; + + # Serve HLS fragments + location /hls { + types { + application/vnd.apple.mpegurl m3u8; + video/mp2t ts; + } + + root /mnt; + + add_header Cache-Control no-cache; # Disable cache + + # CORS setup + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length'; + + # allow CORS preflight requests + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } + } + + # Serve DASH fragments + location /dash { + types { + application/dash+xml mpd; + video/mp4 mp4; + } + + root /mnt; + + add_header Cache-Control no-cache; # Disable cache + + + # CORS setup + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length'; + + # Allow CORS preflight requests + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } + } + + # This URL provides RTMP statistics in XML + location /stat { + rtmp_stat all; + rtmp_stat_stylesheet stat.xsl; # Use stat.xsl stylesheet + } + + location /stat.xsl { + # XML stylesheet to view RTMP stats. + root /usr/share/nginx/html; + } + + } +} \ No newline at end of file diff --git a/balancer/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf b/balancer/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf new file mode 100644 index 000000000..780a1d1ff --- /dev/null +++ b/balancer/rtmp-hls/conf/nginx_rtmp_minimal_no-stats.conf @@ -0,0 +1,16 @@ +load_module "/usr/lib/nginx/modules/ngx_rtmp_module.so"; + +worker_processes auto; +rtmp_auto_push on; +events {} +rtmp { + server { + listen 1935; + listen [::]:1935; + + application live { + live on; + record off; + } + } +} \ No newline at end of file diff --git a/balancer/rtmp-hls/players/dash.html b/balancer/rtmp-hls/players/dash.html new file mode 100644 index 000000000..12b8df786 --- /dev/null +++ b/balancer/rtmp-hls/players/dash.html @@ -0,0 +1,23 @@ + + + + + DASH Live Streaming + + + + +

DASH Player

+ + + + + + + diff --git a/balancer/rtmp-hls/players/hls.html b/balancer/rtmp-hls/players/hls.html new file mode 100644 index 000000000..15d95b4c1 --- /dev/null +++ b/balancer/rtmp-hls/players/hls.html @@ -0,0 +1,23 @@ + + + + + HLS Live Streaming + + + + +

HLS Player

+ + + + + + + diff --git a/balancer/rtmp-hls/players/hls_hlsjs.html b/balancer/rtmp-hls/players/hls_hlsjs.html new file mode 100644 index 000000000..0237e7a52 --- /dev/null +++ b/balancer/rtmp-hls/players/hls_hlsjs.html @@ -0,0 +1,41 @@ + + + + + HLS streaming + + + + + + + + + + +

HLS Player (using hls.js)

+ +
+
+ +
+
+ + + + + + + diff --git a/balancer/rtmp-hls/players/rtmp.html b/balancer/rtmp-hls/players/rtmp.html new file mode 100644 index 000000000..d8ce85610 --- /dev/null +++ b/balancer/rtmp-hls/players/rtmp.html @@ -0,0 +1,24 @@ + + + + + RTMP Live Streaming + Live Streaming + + + + + + + +

RTMP Player

+ + + + + diff --git a/balancer/rtmp-hls/players/rtmp_hls.html b/balancer/rtmp-hls/players/rtmp_hls.html new file mode 100644 index 000000000..35617e913 --- /dev/null +++ b/balancer/rtmp-hls/players/rtmp_hls.html @@ -0,0 +1,30 @@ + + + + + Live Streaming + + + + + + + + +

RTMP Player

+ + +

HLS Player

+ + + + + From 092e7439f4e42c00a1fd12b463fdded9c2ff567f Mon Sep 17 00:00:00 2001 From: STAM Date: Tue, 4 Aug 2020 16:41:37 +0300 Subject: [PATCH 2/3] Update README.md --- balancer/rtmp-hls/README.md | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/balancer/rtmp-hls/README.md b/balancer/rtmp-hls/README.md index 228bbe4be..626ba9283 100644 --- a/balancer/rtmp-hls/README.md +++ b/balancer/rtmp-hls/README.md @@ -1,12 +1,9 @@ # RTMP-HLS Docker -** BASED ON https://github.com/TareqAlqutami/rtmp-hls-server ** +**BASED ON** [TareqAlqutami/rtmp-hls-server](https://github.com/TareqAlqutami/rtmp-hls-server) **Docker image for video streaming server that supports RTMP, HLS, and DASH streams.** -[![Docker Automated build](https://img.shields.io/docker/cloud/automated/alqutami/rtmp-hls.svg)](https://hub.docker.com/r/alqutami/rtmp-hls/builds/) -[![Build Status](https://img.shields.io/docker/cloud/build/alqutami/rtmp-hls.svg)](https://hub.docker.com/r/alqutami/rtmp-hls) - ## Description This Docker image can be used to create a video streaming server that supports [**RTMP**](https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol), [**HLS**](https://en.wikipedia.org/wiki/HTTP_Live_Streaming), [**DASH**](https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP) out of the box. @@ -24,28 +21,16 @@ All modules are built from source on Debian and Alpine Linux base images. * Statistic page of RTMP streams at `http://:/stats`. * Available web video players (based on [video.js](https://videojs.com/) and [hls.js](https://github.com/video-dev/hls.js/)) at `/usr/local/nginx/html/players`. -Current Image is built using: - * Nginx 1.17.5 (compiled from source) - * Nginx-rtmp-module 1.2.1 (compiled from source) - * FFmpeg 4.2.1 (compiled from source) - -This image was inspired by similar docker images from [tiangolo](https://hub.docker.com/r/tiangolo/nginx-rtmp/) and [alfg](https://hub.docker.com/r/alfg/nginx-rtmp/). It has small build size, adds support for HTTP-based streams and adaptive streaming using FFmpeg. - ## Usage ### To run the server ``` -docker run -d -p 1935:1935 -p 8080:8080 alqutami/rtmp-hls -``` - -For Alpine-based Image use: -``` -docker run -d -p 1935:1935 -p 8080:8080 alqutami/rtmp-hls:latest-alpine +docker run -d -p 1935:1935 -p 8080:8080 epicmorg/balancer:rtmp-hls ``` - + To run with custom conf file: ``` -docker run -d -p 1935:1935 -p 8080:8080 -v custom.conf:/etc/nginx/nginx.conf alqutami/rtmp-hls +docker run -d -p 1935:1935 -p 8080:8080 -v custom.conf:/etc/nginx/nginx.conf epicmorg/balancer:rtmp-hls ``` where `custom.conf` is the new conf file for Nginx. @@ -86,14 +71,8 @@ The provided demo players assume the stream-key is called `test` and the player * These web players are hardcoded to play stream key "test" at localhost. * To change the stream source for these players. Download the html files and modify the `src` attribute in the video tag in the html file. You can then mount the modified files to the container as follows: ``` - docker run -d -p 1935:1935 -p 8080:8080 -v custom_players:/usr/local/nginx/html/players alqutami/rtmp-hls + docker run -d -p 1935:1935 -p 8080:8080 -v custom_players:/usr/local/nginx/html/players epicmorg/balancer:rtmp-hls ``` where `custom_players` is the directory holding the modified html files. -## Copyright -Released under MIT license. - -## More info - * **GitHub repo**: - * **Docker Hub image**: From bd9af5c7cc5fa64ce540607aa4d9be4e35984ec4 Mon Sep 17 00:00:00 2001 From: STAM Date: Tue, 4 Aug 2020 17:33:16 +0300 Subject: [PATCH 3/3] epicmorg/balancer:rtmp-hls --- balancer/rtmp-hls/Dockerfile | 100 +++++++++++++++--- balancer/rtmp-hls/LICENSE | 21 ---- .../sources.list.d/sources.buster.list | 19 ++++ .../rtmp-hls/sources.list.d/sources.sid.list | 19 ++++ .../sources.list.d/sources.stretch.list | 19 ++++ 5 files changed, 141 insertions(+), 37 deletions(-) delete mode 100644 balancer/rtmp-hls/LICENSE create mode 100644 balancer/rtmp-hls/sources.list.d/sources.buster.list create mode 100644 balancer/rtmp-hls/sources.list.d/sources.sid.list create mode 100644 balancer/rtmp-hls/sources.list.d/sources.stretch.list diff --git a/balancer/rtmp-hls/Dockerfile b/balancer/rtmp-hls/Dockerfile index 57fb6f0c6..5dc4f3f79 100644 --- a/balancer/rtmp-hls/Dockerfile +++ b/balancer/rtmp-hls/Dockerfile @@ -1,20 +1,71 @@ -##### Building the final image ##### FROM epicmorg/balancer +LABEL maintainer="EpicMorg DevTeam, developer@epicm.org" +ARG DEBIAN_FRONTEND=noninteractive ARG NGINX_RTMP_MODULE_VERSION=1.2.1 -# Install dependencies -RUN apt-get update && \ - apt-get install -y \ - tree ca-certificates openssl libpcre3-dev \ - librtmp1 libtheora0 libvorbis-dev libmp3lame0 \ - libx264-dev libx265-dev && \ - wget http://ftp.br.debian.org/debian/pool/main/libv/libvpx/libvpx4_1.6.1-3+deb9u2_amd64.deb && \ - dpkg -i libvpx4_1.6.1-3+deb9u2_amd64.deb && \ - rm -rfv libvpx4_1.6.1-3+deb9u2_amd64.de && \ - rm -rfv /var/lib/apt/lists/* - -RUN mkdir -p /usr/share/nginx/html /mnt/hls /mnt/dash /tmp/build && \ +################################################################## +# sid sources list +################################################################## +RUN rm -rfv /etc/apt/sources.list +COPY sources.list.d/sources.sid.list /etc/apt/sources.list +RUN apt update + +################################################################## +# installing utils +################################################################## +RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \ + apt-get update && \ + apt-get install -y --allow-unauthenticated \ + libpcre3-dev \ + librtmp1 \ + libtheora0 \ + libvorbis-dev \ + libmp3lame0 \ + libx264-dev \ + libx265-dev + + +################################################################## +# stretch sources list + libvpx +################################################################## +RUN rm -rfv /etc/apt/sources.list +COPY sources.list.d/sources.stretch.list /etc/apt/sources.list +RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \ + apt-get update && \ + apt-get install -y --allow-unauthenticated \ + libvpx4 + + +################################################################## +# buster sources list + libvpx +################################################################## +RUN rm -rfv /etc/apt/sources.list +COPY sources.list.d/sources.buster.list /etc/apt/sources.list +RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \ + apt-get update && \ + apt-get install -y --allow-unauthenticated \ + libvpx5 + + +################################################################## +# sid sources list + libvpx +################################################################## +RUN rm -rfv /etc/apt/sources.list +COPY sources.list.d/sources.sid.list /etc/apt/sources.list +RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \ + apt-get update && \ + apt-get install -y --allow-unauthenticated \ + libvpx6 + + +################################################################## +# installing deps for rtmp module +################################################################## +RUN mkdir -p /usr/share/nginx/html \ + /mnt/hls \ + /mnt/dash \ + /tmp/build && \ cd /tmp/build && \ wget https://github.com/arut/nginx-rtmp-module/archive/v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \ tar -zxf v${NGINX_RTMP_MODULE_VERSION}.tar.gz && \ @@ -23,18 +74,35 @@ RUN mkdir -p /usr/share/nginx/html /mnt/hls /mnt/dash /tmp/build && \ rm -rf /tmp/build -# Forward logs to Docker +################################################################## +# Forward logs to Docker +################################################################## RUN ln -sf /dev/stdout /var/log/nginx/access.log && \ ln -sf /dev/stderr /var/log/nginx/error.log -# Copy nginx config file to container + +################################################################## +# Copy nginx config file to container +################################################################## RUN rm -rfv /etc/nginx/nginx.conf COPY conf/nginx.conf /etc/nginx/nginx.conf -# Copy html players to container + +################################################################## +# Copy html players to container +################################################################## COPY players /usr/share/nginx/html/players +################################################################## +# cleaninig up +################################################################## +RUN apt clean -y && \ + apt autoclean -y && \ + rm -rfv /var/lib/apt/lists/* && \ + rm -rfv /var/cache/apt/archives/*.deb + + EXPOSE 1935 EXPOSE 8080 diff --git a/balancer/rtmp-hls/LICENSE b/balancer/rtmp-hls/LICENSE deleted file mode 100644 index ad8434abc..000000000 --- a/balancer/rtmp-hls/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Tareq Alqutami - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/balancer/rtmp-hls/sources.list.d/sources.buster.list b/balancer/rtmp-hls/sources.list.d/sources.buster.list new file mode 100644 index 000000000..fd3092816 --- /dev/null +++ b/balancer/rtmp-hls/sources.list.d/sources.buster.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ buster main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-backports main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-backports main contrib non-free +deb http://ftp.ru.debian.org/debian/ buster-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ buster-proposed-updates main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ buster/updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ buster/updates main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ buster main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ buster main non-free +#deb http://ftp.ru.debian.org/debian-multimedia/ buster-backports main +#deb-src http://ftp.ru.debian.org/debian-multimedia/ buster-backports main diff --git a/balancer/rtmp-hls/sources.list.d/sources.sid.list b/balancer/rtmp-hls/sources.list.d/sources.sid.list new file mode 100644 index 000000000..677a95436 --- /dev/null +++ b/balancer/rtmp-hls/sources.list.d/sources.sid.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ sid main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ sid main contrib non-free +deb http://ftp.ru.debian.org/debian/ testing-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ testing-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ testing-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ testing-proposed-updates main contrib non-free + +#backports +#deb http://ftp.ru.debian.org/debian/ testing-backports main contrib non-free +#deb-src http://ftp.ru.debian.org/debian/ testing-backports main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ testing-security main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ testing-security main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ sid main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ sid main non-free diff --git a/balancer/rtmp-hls/sources.list.d/sources.stretch.list b/balancer/rtmp-hls/sources.list.d/sources.stretch.list new file mode 100644 index 000000000..ff15154c3 --- /dev/null +++ b/balancer/rtmp-hls/sources.list.d/sources.stretch.list @@ -0,0 +1,19 @@ +#main +deb http://ftp.ru.debian.org/debian/ stretch main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-updates main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-backports main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-backports main contrib non-free +deb http://ftp.ru.debian.org/debian/ stretch-proposed-updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian/ stretch-proposed-updates main contrib non-free + +#security +deb http://ftp.ru.debian.org/debian-security/ stretch/updates main contrib non-free +deb-src http://ftp.ru.debian.org/debian-security/ stretch/updates main contrib non-free + +##multimedia +#deb http://ftp.ru.debian.org/debian-multimedia/ stretch main non-free +#deb-src http://ftp.ru.debian.org/debian-multimedia/ stretch main non-free +#deb http://ftp.ru.debian.org/debian-multimedia/ stretch-backports main +#deb-src http://ftp.ru.debian.org/debian-multimedia/ stretch-backports main