auto-restart FFMPEG when it stops sending frames to youtube
#!/bin/sh | |
sleep 5 | |
ffmpeg -re -f mjpeg -r 10 -i "http://localhost/?action=stream" -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -acodec aac -ab 1k -strict experimental -s 640x360 -vcodec h264 -pix_fmt yuv420p -g 20 -vb 500k -preset ultrafast -crf 31 -r 10 -f flv "rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx-xxxx-xxxx" 2> /home/pi/ffmpeg.log |
#!/bin/sh | |
sleep 10 | |
while true | |
do | |
frameA=$(tail /home/pi/ffmpeg.log -n 1 | sed -nr 's/.*frame=(.*)fps.*/\1/p') | |
echo "$frameA" | |
sleep 5 | |
frameB=$(tail /home/pi/ffmpeg.log -n 1 | sed -nr 's/.*frame=(.*)fps.*/\1/p') | |
echo "$frameB" | |
if [ "$frameA" = "$frameB" ] | |
then | |
echo "Stream has hung" | |
printf "%s - Stream has hung\n" "$(date)" >> stream.log | |
pkill ffmpeg | |
echo "killed ffmpeg..." | |
printf "%s - Killed ffmpeg...\n" "$(date)" >> stream.log | |
echo "Waiting 5 secs" | |
sleep 5 | |
bash /home/pi/ffmpeg.sh & | |
echo "started ffpmeg.." | |
printf "%s - Started ffmpeg..\n" "$(date)" >> stream.log | |
echo "Waiting 15 secs" | |
sleep 15 | |
else | |
echo "Stream looks ok." | |
fi | |
sleep 2 | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
Auto restart script based from https://stackoverflow.com/questions/49471595/improve-bash-script-for-checking-when-ffmpeg-hangs-streaming-ip-cam-rtsp-to-yout