У меня есть рабочая установка nginx с модулем rtmp, работающим как шарм, создающим прямые трансляции как с тире, так и с hsl. Пока нет проблем.
Когда я пытаюсь включить транскодирование ffmpeg для адаптивной потоковой передачи, он отлично создает версию hls, фрагменты видео, m3pu8 для каждой версии видео и мастер-файл m3u8, который я вызываю из веб-плеера.
Но в версии dash я получаю куски, манифест mpd для каждой версии, но не главный манифест.
Я что-то пропустил? Любая помощь будет принята с благодарностью.
nginx.conf:
События {
worker_connections 1024;
}
rtmp {
сервер {
слушать 1935;
приложение в прямом эфире {
жить дальше;
exec ffmpeg -i rtmp://stream.server.net/live/$name -threads 1
-c:v libx264 -profile:v baseline -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 baseline -b:v 1024K -s 852x480 -f flv -c:a aac -ac 1 -strict -2 -b:a 128k rtmp://stream.server.net/liveout/ $имя_480;
}
выход приложения {
жить дальше;
глс вкл.;
hls_path /дом/поток/hls/;
hls_фрагмент 4s;
hls_playlist_length 60 с;
броситься вперед;
dash_path /home/stream/dash;
dash_fragment 10 с;
dash_playlist_length 30 с;
dash_nested выключено;
hls_variant _360 ПОЛОСА=448000;
hls_variant _480 ПОЛОСА=1152000;
}
}
}
http {
сервер {
имя_сервера stream.server.net;
корень /дом/поток/;
местоположение / hls {
# Подавать фрагменты HLS
типы {
приложение /vnd.apple.mpegurl m3u8;
видео/mp2t ц;
}
корень /дом/поток/;
add_header Cache-Control без кеша;
# Настройка CORS
add_header 'Access-Control-Allow-Origin' '*' всегда;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# Разрешить предварительные запросы CORS
если ($ request_method = 'ВАРИАНТЫ') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'текст/обычная кодировка = UTF-8';
add_header 'Длина контента' 0;
вернуть 204;
}
}
местоположение / тире {
корень /дом/поток/;
# Подавать фрагменты DASH
типы {
приложение/тире+xml mpd;
видео/mp4 mp4;
}
add_header Cache-Control без кеша;
# Настройка CORS
add_header 'Access-Control-Allow-Origin' '*' всегда;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# Разрешить предварительные запросы CORS
если ($ request_method = 'ВАРИАНТЫ') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'текст/обычная кодировка = UTF-8';
add_header 'Длина контента' 0;
вернуть 204;
}
}
местоположение / статистика {
rtmp_stat все;
# Используйте эту таблицу стилей для просмотра XML как веб-страницы
# в браузере
rtmp_stat_stylesheet stat.xsl;
}
местоположение /stat.xsl {
# Таблица стилей XML для просмотра статистики RTMP.
# Скопируйте stat.xsl куда хотите
# и укажите здесь полный путь к каталогу
корень /дом/поток/;
}
слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/stream.server.net/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/stream.server.net/privkey.pem; # под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
}
типы {
текст/html html;
приложение/тире+xml mpd;
}
сервер {
если ($ host = stream.server.net) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
слушать 80;
имя_сервера stream.server.net;
вернуть 404; # под управлением Certbot
}}