Непрерывная трансляция на YouTube через ffmpeg постоянно прекращается через некоторое время [закрыто]

Вопрос или проблема

Я пытаюсь транслировать простой MP4 файл в круглосуточную радиостанцию на YouTube в повторе с виртуальной машины с помощью ffmpeg. Это всего лишь 23 минуты (~1 ГБ) файл, и он отлично работает в течение нескольких часов или даже дней, а затем зависает. Я пробовал на небольшом сервере Digital Ocean и отключал сеанс ssh с помощью screen. Я использую -c copy, чтобы не обрабатывать и не перекодировать ничего (даже на самом маленьком сервере использование памяти/ЦП незначительно, так что я знаю, что это не проблема). Я даже пробовал некоторые автоматические параметры перезапуска ffmpeg без успеха. Вот команда, которую я сейчас запускаю:

ffmpeg -stream_loop -1 -re -i file.mp4 -c copy -drop_pkts_on_overflow 1 -attempt_recovery 1 -recover_any_error 1 -recovery_wait_time 1 -f flv "rtmp://x.rtmp.youtube.com/live2/{STREAM_KEY}"

Это работает идеально, какое-то время, а затем зависает с:

aost#0:1/copy @ 0x623b201c5fc0] Ошибка при отправке пакета на мультиплексор: Провод сломан                                                          
[out#0/flv @ 0x623b201a1780] Ошибка мультиплексирования пакета
[flv @ 0x623b201c3940] Не удалось обновить заголовок с правильной продолжительностью.
[flv @ 0x623b201c3940] Не удалось обновить заголовок с правильным размером файла.
[out#0/flv @ 0x623b201a1780] Ошибка записи трейлера: Провод сломан
[out#0/flv @ 0x623b201a1780] Ошибка закрытия файла: Провод сломан
[out#0/flv @ 0x623b201a1780] видео:9310695kB аудио:571706kB субтитры:0kB другие потоки:0kB глобальные заголовки:0kB накладные расходы мультиплексирования: 0.153029%
size= 9897524kB time=03:24:40.66 bitrate=6602.3kbits/s speed=   1x

Я не нашел много статей, касающихся проблемы сломанного провода, но те, которые я нашел, относятся либо к A) потокам, которые не запускаются, либо B) потокам, где провод ломается в первый раз, когда ввод пытается зациклить (ни одно из которых не является моей проблемой, поскольку он транслируется и зацикливается нормально в течение длительного времени).

Заранее спасибо!

.

Ответ или решение

Почему постоянная трансляция на YouTube через ffmpeg может прерываться?

Проблема, с которой вы столкнулись при использовании ffmpeg для непрерывной трансляции MP4-файла на YouTube, может возникать по ряду причин, включая сетевые нестабильности, ограничения сервера или неправильную конфигурацию команд. Рассмотрим вашу ситуацию более подробно и предложим возможные решения.

Основные причины проблемы

  1. Сетевая нестабильность: Если ваше сетевое соединение периодически теряет пакеты или имеет высокую задержку, это может привести к сбоям в стриминге. Проверьте стабильность вашего соединения с помощью таких инструментов, как ping или traceroute.

  2. Ограничения RTMP-соединения YouTube: YouTube может ограничивать время активного RTMP-соединения или прерывать его при низкой активности. Убедитесь, что ваш поток соответствует требованиям YouTube по времени и объему данных.

  3. Ошибки на сервере: Как и любое другое серверное приложение, сервер YouTube может иметь временные проблемы или перегрузки, что также может вызвать сбои в трансляции.

  4. Команды ffmpeg: Неправильные параметры командной строки могут усугубить ситуацию. Рассмотрим ваши параметры и подкорректируем их.

Предложенные изменения в команде

Вот ваша текущая команда:

ffmpeg -stream_loop -1 -re -i file.mp4 -c copy -drop_pkts_on_overflow 1 -attempt_recovery 1 -recover_any_error 1 -recovery_wait_time 1 -f flv "rtmp://x.rtmp.youtube.com/live2/{STREAM_KEY}"
  1. Параметр -stream_loop -1: Этот параметр заставляет ffmpeg бесконечно повторять файл, но если сервер прерывает соединение, возможно, стоит добавить обработку ошибок при повторном запуске стрима.

  2. Попробуйте включить -f flv и изменить на MP4: Некоторые пользователи сообщают о возникновении ошибок при использовании -c copy и формата FLV. Попробуйте перекодировать видео в более совместимый формат, используя libx264.

  3. Добавление перезапуска: Например, вы можете использовать сценарий для автоматической перезагрузки ffmpeg в случае сбоя.

Вот пример измененной команды:

while true; do
    ffmpeg -stream_loop -1 -re -i file.mp4 -c:v libx264 -preset veryfast -b:v 1500k -c:a aac -b:a 128k -f flv "rtmp://x.rtmp.youtube.com/live2/{STREAM_KEY}"
    sleep 5 # небольшой интервал перед перезапуском
done

Проверка на наличие ошибок

Обратите внимание на сообщения об ошибках, такие как:

Error submitting a packet to the muxer: Broken pipe

Эти сообщения указывают на проблемы с передачей данных. Один из способов отладки — проверить логи ffmpeg для более детального анализа.

Заключение

Проблемы с прерыванием стриминга могут быть вызваны множеством факторов, начиная от сетевых вопросов и заканчивая настройками вашего программного обеспечения. Применение указанных выше рекомендаций может помочь увеличить стабильность вашей трансляции.

Если проблема продолжит возникать, рассмотрите возможность использования другого облачного сервиса или улучшения ваших сетевых ресурсов для обеспечения более надежного соединения.

Оцените материал
Добавить комментарий

Капча загружается...