FFMpeg переключается между прямой трансляцией и текстовым видео при потоковой передаче на YouTube

FFMpeg переключается между прямой трансляцией и текстовым видео при потоковой передаче на YouTube

Я уже некоторое время веду прямую трансляцию на Youtube и разрабатываю решение, чтобы можно было запускать трансляцию удаленно через браузер. Мой план — запустить проект ASP.net core web api, который будет работать в фоновом режиме, когда я отправлю ему информацию о трансляции, он запустит FFMpeg для трансляции с USB-камеры. Мне также нужно иметь возможность нажать кнопку, чтобы «отключить» трансляцию, чтобы она показывала пустое видео с наложенным текстом (например, «Технические трудности»).

Мое решение на данный момент заключается в использовании двух экземпляров FFMpeg. Когда я переключаю режимы, я убиваю один процесс и запускаю другой. У меня это работает немного, но когда я переключаюсь между "режимом отключения звука" и "режимом потоковой передачи", Youtube, кажется, задыхается от изменения потока. Я подозреваю, что это потому, что когда я перехожу из режима отключения звука обратно в режим потока, YouTube не распознает, что режим отключения звука закончился. Кроме того, режим отключения звука отображает текст так, как я хочу, но из-за этого проигрыватель Youtube перестает быть "живым", так что если я снова запускаю обычную трансляцию, пользователю приходится нажимать кнопку "Живой", чтобы быть в курсе событий.

Вот командная строка для обоих режимов:

Режим потока:

ffmpeg.exe -f dshow -i video="<webcam name>" -f dshow -i audio="<microphone name>" -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -f flv rtmp://a.rtmp.youtube.com/live2/<stream key>

Режим без звука (blank.mp4 — это пустое видео длиной 3 секунды):

ffmpeg.exe -stream_loop -1 -i ./FFMpeg/blankvid.mp4 -vf "drawtext=fontfile=C\\:/Windows/Fonts/Arial.ttf:text='Technical Difficulties':fontcolor=white:fontsize=60:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2" -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -f flv -flvflags no_duration_filesize rtmp://a.rtmp.youtube.com/live2/<stream key>

Последнее замечание: Я знаю, что может быть способ использовать цветовой фильтр для создания черного видео, вместо того, чтобы иметь blankvid.mp4. Если вы также знаете, как получить параметры для этого, это было бы очень полезно.

решение1

Итак, после долгих поисков, проб и ошибок, похоже, теперь это работает. Не уверен, что все параметры необходимы, но проблема была в команде "Отключить звук". Я также выяснил, как использовать цветовой фильтр вместо пустого видео. В итоге я изменил его на

ffmpeg -re -stream_loop -1 -f lavfi -i "color=black:s=1280x720" -f lavfi -i anullsrc -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -vf "drawtext=fontfile=C\\:/Windows/Fonts/Arial.ttf:text='Technical Difficulties':fontcolor=white:fontsize=60:x=(w-text_w)/2:y=(h-text_h)/2" -f flv rtmp://a.rtmp.youtube.com/live2/<stream key>

Связанный контент