Прежде всего, я объясню, чего я хочу достичь, потому что может быть даже лучший способ добиться этого. Я смотрю на то, как заставить работать 2 потока, один из них нажимает на twitch.tv и youtube с задержкой, а другой - в режиме реального времени (без задержки), который можно просматривать с помощью VLC или чего-либо другого.
Я могу этого добитьсячастично, но «живой» поток иногда прерывается случайным образом с этой ошибкой:
Failed to update header with correct duration.
Failed to update header with correct filesize.
Раньше у меня была ошибка «Не удалось найти параметры кодека», но я решил ее, добавив ее в свою команду ffmpeg:
-analyzeduration 2147483647 -probesize 2147483647
Я уже сделал следующее:
Я сделал эти rtmp-сервер и приложения в моем nginx.conf
rtmp {
server {
listen 1935;
chunk_size 4096;
application delay_live {
live on;
record off;
push_reconnect 500ms;
push rtmp://live-vie.twitch.tv/app/my_stream_key;
push rtmp://a.rtmp.youtube.com/live2/my_stream_key;
}
application live {
live on;
record off;
}
application delay {
live on;
record all;
record_path /tmp/nginx;
# Work with timestamp to know when to continue streaming
record_suffix .flv;
record_unique on;
# Work with signals to know when to continue streaming
#record_append on;
exec_publish sudo sh /home/start.sh;
}
exec_static mkdir /tmp/nginx; #Working dir. Must be consistend with the delayer.py
}
}
Вкл. exec_publish
Я запускаю этоСкрипт .sh:
sudo screen -dmS delay bash -c "python /usr/local/nginx/sbin/delay/rtmp_stream_delayer.py; sleep 9999";
sleep 0.5;
sudo screen -dmS live bash -c "python /usr/local/nginx/sbin/live/rtmp_stream_live.py; sleep 9999";
Эти два скрипта на Python - это немного измененный скрипт из этого мерзавца:
https://github.com/sistason/rtmp_stream_delayer Несколько вещей, которые я там изменил, я использовал ffmpeg вместоavconv для вызова команд, и внутри rtmp_stream_live.py
я установил тот же каталог / файл, что и rtmp_stream_delayer.py
(поэтому он в основном использует тот же файл .flv для потоковой передачи в реальном времени). rtmp_stream_live.py
имеет задержку, установленную на 0. Также я добавил -analyzeduration 2147483647 -probesize 2147483647
к своему вызову ffmpeg в прямом эфире, чтобы избежать ошибок кодека, которые у меня были ранее.
Полные вызовы ffmpeg, которые я использую:
rtmp_stream_delayer.py
subprocess.check_output('ffmpeg -re -i {0} -codec copy -f flv {1}'.format(filename, "rtmp://my_ip:port/delay_live").split())
rtmp_stream_live.py
subprocess.check_output('ffmpeg -re -analyzeduration 2147483647 -probesize 2147483647 -i /tmp/nginx/{0} -codec copy -f {1}'.format(filename, STREAM_DESTINATION).split())
Я пытался добавить этот флаг ffmpeg, но это не помогло вообще (ошибки кодека снова вернулись):
flv -flvflags no_duration_filesize
Задержка потока работает как талисман и без каких-либо проблем, но живой поток случайным образом останавливается с ошибками заголовка обновления, я не смог запустить его сам, просто это происходит случайно!
Заранее спасибо!