Skip to content

Instantly share code, notes, and snippets.

@OkoyaUsman
Forked from spiermar/nginx.conf
Created January 12, 2023 11:57
Show Gist options
  • Select an option

  • Save OkoyaUsman/35895f236ca754a1bcc10da6ffdbf669 to your computer and use it in GitHub Desktop.

Select an option

Save OkoyaUsman/35895f236ca754a1bcc10da6ffdbf669 to your computer and use it in GitHub Desktop.

Revisions

  1. @spiermar spiermar created this gist Sep 12, 2018.
    138 changes: 138 additions & 0 deletions nginx.conf
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,138 @@
    #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;
    }
    }
    }
    }