FFMPEG: вопросы качества и скорости потоковой передачи на YouTube - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь создать надежный поток с моих серверов Icecast / Shoutcast на Youtube в прямом эфире.Команда, которую я использую:

ffmpeg -v verbose -framerate 30 -loop 1 -i /var/image.jpg -re -i http://127.0.0.1:4700/radio -c:v libx264 -preset ultrafast -b:v 2250k -maxrate 6000k -bufsize 6000k -c:a copy -ab 128k -s 1920x1080 -framerate 30 -g 60 -keyint_min 60 -f flv  rtmp://a.rtmp.youtube.com/live2/xxx

Как вы видите, я использую рекомендованный битрейт для Youtube, вставляйте ключевые кадры каждые 2 секунды и потоковую передачу со скоростью 30 кадров в секунду.Поток работает, но после запуска в течение некоторого времени происходят две вещи:

  1. FFMPEG speed падает с 1x до чего-то вроде 0.998x
  2. Youtube начинает жаловаться, что скорость видео потокаработает медленно, качество оценивается как плохое, и иногда видео начинает буферизоваться.

Почему это происходит?Загрузка процессора нормальная, связь в порядке (поток работает на выделенном сервере 1Gg / s).

Так как в моем примере выше я передаю одно изображение в виде логотипа потока, который я также пытался сгенерироватькороткое 30-секундное видео с этим изображением и трансляция этого видео вместо изображения, но это также не помогло.

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

ffmpeg -framerate 30 -loop 1 -i /var/image.jpg -c:v libx264 -preset ultrafast -tune stillimage  -b:v 2250k -minrate 2250k -maxrate 6000k -bufsize 6000k -framerate 30 -g 60 -keyint_min 60 -t 30 out4.mp4

И трансляция с

ffmpeg -stream_loop -1 -i out4.mp4  -re -i http://127.0.0.1:4700/radio -c:v copy -c:a copy  -framerate 30 -g 60 -keyint_min 60 -f flv  rtmp://a.rtmp.youtube.com/live2/xxx

ffmpeg версия 4.1.1

1 Ответ

0 голосов
/ 04 марта 2019

Вы уверены, что ваш исходный поток действительно идет в ногу с настенными часами?

В зависимости от того, как он закодирован, существуют возможности, что он сильно искажается.В конечном итоге это приводит к тому, что буфер становится меньше (или переполняется, если он слишком быстрый), и игрок жалуется / пропускает.

Можете ли вы попытаться записать поток в несколько часов в файл, а затем передать его с помощью FFmpeg?Если это работает, то это явный признак того, что исходная синхронизация потока (частота дискретизации) выключена.

Правильное определение частоты дискретизации - вот почему профессиональные / дорогие звуковые карты используют высокоточные кварцево-управляемые генераторы.Чисто виртуальная обработка (например, файлы закодированы в поток) может легко искажаться, особенно внутри виртуальных машин.Кроме того, дешевые звуковые карты USB часто являются одними из худших нарушителей с точки зрения точности и стабильности частоты.

FFmpeg может иметь возможность справиться со слишком медленным вводом.Ключевыми словами могут быть «отступы» или «пропущенные образцы».

...