Я использую rtmpdump для перепотоковой передачи живого видео в моей локальной сети на nginx rtmp сервер. как это:
sudo rtmpdump -r "rtmp://123.45.6.7/live/" -a "live/" -f "LNX 14,0,0,125" -W "http://123.45.6.7/jwplayer.flash.swf[1] " -p "http://123.45.6.7/[2] " --live -y "livestream2" | avconv -i pipe:0 -y
-v:v info -vcodec copy -acodec copy -f flv rtmp://localhost:1935/live/
это работает отлично самостоятельно без проблемы, но время от времени первоисточник мог бы мерцать, и это заставит рабочую команду выходить, и я должен вручную выполнить команду снова. Существует ли способ сделать сценарий, который автоматически обнаружит, если выход rtmpdump и там не будет никаким выполнением команды зомби и повторно выполнит команду? Я хочу автоматизировать этот процесс приблизительно для 4 прямых трансляций. Действительно ли это возможно?
Вы могли записать сценарий с этим содержанием:
#! /bin/bash
function INT_cleanup()
{
kill `jobs -p`
exit
}
trap INT_cleanup INT
# ${VAR-TEXT} means that TEXT is used if VAR is empty.
STREAM_START=$(($1))
STREAM_END=$(($2))
for ((COUNT=STREAM_START; COUNT<=STREAM_END;COUNT++))
do
while true #Infinite loop
do
rtmpdump -r "rtmp://123.45.6.7/live/" -a "live/" -f "LNX 14,0,0,125" -W \
"http://123.45.6.7/jwplayer.flash.swf[1] " \
-p "http://123.45.6.7/[2] " --live -y "livestream$COUNT" |
avconv -i pipe:0 -y -v:v info -vcodec copy \
-acodec copy -f flv rtmp://localhost:1935/live$COUNT/
done &
done
Или
#! /bin/bash
function INT_cleanup()
{
kill `jobs -p`
exit
}
trap INT_cleanup INT
count=0
while [[ $count < 10 ]] # Try 10 times
do
rtmpdump -r "rtmp://123.45.6.7/live/" -a "live/" -f "LNX 14,0,0,125" -W "http://123.45.6.7/jwplayer.flash.swf[1] " -p "http://123.45.6.7/[2] " --live -y "livestream2" | avconv -i pipe:0 -y -v:v info -vcodec copy -acodec copy -f flv rtmp://localhost:1935/live/
count=$((count + 1))
done
в файле назовите его stream.sh
, сделайте это исполняемым файлом:
chmod +x stream.sh
и выполненный это:
sudo ./stream.sh 1 3
Для уничтожения сценария нажмите CtrlC. Первым является бесконечный цикл, вторые выполнения для 10 повторений.
Я нашел этот сценарий. Я использовал его для перепорождения прикрепления ОСТИ. Это работает хорошо, но я советую Вам тестировать его прежде в большой степени использование
#!/bin/bash
# This script is a simple respawn deamon for those of us who dont want
# to deal with the /etc/event.d, monit etc...
# Usage: sh respawn.sh [program] [sleep time]
while [ true ]
do
sleep $2
if ps ax | grep -v grep | $1 > /dev/null
then
echo $1": Stopped. Restarting in "$2" seconds."
else
$1 &
fi
done