Created
September 12, 2018 06:42
-
-
Save spiermar/b389b96642fb973d0cc9766ee7b559ac to your computer and use it in GitHub Desktop.
Nginx RMTP to HLS and DASH
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#user nobody; | |
worker_processes 1; | |
#error_log logs/error.log; | |
#error_log logs/error.log notice; | |
#error_log logs/error.log info; | |
pid /var/run/nginx.pid; | |
events { | |
worker_connections 1024; | |
} | |
# RTMP configuration | |
rtmp { | |
server { | |
listen 1935; # Listen on standard RTMP port | |
chunk_size 4000; | |
application stream { | |
live on; | |
# HLS | |
# For HLS to work please create a directory in tmpfs (/tmp/hls here) | |
# for the fragments. The directory contents is served via HTTP (see | |
# http{} section in config) | |
# | |
# Incoming stream must be in H264/AAC. For iPhones use baseline H264 | |
# profile (see ffmpeg example). | |
# This example creates RTMP stream from movie ready for HLS: | |
# | |
# ffmpeg -loglevel verbose -re -i movie.avi -vcodec libx264 | |
# -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 | |
# -f flv rtmp://localhost:1935/hls/movie | |
# | |
# If you need to transcode live stream use 'exec' feature. | |
# | |
hls on; | |
hls_path /usr/local/nginx/html/stream/hls; | |
hls_fragment 3; | |
hls_playlist_length 60; | |
# MPEG-DASH is similar to HLS | |
dash on; | |
dash_path /usr/local/nginx/html/stream/dash; | |
# disable consuming the stream from nginx as rtmp | |
deny play all; | |
} | |
} | |
} | |
http { | |
include mime.types; | |
default_type application/octet-stream; | |
#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' | |
# '$status $body_bytes_sent "$http_referer" ' | |
# '"$http_user_agent" "$http_x_forwarded_for"'; | |
#access_log logs/access.log main; | |
sendfile off; | |
tcp_nopush on; | |
aio off; | |
directio 512; | |
#keepalive_timeout 0; | |
keepalive_timeout 65; | |
server { | |
listen 80; | |
# This URL provides RTMP statistics in XML | |
location /stat { | |
rtmp_stat all; | |
# Use this stylesheet to view XML as web page | |
# in browser | |
rtmp_stat_stylesheet /usr/local/nginx/html/stat.xsl; | |
} | |
location /stat.xsl { | |
# XML stylesheet to view RTMP stats. | |
# Copy stat.xsl wherever you want | |
# and put the full directory path here | |
root /usr/local/nginx/html; | |
} | |
location /hls { | |
# Serve HLS fragments | |
types { | |
application/vnd.apple.mpegurl m3u8; | |
video/mp2t ts; | |
} | |
root /usr/local/nginx/html/stream; | |
add_header Cache-Control no-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; | |
} | |
} | |
location /dash { | |
# Serve DASH fragments | |
types { | |
application/dash+xml mpd; | |
video/mp4 mp4; | |
} | |
root /usr/local/nginx/html/stream; | |
add_header Cache-Control no-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; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment