- Créé par Nicolas Can, dernière modification le mai 13, 2020
Vous regardez une version antérieure (v. /wiki/display/ES/Mise+en+place+du+Direct+Live) de cette page.
afficher les différences afficher l'historique de la page
« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 4) afficher la version suivante »
Nous conseillons de mettre en place le direct sur une autre VM que Pod.
Le live se base sur le moduel Rtmp de Nginx.
Pré-requis
- Installation : Debian 9.4 64 bits
Pour installer nginx en version 1.14, il faut d'abord ajouter les backports :
Se placer en tant que root (sudo -s)$> vim /etc/apt/sources.list
ajouter la ligne : deb http://ftp.debian.org/debian stretch-backports main
puis faire une mise à jour$> apt update
Installation de nginx$> apt-get -t stretch-backports install nginx
Ensuite, il faut installer le module nginx-rtmp : $> apt-get install libnginx-mod-rtmp
ffmpeg
Pour le multibitrate, il faut installer ffmpeg qui encode en temps réel le flux vidéo:$> aptitude install ffmpeg
Pour vérifier que tout s'est bien passé, il faut lister le répertoire modules enabled de nginx :
$> ls -l /etc/nginx/modules-enabled/
Vous devez voir mod-rtmp.conf :
total 16
[...]
lrwxrwxrwx 1 root root 48 oct. 17 12:59 50-mod-rtmp.conf -> /usr/share/nginx/modules-available/mod-rtmp.conf
[...]
Ensuite, il faut ajouter l'instruction include rtmp dans le nginx.conf et créer le snippets conrrespondant :
$> vim /etc/nginx/nginx.conf
[...]
include /etc/nginx/snippets/rtmp.conf;
[...]
Il faut donc ensuite créer le snippet RTMP :
$> vim /etc/nginx/snippets/rtmp.conf
rtmp {
server {
listen 1935; # port rtmp par defaut
chunk_size 4096; # taille des paquets transmis/découpé
application live { # nom de l'application (on peut mettre toto/tatta etc.
live on;
#meta copy;
#record off;
# publish only from localhost
allow publish 127.0.0.1; # seulement publier en local
allow publish all; #tout le monde peut publier
allow play all; # certaine adresse IP on le droit de lire
deny publish all; # mettre un deny à la fin pour securiser
exec ffmpeg -i rtmp://localhost/$app/$name
-c:v libx264 -preset veryfast -b:v 256k -maxrate 256k -bufsize 512k -vf "scale=480:-2,format=yuv420p" -g 60 -c:a aac -b:a 64k -ar 44100 -f flv rtmp://localhost/show/$name_low
-c:v libx264 -preset veryfast -b:v 512k -maxrate 512k -bufsize 1024k -vf "scale=720:-2,format=yuv420p" -g 60 -c:a aac -b:a 96k -ar 44100 -f flv rtmp://localhost/show/$name_mid
-c:v libx264 -preset veryfast -b:v 1024k -maxrate 1024k -bufsize 2048k -vf "scale=1280:-2,format=yuv420p" -g 60 -c:a aac -b:a 128k -ar 44100 -f flv rtmp://localhost/show/$name_high
>/tmp/ffmpeg.log 2>&1 ;
exec_publish curl --request PATCH "https://pod.univ.fr/rest/broadcasters/$name/" --header "Content-Type: application/json" --header "Accept: application/json" --user CHANGE_USERNAME:CHANGE-THIS-STATUS-PASSWORD --data "{\"status\":true}";
exec_publish_done curl --request PATCH "https://pod.univ.fr/rest/broadcasters/$name/" --header "Content-Type: application/json" --header "Accept: application/json" --user CHANGE_USERNAME:CHANGE-THIS-STATUS-PASSWORD --data "{\"status\":false}";
}
# This application is for splitting the stream into HLS fragments
application show {
live on; # Allows live input from above
meta copy;
record off;
hls on; # activation du hls
hls_path /dev/shm/hls; #chemin des fragment ts mettre dans /dev/shm pour eviter de faire trop travailler le disque
hls_nested on; # cree un sous repertoire par stream envoye
hls_fragment 2s; #taille des fragments
# Instruct clients to adjust resolution according to bandwidth
hls_variant _low BANDWIDTH=288000; # Low bitrate, sub-SD resolution
hls_variant _high BANDWIDTH=1152000; # High bitrate, higher-than-SD resolution
hls_variant _src BANDWIDTH=4096000; # Source bitrate, source resolution
}
}
}
Vous pouvez voir toutes les directives de ce module à cette adresse : https://github.com/arut/nginx-rtmp-module/wiki/Directives
HTTP:
Il faut enfin déclarer la route hls pour lire les vidéos :
$> vim /etc/nginx/sites-enabled/default
server {
listen 80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
# path to HLS application service
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /dev/shm/hls;
add_header Cache-Control no-cache;
add_header 'Access-Control-Allow-Origin' '*';
}
add_header 'Access-Control-Allow-Origin' '*'; # Hotfix pour diffusion depuis un autre serveur
}
POD
Il faut commencer par activer l'application live en ajoutant "live" dans THIRD_PARTY_APPS dans le fichier settings_local.py
Ensuite il faut se rendre dans l'administration de Pod, créer un bâtiment puis un diffuseur rattaché à ce bâtiment en précisant l'url de lecture du flux de direct.
Exemple :
Avec OBS, dans les paramètres, onglet Flux, je précise ces données :
URL : rtmp://serveur.univ.fr/live
Clé de stream : nico
Dans Pod, dans les paramètres de mon diffuseur, dans le champ URL, je vais préciser ceci : http://serveur.univ.fr/hls/nico.m3u8
Nous venons donc de créer un flux diffusé en direct accessible en HTML5, multibitrate et adaptatif, voici ce que contient le fichier nico.m3u8:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=288000
nico_low/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1152000
nico_high/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4096000
nico_src/index.m3u8
- Aucune étiquette