Docker image for video streaming server that supports RTMP, RTMPS, HLS, and DASH streams.
This Docker image can be used to create a video streaming server that supports RTMP & RTMPS* Ingest, RTMP & RTMPS (via Stunnel) Pushing, and RTMP, HLS & DASH playback 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.
- The backend is Nginx with nginx-rtmp-module.
- FFmpeg for transcoding and adaptive streaming
- Stunnel for RTMPS support (primarily for Facebook Live)
- Default settings:
- RTMP is ON
- HLS is ON
- DASH is ON
- Other Nginx configuration files are also provided to allow for RTMP-only streams or FFmpeg transcoding and adaptive streaming.
- Statistic page of RTMP streams at
http://<server ip>:<server port>/stats
. - Available web video players (based on video.js and hls.js) at
/usr/local/nginx/html/players
.
Current Image is built using:
- Nginx 1.23.0 (compiled from source)
- Nginx-rtmp-module 1.2.2 (compiled from source)
- FFmpeg 5.1 (compiled from source)
This image was inspired by similar docker images from tiangolo and alfg. It has small build size, adds support for HTTP-based streams and adaptive streaming using FFmpeg.
docker run -d -p 1935:1935 -p 1936:1936 -p 8080:8080 -e PUID=$UID -e PGID=0 -e SSL_DOMAIN='rtmp.domain.loc' -v /your/local/assets/:/assets jamiephonic/rtmps-hls-server:latest
When you start the container, the default players and configuration files will be copied into /your/local/assets/
to allow you to easily access and edit them.
This will only be done once when you first start the container. If you want to restore the default configs, delete /your/local/assets/.initialized
and restart the container.
For more examples, see the Wiki
- Stream live RTMP content to:
rtmp://<server ip>:1935/live/<stream_key>
where <stream_key>
is any stream key you specify.
- Configure OBS to stream content:
Go to Settings > Stream, choose the following settings:- Service: Custom Streaming Server.
- Server:
rtmp://<server ip>:1935/live
. - Stream key: anything you want, however provided video players assume stream key is
test
See the Wiki for how to stream to the server with RTMPS
-
Using VLC:
- Go to Media > Open Network Stream.
- Enter the streaming URL:
rtmp://<server ip>:1935/live/<stream-key>
Replace<server ip>
with the IP of where the server is running, and<stream-key>
with the stream key you used when setting up the stream. - For HLS and DASH, the URLs are of the forms:
http://<server ip>:8080/hls/<stream-key>.m3u8
andhttp://<server ip>:8080/dash/<stream-key>_src.mpd
respectively. - Click Play.
-
Using provided web players:
The provided demo players assume the stream-key is calledtest
and the player is opened from localhost.- To play RTMP content (requires Flash):
http://<server ip>:8080/players/rtmp.html
- To play HLS content:
http://<server ip>:8080/players/hls_basic.html
- To play HLS content using hls.js library:
http://<server ip>:8080/players/hls.html
- To play DASH content:
http://<server ip>:8080/players/dash.html
Notes:
- These web players are hardcoded to play stream key "test" at localhost.
- To change the stream source for these players, Modify the
src
attribute in the video tag in the html file and then reload the page.
- To play RTMP content (requires Flash):
Released under MIT license.
-
GitHub repo: https://github.com/JamiePhonic/rtmp-hls-server.git
-
Docker Hub image: https://hub.docker.com/r/jamiephonic/rtmps-hls-server