Live stream SSTIC : relais

Créer un serveur relai

Il est possible de créer un serveur relai qui bénéficiera de flux garantis à la source. Ceci vous permettra d'économiser la bande passante disponible sur la connexion internet de votre entité, ou bien d'offrir un nouveau relai public dans la limite de votre bande passante.

Le serveur ne réalisera aucun transcodage des flux vidéo. L'utilisation CPU sera donc uniquement liée aux connexions des clients.

En suivant les étapes ci-dessous, vous pourrez donc créer un tel serveur relai pour les protocoles RTMP (tcp/1935) et HLS (tcp/80). Il captera le flux du SSTIC une seule fois, depuis la source, pour le redistribuer à ses clients : il est ainsi possible de limiter la consommation de bande passante sur la connexion internet à environ 5 Mbits/s.

Le protocole HLS utilise HTTP (port tcp/80) et peut passer par des proxy sans problème. Le protocole RTMP nécessite d'autoriser les flux du port tcp/1935 de vos clients à destination du serveur relai.

Vous pouvez également rediriger vos utilisateurs qui vont vers les serveurs officiels (sur internet) pour utiliser votre relai, avec une règle de pare-feu, de serveur proxy ou DNS.

Pré-requis

  1. Ce guide s'appuie sur une installation Debian stable à jour. Il est bien entendu possible d'utiliser n'importe quelle distribution Linux, ou système pouvant compiler nginx et son module RTMP.
  2. Une machine mono ou dual-core 2 Ghz possédant 1 ou 2 Go de RAM suffira. Une machine virtuelle ou un conteneur LXC feront également l'affaire.
  3. En dehors de la distribution et des quelques paquets à installer, prévoir 50 Mo de stockage additionnel pour les fragments de vidéo.
  4. Déclarez l'adresse IP publique qui sera employée par votre serveur relai ou sa passerelle (pour venir chercher les flux) aux administrateurs du streaming SSTIC (<streaming@lists.sstic.org>). Il est nécessaire de vous autoriser à prendre le flux sur le serveur principal. Pour éviter les abus et garantir la bande passante disponible, les flux sont réservés en priorité aux entités qui accueillent de nombreux spectateurs potentiels. Merci de préciser votre organisme d'appartenance dans l'hypothèse ou nous devrions restreindre le nombre de relais (et que votre connexion semble anonyme ou résidentielle).

  5. Autorisez les flux tcp/80 (protocole HLS + lecteur flash) et/ou tcp/1935 (protocole RTMP) de la part de vos clients vers votre serveur relai

Installation du système

Les commandes citées pour les étapes 1, 2, 9, 10, 11, 15 et 16 nécessitent potentiellement des privilèges élevés (root).

  1. Installer Debian stable sur la machine et s'assurer de sa mise à jour (apt-get update && apt-get upgrade).

  2. apt-get install build-essential libpcre3 libpcre3-dev libssl-dev unzip

  3. wget http://nginx.org/download/nginx-1.12.0.tar.gz

  4. wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

  5. tar zxvf nginx-1.12.0.tar.gz 

  6. unzip master.zip

  7. cd nginx-1.12.0

  8. ./configure --add-module=../nginx-rtmp-module-master --with-http_ssl_module

  9. make && make install

  10. mkdir -p /var/www/stat /var/www/hls /var/www/player

  11. cp ../nginx-rtmp-module-master/stat.xsl /var/www/stat/

  12. cd -

  13. wget https://static.sstic.org/streaming2017/player.tar.gz 

  14. sha256sum player.tar.gz (le résultat doit être : eb30fbe20df967f606d3756de96d42a47c4867c17a6d32ab73fa43773126afb2)

  15. tar zxvf player.tar.gz -C /var/www/player

  16. sed -e 's/streaming.sstic.org/192.168.1.1/g' -i /var/www/player/index.html (bien entendu, remplacez 192.168.1.1 par l'adresse IP ou hostname que vous aurez attribué au serveur relai)

A partir de maintenant, vous avez un serveur Nginx 1.8.1 compilé avec le module RTMP / HLS qui vous permet de récupérer des flux et les servir à des clients.

Nginx est installé dans /usr/local/nginx/. Sa configuration est dans /usr/local/nginx/conf/nginx.conf. Pour lancer le serveur, entrez la commande /usr/local/nginx/sbin/nginx ; il se lancera en arrière plan.

Il est nécessaire d'arrêter et relancer le serveur complètement au changement de configuration des flux RTMP/HLS. Pour arrêter le serveur, entrez la commande /usr/local/nginx/sbin/nginx -s stop.

Il ne reste plus qu'à mettre la configuration qui permet de capter le flux et le servir en RTMP et HLS.

Fichier de configuration nginx.conf

Copiez le fichier de configuration suivant dans /usr/local/nginx/conf/nginx.conf :

#user  nobody;
worker_processes  1;

events {
        worker_connections  1024;
}

rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application hls {
                        # Application for writing HLS chunks to /var/www/hls/ 
                        live on;
                        hls on;
                        hls_path /var/www/hls;
                        hls_nested on;
                        hls_playlist_length 10m; # 10 minutes takes about 300 MB.
                        hls_type live;
                        
                        pull rtmp://178.33.71.43/hls/live_low name=live_low static;
                        pull rtmp://178.33.71.43/hls/live_mid name=live_mid static;
                        pull rtmp://178.33.71.43/hls/live_hi name=live_hi static;

                        hls_variant _low BANDWIDTH=512000;
                        hls_variant _mid BANDWIDTH=1024000;
                        hls_variant _hi  BANDWIDTH=2048000;
                        
                        # maximum allowed connections
                        # warning: the true limit shall be done at the http level, 
                        # this is for RTMP clients only
                        
                        # max_connections 512;
                        
                        # allow local publish only
                        allow publish 127.0.0.1;
                        deny publish all;
                        
                        # allow all RTMP clients 
                        allow play all;
                        #deny play all;
                }
        }
}

# HTTP can be used for accessing RTMP stats
http {
        include       mime.types;
        default_type  application/octet-stream;

        sendfile        on;
        keepalive_timeout       65;
        #gzip  on;

        server {
                listen  80;
                server_name     localhost;

                # 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 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 /var/www/stat/;
                }

                location /hls {
                        # Serve HLS fragments
                        types {
                                application/vnd.apple.mpegurl m3u8;
                                video/mp2t ts;
                        }
                        root /var/www;
                        add_header Cache-Control no-cache;
                        add_header 'Access-Control-Allow-Origin' "$http_origin";
                }
                
                location / {
                        root /var/www/player;
                        add_header Cache-Control no-cache;
                        }
                
                # redirect server error pages to the static page /50x.html
                error_page   500 502 503 504  /50x.html;
                location = /50x.html {
                        root   html;
                }
        }
}

LiveStreaming/Relais (last edited 2017-05-15 20:10:00 by BLue)