Am o configurație de lucru a nginx cu modulul rtmp care funcționează ca un farmec creând fluxuri live atât cu dash, cât și cu hsl. Nicio problemă până acum.
Când încerc să activez transcodarea ffmpeg pentru streaming adaptiv, se creează foarte bine versiunea hls, bucățile video, un m3pu8 pentru fiecare versiune video și un master m3u8 care este cel pe care îl apelez din playerul web.
Dar în versiunea liniuță primesc bucățile, manifestul mpd pentru fiecare versiune, dar niciun manifest master.
Am pierdut ceva? Orice ajutor ar fi foarte apreciat.
nginx.conf:
evenimente {
conexiuni_muncitor 1024;
}
rtmp {
Server {
asculta 1935;
aplicație live {
trăiește mai departe;
exec ffmpeg -i rtmp://stream.server.net/live/$name -threads 1
-c:v libx264 -profile:v linie de bază -b:v 768K -s 640x360 -f flv -c:a aac -ac 1 -strict -2 -b:a 96k
rtmp://stream.server.net/liveout/$name_360
-c:v libx264 -profile:v linie de bază -b:v 1024K -s 852x480 -f flv -c:a aac -ac 1 -strict -2 -b:a 128k rtmp://stream.server.net/liveout/ $nume_480;
}
aplicație liveout {
trăiește mai departe;
hls pe;
calea_hls /home/stream/hls/;
hls_fragment 4s;
hls_playlist_length 60s;
liniuță pe;
cale_liniuță /home/stream/dash;
liniuță_fragment 10s;
dash_playlist_length 30s;
dash_neted off;
hls_variant _360 BANDWIDTH=448000;
hls_variant _480 BANDWIDTH=1152000;
}
}
}
http {
Server {
nume_server stream.server.net;
root /home/stream/;
locație /hls {
# Serviți fragmente HLS
tipuri {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /home/stream/;
add_header Cache-Control fără cache;
# Configurare CORS
add_header „Acces-Control-Allow-Origin” „*” întotdeauna;
add_header 'Acces-Control-Expose-Headers' 'Content-Length';
# Permiteți solicitările de zbor prealabil CORS
dacă ($request_method = 'OPȚIUNI') {
add_header „Acces-Control-Allow-Origin” „*”;
add_header „Acces-Control-Max-Age” 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header „Lungimea conținutului” 0;
întoarcere 204;
}
}
locație / liniuță {
root /home/stream/;
# Serviți fragmente DASH
tipuri {
aplicație/liniuță+xml mpd;
video/mp4 mp4;
}
add_header Cache-Control fără cache;
# Configurare CORS
add_header „Acces-Control-Allow-Origin” „*” întotdeauna;
add_header 'Acces-Control-Expose-Headers' 'Content-Length';
# Permiteți solicitările de zbor prealabil CORS
dacă ($request_method = 'OPȚIUNI') {
add_header „Acces-Control-Allow-Origin” „*”;
add_header „Acces-Control-Max-Age” 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header „Lungimea conținutului” 0;
întoarcere 204;
}
}
locație /stat {
rtmp_stat all;
# Utilizați această foaie de stil pentru a vizualiza XML ca pagină web
# în browser
rtmp_stat_stylesheet stat.xsl;
}
locație /stat.xsl {
# Foaie de stil XML pentru a vizualiza statisticile RTMP.
# Copiați stat.xsl oriunde doriți
# și puneți calea completă a directorului aici
root /home/stream/;
}
asculta 443 ssl; # gestionat de Certbot
ssl_certificate /etc/letsencrypt/live/stream.server.net/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/stream.server.net/privkey.pem; # gestionat de Certbot
includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot
}
tipuri {
text/html html;
aplicație/liniuță+xml mpd;
}
Server {
dacă ($gazdă = stream.server.net) {
returnează 301 https://$host$request_uri;
} # gestionat de Certbot
asculta 80;
nume_server stream.server.net;
întoarce 404; # gestionat de Certbot
}}