FOSSMeet Video Team

From WIKI FOSSCELL NITC
Revision as of 15:58, 17 April 2024 by Madhav Prabhu (talk | contribs) (Updated details about Nginx server)

This Page is to describe how the FOSSMeet'24 video stream was setup.

Live Streaming Server

The live streaming server was setup using nginx (with an rtmp module). Please use this link to get an insight of the config files involved and brief explanation of concepts behind it.

We used a VM in SSL with 6 Cores and 6 GB of RAM, however even with around 10-15 concurrent consumers, the server was not under heavy load (<10% thats how amazing nginx is). We didn't configure to serve multiple resolutions and bitrates, so maybe the reason for less load was that. The VM needs a port apart from https open to the internet to accept rtmp traffic. Please consult SSL Admins for the exact ports used as it wont be disclosed here.

daemon off;

error_log /dev/stdout info;

events {
    worker_connections 1024;
}

rtmp {
    server {
        listen ${RTMP_PORT};
        chunk_size 4000;

        application hls {
            live on;
            hls on;
            hls_fragment_naming system;
            hls_fragment 5;
            hls_playlist_length 10;
            hls_path /opt/data/hls;
            hls_nested on;

	    #hls_variant _720p2628kbs BANDWIDTH=2628000,RESOLUTION=1280x720;
            #hls_variant _480p1128kbs BANDWIDTH=1128000,RESOLUTION=854x480;
            #hls_variant _360p878kbs BANDWIDTH=878000,RESOLUTION=640x360;
            #hls_variant _240p528kbs BANDWIDTH=528000,RESOLUTION=426x240;
            #hls_variant _240p264kbs BANDWIDTH=264000,RESOLUTION=426x240;
        }
    }
}

http {
    root /www/static;
    sendfile off;
    tcp_nopush on;
    server_tokens off;
    access_log /dev/stdout combined;

    # Uncomment these lines to enable SSL.
    # ssl_protocols TLSv1.2 TLSv1.3;
    # ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    # ssl_prefer_server_ciphers off;
    # ssl_session_cache shared:SSL:10m;
    # ssl_session_timeout 1d;

    server {
        listen ${HTTP_PORT};

        # Uncomment these lines to enable SSL.
        # Update the ssl paths with your own certificate and private key.
            
        # listen ${HTTPS_PORT} ssl;
        # ssl_certificate     /opt/certs/example.com.crt;
        # ssl_certificate_key /opt/certs/example.com.key;

        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /opt/hlsdata;
            add_header Cache-Control no-cache;
            add_header Access-Control-Allow-Origin *;
        }

        location /live {
          alias /opt/data/hls;
          types {
              application/vnd.apple.mpegurl m3u8;
              video/mp2t ts;
          }
          add_header Cache-Control no-cache;
          add_header Access-Control-Allow-Origin *;
        }

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /www/static;
        }

        location /crossdomain.xml {
            default_type text/xml;
            expires 24h;
        }
    }
}

Requirements

  1. Server Side.
    1. VM with (spec here)
    2. nginx with config (link here)
  2. Broadcasting Side
    1. OBS studio
    2. DSLR Camera and Mini USB cable
    3. gstreamer drivers