Рейтинг:0

Потоковый сервер RTMP/HLS, работающий на NGINX с Video.JS, для обеспечения прямых трансляций со смешанными результатами

флаг pg

Я работаю в небольшой государственной организации, которая хочет обеспечить прямую трансляцию заседаний правления для общественности. Мы используем 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, что может вызывать такую ​​​​функциональность (или ее отсутствие?), Или это будет полностью в веб-части этого?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.