Я работаю в небольшой государственной организации, которая хочет обеспечить прямую трансляцию заседаний правления для общественности. Мы используем OBS для кодирования, и это никогда не доставляло нам никаких проблем, но в последнее время у нас было много жалоб на то, что наша прямая трансляция теряет соединение или просто никогда не загружается на нашем веб-конце.
Мы используем потоковый сервер NGINX RTMP/HLS, который был построен более 5 лет назад для обеспечения этого потока, и недавно я обновил его до последней версии Ubuntu Server и, чтобы поддерживать его как можно более актуальным, я даже переустановил NGINX и обновил несколько вещей здесь и там, но в целом сохранил нашу старую конфигурацию. Однако теперь, когда я тестировал это, я заметил проблемную производительность, которая может быть связана с браузером, но я хотел сначала спросить здесь, чтобы убедиться, что наш сервер играет по правилам.
Наш nginx.conf выглядит следующим образом:
load_module "modules/ngx_rtmp_module.so";
www-данные пользователя;
рабочие_процессы авто;
События {
worker_connections 1024;
}
http {
включить /etc/nginx/mime.types;
default_type application/octet-stream;
отправить файл включен;
keepalive_timeout 65;
# Если вы хотите включить gzip, раскомментируйте следующее:
#gzip включен;
#gzip_disable "msie6";
сервер{
слушать 80;
имя_сервера локальный хост;
add_header Access-Control-Allow-Origin *;
#rtmp статистика
местоположение / статистика {
rtmp_stat все;
rtmp_stat_stylesheet stat.xsl;
}
местоположение /stat.xsl {
# Это перемещает stat.xsl в другое место
корень /usr/src/nginx-rtmp-модуль;
}
местоположение / управление {
rtmp_control все;
}
error_page 500 502 503 504 /50x.html;
местоположение = /50x.html {
корень html;
}
#client (VLC и т. д.) может получить доступ к HLS здесь.
местоположение / hls {
корень /tmp;
add_header 'Cache-Control' 'без кеша';
add_header 'Access-Control-Allow-Origin' '*' всегда;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
если ($ 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;
}
}
типы {
приложение/тире+xml mpd;
приложение /vnd.apple.mpegurl m3u8;
видео/mp2t ц;
}
}
}
rtmp {
сервер{
слушать 8081;
размер_чанка 8192;
пинг 30 с;
уведомить_метод получить;
разрешить играть всем;
#разрешить публиковать все;
приложение в прямом эфире {
# Здесь мы собираемся разделить поток на разные битрейты для адаптивной потоковой передачи.
жить дальше;
exec ffmpeg -i rtmp://localhost:8081/live/$name -async 1 -vsync -1 -c:v libx264 -c:a libfdk_aac -b:v 256k -b:a 32k -vf "scale=480: trunc(ow/a/2)*2" -tune zerolatency -preset veryfast -crf 23 -f flv rtmp://localhost:8081/hls/$name_low -c:v libx264 -c:a libfdk_aac -b:v 768k -b:a 96k -vf "scale=720:trunc(ow/a/2)*2" -tune zerolatency -preset veryfast -crf 23 -f flv rtmp://localhost:8081/hls/$name_mid -c: v libx264 -c:a libfdk_aac -b:v 1024k -b:a 128k -vf "scale=960:trunc(ow/a/2)*2" -tune zerolatency -preset veryfast -crf 23 -f flv rtmp:/ /localhost:8081/hls/$name_high -c:v libx264 -c:a libfdk_aac -b:v 1920k -b:a 128k -vf "scale=1280:trunc(ow/a/2)*2" - настроить нулевую задержку -preset veryfast -crf 23 -f flv rtmp://localhost:8081/hls/$name_hd720 -c copy -f flv rtmp://localhost:8081/hls/$name_src;
}
# Вы должны отправлять поток x.264/aac RTMP через ffmpeg в это приложение
приложение hls {
разрешить играть всем;
#разрешить публиковать все;
жить дальше;
глс вкл.;
hls_path /tmp/hls;
hls_playlist_length 60 с;
hls_фрагмент 1с;
hls_variant _low ПОЛОСА = 288000, РАЗРЕШЕНИЕ = 426x240;
hls_variant _mid ПОЛОСА = 448000, РАЗРЕШЕНИЕ = 640x360;
hls_variant _high ПОЛОСА = 1152000, РАЗРЕШЕНИЕ = 854x480;
hls_variant _hd720 ПОЛОСА = 2048000, РАЗРЕШЕНИЕ = 1280x720;
hls_variant _src ПОЛОСА = 4096000, РАЗРЕШЕНИЕ = 1920x1080;
}
}
}
Как уже упоминалось, мы используем Video.js для предоставления потоковой передачи нашим пользователям на нашем веб-сайте.Конфигурация по этому поводу может выходить за рамки этой доски, но ради полной информации, этот поток без проблем воспроизводится в Firefox и Chrome (оба на рабочем столе), а также в Brave Browser (мобильный), но не хочет работайте в Brave Browser (на рабочем столе) или Chrome (на мобильном устройстве)
Есть ли что-нибудь в этом nginx.conf, что может вызывать такую функциональность (или ее отсутствие?), Или это будет полностью в веб-части этого?