Изменение задержки и джиттера потока rtmp с помощью OBS и nginx

У меня есть камера MEVO, которую я использую для потоковой передачи видео в OBS через мой сервер debian nginx rtmp. У меня также есть веб-камера USB, подключенная непосредственно к моему ПК с OBS, и я транслирую видео со своего смартфона в OBS через тот же сервер nginx rtmp и приложение под названием Larix Broadcaster. Загрузка процессора ПК OBS: 15%; Сервер nginx rtmp: 2%.

MEVO               > nginx-rtmp > OBS
USB webcam                      > OBS
Smartphone (Larix) > nginx-rtmp > OBS

Это работает, но потоки не синхронизируются друг с другом. Между MEVO и OBS существует задержка около 2-5 секунд (а также разница между задержками между Larix и OBS). Веб-камера работает мгновенно. Я не возражаю против двухсекундной задержки - я могу установить ручную асинхронную задержку в OBS на веб-камере, чтобы синхронизировать ее с MEVO. Проблема в том, что задержка непостоянна. Каждый раз, когда я начинаю транслировать MEVO, он меняется!

Затем, когда мне, наконец, удается синхронизировать потоки (удачный выстрел), также во время потоковой передачи они входят и не синхронизируются (дрожание). Только в диапазоне 100-200 мс, но достаточно, чтобы быть заметным.

Глядя на MEVO, я считаю, что он поддерживает только RTMP. Так что переход на другой протокол для меня не сработает.

Что могло быть причиной дрожания и изменения задержки? Может быть, сеть? Оба MEVO и OBS находятся в быстрой проводной сети со скоростью 1 Гбит / с.

Я попытался установить сетевую буферизацию в OBS на 1 МБ, 2 МБ или что-то еще, но это не помогло. Я также пытался изменить buflen в nginx.conf, но безуспешно.

nginx.conf:

worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        buflen 1000ms;
        application live {
            live on;
            record off;
            max_connections 20;
        }
    }
}
  • Я транслирую MEVO на rtmp: //10.0.0.1/live/mevo (mevo - это ключ потока)
  • Я транслирую Larix на rtmp: //10.0.0.1/live/larix (larix - это ключ потока)

Пожалуйста, помогите мне исправить дрожание и изменение задержки в OBS! Спасибо.


Обновите, поскольку я пытаюсь исправить меняющуюся задержку запуска:

  • Я попытался установить chunk_size на 2048, но это не помогло.
  • Когда добавляю: wait_key on; Мне никогда не удается показать трансляцию в OBS.

Любые идеи?


person MartinF    schedule 03.04.2020    source источник


Ответы (1)


Я из команды Softvelum, которая стоит за Larix Broadcaster.

Я бы рекомендовал изменить "Частоту ключевых кадров" на 1 секунду и установить "Максимальное количество элементов буфера" на 70. Вы можете прочитать Q13 на этой странице https://softvelum.com/larix/faq/, чтобы узнать больше об этой настройке. Что касается «ловли» синхронизации - это происходит, если вы начинаете потоковую передачу близко к началу ключевого кадра. Если у вас в буфере 300 элементов - это примерно 3 секунды, поэтому вы можете попасть в середину и получить 1,5-2 секунды позади реального времени.

Попробуйте поиграть с буфером и ключевым кадром, чтобы увидеть, как это работает.

person Yury    schedule 07.04.2020