Skip to content

Configure NGINX Stream Resolutions

YouPHPTube edited this page Feb 11, 2018 · 3 revisions

That is the default working multi resolution

Make sure you create a dir for low resolution sudo mkdir /HLS/low

    worker_processes  1;
error_log  logs/error.log debug;
events {
        worker_connections  1024;
}
rtmp {
        server {
                listen 1935;
                allow play all;
                #creates our "live" full-resolution HLS videostream from our incoming encoder stream and tells where to put the HLS video manifest and video fragments
                application live {
                    allow play all;
                    live on;
                    #record all;
                    #record_path /video_recordings;
                    #record_unique on;
                    hls on;
                    hls_nested on;
                    hls_path /HLS/live;
                    #hls_playlist_length 4s;
                    #hls_fragment 1s;
                    hls_fragment 10s;
                    on_publish http://localhost/YouPHPTube/plugin/Live/on_publish.php;
                    on_play http://localhost/YouPHPTube/plugin/Live/on_play.php;
                    on_record_done http://localhost/YouPHPTube/plugin/Live/on_record_done.php;

                    #creates the downsampled or "trans-rated" mobile video stream as a 400kbps, 480x360 sized video
                    exec ffmpeg -i rtmp://localhost:1935/$app/$name -acodec copy -c:v libx264 -preset veryfast -profile:v baseline -vsync cfr -vf scale=-2:360,setdar=16:9 -b:v 400k -bufsize 400k -threads 0 -r 30 -f flv rtmp://localhost:1935/low/${name};

                    #recorder video{
                    #    record all;
                    #    record_path /tmp;
                    #    record_notify on;
                    #    record_suffix -%d-%b-%y-%T.flv;
                    #}
                }

                #creates our "mobile" lower-resolution HLS videostream from the ffmpeg-created stream and tells where to put the HLS video manifest and video fragments
                application low {
                    allow play all;
                    live on;
                    hls on;
                    hls_nested on;
                    hls_path /HLS/low;
                    hls_fragment 10s;
                }

        }
}
http {
        include       mime.types;
        default_type  application/octet-stream;
        server {
                listen 8080;
                server_name localhost;
                #creates the http-location for our full-resolution (desktop) HLS stream - "http://my-ip/live/my-stream-key/index.m3u8"      
                location /live {
                        # Disable cache
                        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;
                        }
                        types {
                                application/vnd.apple.mpegurl m3u8;
                        }
                        alias /HLS/live;
                }

                #creates the http-location for our mobile-device HLS stream - "http://my-ip/low/my-stream-key/index.m3u8"        
                location /low {

                    # Disable cache
                    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;
                    }
                    types {
                            application/vnd.apple.mpegurl m3u8;
                    }
                    alias /HLS/low;
                }  

                #allows us to see how stats on viewers on our Nginx site using a URL like: "http://my-ip/stats"     
                #location /stats {
                #        stub_status;
                #}
                location /stat {
                        rtmp_stat all;
                        rtmp_stat_stylesheet stat.xsl;
                }
                location /stat.xsl {
                        root html;
                }
                location /control {
                        rtmp_control all;
                }
                #allows us to host some webpages which can show our videos: "http://my-ip/my-page.html"     
                location / {
                        root   html;
                        index  index.html index.htm;
                }   
        }
}
Clone this wiki locally