ffmpeg пересылка в другой RTMP

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

Как я могу остановить сбой своей пересылки ffmpeg? Я запускаю следующую команду в .BAT файле:

:loop
ffmpeg -i "RTMP://IPADDRESS:1935/LIVE/STREAMNAME.STREAM pageUrl=http://URL.COM swfurl=http://domain.com/licensed/player-licensed.swf live=1" -isync  -vcodec copy -b:v 400k -acodec copy -b:a 128000 -ar 32000 -f flv "rtmp://IP:1935/LIVE/CHANNELNAME"
goto loop

Есть ли что-то неправильное в этой строке кода, кроме ссылок, которые я привел для демонстрационных целей?

Она продолжает сбоить – что-то с кодеком DTS. Может быть, мне стоит использовать что-то другое, кроме “copy” для аудиокодеков?

#!/bin/bash

until ffmpeg -i http://serverIP:host/user/pass/stream -c:v libx264 -preset medium -maxrate 3500k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv rtmp://serverIP:port/live/name;do

echo "перезапуск команды ffmpeg"
sleep 1
done

Напишите bash-скрипт, который будет перезапускать инструкцию ffmpeg. Запустите nohup ./batch-file.sh > /dev/null 2>&1 &

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

Чтобы эффективно наладить ре-стриминг с помощью FFmpeg и избежать проблем с падением процесса, важно учесть несколько ключевых аспектов. Ниже представлена детализированная инструкция по настройке и автоматическому перезапуску FFmpeg, а также решение проблемы с кодеком DTS, которую вы упомянули.

Основные проблемы с вашей командой

  1. Проблемы с кодеками: Использование -vcodec copy и -acodec copy может привести к проблемам, если входной поток содержит несовместимые кодеки. Попробуйте использовать кодеки libx264 для видео и aac для аудио. Это обычно обеспечивает лучшую совместимость. Например:

    ffmpeg -i "RTMP://IPADDRESS:1935/LIVE/STREAMNAME" -c:v libx264 -b:v 400k -c:a aac -b:a 128k -ar 32000 -f flv "rtmp://IP:1935/LIVE/CHANNELNAME"
  2. Проблемы с сетью: Если ваш поток не стабильный или в сети есть перебои, это может привести к сбоям. Убедитесь, что у вас хорошее соединение и проверьте состояние входного потока.

  3. Неправильные параметры: Проверьте, правильные ли параметры передаются в команду. Параметры pageUrl и swfurl предназначены для RTMP-потока и могут не работать с вашими текущими настройками.

Обновлённая команда для FFmpeg

Вот обновлённая версия команды, которая может помочь избежать проблем:

ffmpeg -i "RTMP://IPADDRESS:1935/LIVE/STREAMNAME" -c:v libx264 -b:v 400k -preset medium -c:a aac -b:a 128k -ar 32000 -f flv "rtmp://IP:1935/LIVE/CHANNELNAME"

Скрипт Bash для автоматического перезапуска FFmpeg

Для того чтобы ваш поток автоматически перезапускался, можно использовать следующий Bash-скрипт:

#!/bin/bash

while true; do
    ffmpeg -i "RTMP://serverIP:1935/LIVE/STREAMNAME" -c:v libx264 -preset medium -b:v 400k -c:a aac -b:a 128k -ar 32000 -f flv "rtmp://serverIP:1935/LIVE/CHANNELNAME"
    echo "FFmpeg завершил работу. Перезапуск через 1 секунду..."
    sleep 1
done

Этот скрипт автоматически перезапустит процесс FFmpeg в случае его завершения.

Запуск скрипта в фоновом режиме

Чтобы запустить этот скрипт в фоновом режиме и игнорировать вывод, используйте следующую команду:

nohup ./batch-file.sh > /dev/null 2>&1 &

Заключительные рекомендации

  1. Мониторинг состояния: Разработайте мониторинг состояния сервера и потока, чтобы быстро реагировать на проблемы, и при необходимости увеличьте время ожидания между перезапусками.

  2. Логи: Используйте логи для диагностики — добавьте параметр -loglevel error к вашей команде FFmpeg, чтобы фильтровать только ошибки.

  3. Тестирование: Перед развёртыванием в продакшн-среде протестируйте изменения на локальном сервере, чтобы убедиться в совместимости кодеков и стабильности соединения.

Следуя этим рекомендациям, вы сможете снизить вероятность падения FFmpeg и обеспечить более надёжную ре-стриминг-систему. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за поддержкой.

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

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