Skip to content

Example implementation of a dockerized Media Streaming Server powered by nginx-rtmp, ffmpeg and a Go API

License

Notifications You must be signed in to change notification settings

all-in-simplicity/openresty-rtmp-ffmpeg-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub Docker Build Status MicroBadger Size HitCount

Example of a Docker based Media Streaming Server powered by nginx-rtmp and a Go API

Table of Contents

Overview

This Repository contains a sample implementation of a Docker based Media Streaming Server which is powered by OpenResty with the nginx-rtmp module, ffmpeg, a very simple Go API and an example HTML page using video.js for playback.

Target audience are mainly beginners, who want to get an impression on how nginx-rtmp powered by Docker can be combined with an API in Go as a simple authentication layer.

nginx-rtmp is configured to transcode for adaptive streaming and create 4 different streams with different bitrates and quality once receiving stream.

Prerequisites

Usage

To run the image:

$ docker run -d -p 80:80 -p 1935:1935 -e STREAM_KEY=yourKey thiagodev/openresty-rtmp-ffmpeg-api

Note: If you dont set the environment variable STREAM_KEY, the API will always return 200, thus disabling the check functionality.

Configure OBS

URL.......:    rtmp://localhost/live?key=yourKey
Stream Key:    test

The Setting "Stream Key" is what later gets the stream's name. Eg. If Stream Key is test, a test.m3u8 will be generated.

Note: If you change this don't forget to point video.js to the new location

# index.html
<script>
	var player = videojs('example-video');
	player.src({
  		src: 'http://localhost:80/hls/test.m3u8',
  		type: 'application/x-mpegURL'
	});
</script>

Docker Compose

version: '2'
services:
  rtmp:
    image: thiagodev/openresty-rtmp-ffmpeg-api
    ports:
      - "80:80"
      - "1935:1935"
    environment:
      - STREAM_KEY=yourKey

Customize nginx configuration

See nginx.conf for an example config. To provide your own config start the container with a volume.

$ docker run -d -p 80:80 -p 1935:1935 -e STREAM_KEY=yourKey -v /path/to/your/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf:ro thiagodev/openresty-rtmp-ffmpeg-api

FFmpeg Compile Options

ffmpeg version 4.0.2 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 6.4.0 (Alpine 6.4.0)
  configuration:
  	--bindir=/usr/bin
  	--disable-debug
  	--disable-doc
  	--disable-ffplay
  	--enable-avresample
  	--enable-gnutls
  	--enable-gpl
  	--enable-libass
  	--enable-libfreetype
  	--enable-libmp3lame
  	--enable-libopus
  	--enable-librtmp
  	--enable-libtheora
  	--enable-libfdk-aac
      --enable-libvorbis
      --enable-libvpx
      --enable-libwebp
      --enable-libx264
      --enable-libx265
      --enable-nonfree
      --enable-postproc
      --enable-small
      --enable-version3

Built With

  • OpenResty - Dynamic web platform based on NGINX and LuaJIT
  • nginx-rtmp - NGINX-based Media Streaming Server
  • Gin - HTTP web framework written in Go (Golang)
  • FFmpeg - Cross-platform solution to record, convert and stream audio and video
  • video.js - The Player Framework

License

This project is licensed under the MIT License - see the LICENSE.md file for details