> For the complete documentation index, see [llms.txt](https://til.yulrizka.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://til.yulrizka.com/unix/ffmpeg-monitor-and-restart-stream-when-it-hung-or-stall.md).

# ffmpeg monitor and restart stream when it hung or stall

You are using ffmpeg to stream to youtube but after a while, it hung or stuck. You want to restart the streaming command when this happens.

First run the `ffmpeg` command on a terminal in a while loop (this example is for fish terminal)

```
while true
  ffmpeg -re -i https://roundrobin3.videostreamingwowza.com/visdeurbel2/visdeurbel2.stream/playlist.m3u8 -c:v copy -c:a aac -ar 44100 -ab 128k -ac 2 -strict -2 -flags +global_header -bsf:a aac_adtstoasc -bufsize 3000k -f flv "rtmp://a.rtmp.youtube.com/live2/abcd-efgh-ijkl" > youtube.log
  sleep 5
end
```

This will run the stream and output it to a `log.txt`

run this script on separate terminal to monitor and restart ffmpeg process

```
#!/bin/sh

#sleep 10
while true
do
    frameA=$(grep "videostreamingwowza" youtube.log | tail -n1 | sed -n 's/.*\(roundrobin3.videostreamingwowza.com.*\.ts.*\)/\1/p')
    echo "A: $frameA"
    sleep 30
    frameB=$(grep "videostreamingwowza" youtube.log | tail -n1 | sed -n 's/.*\(roundrobin3.videostreamingwowza.com.*\.ts.*\)/\1/p')
    echo "B: $frameB"

    if [ "$frameA" = "$frameB" ]
    then
        echo "Stream has hung"
        printf "%s - Stream has hung\n" "$(date)" >> stream.log
        pkill ffmpeg
        echo "killed ffmpeg..."
    fi

    sleep 2
done
```

Basically it take some line from the log, and do it again after 30 seconds.

If the line stays the same, it assume that the stream stuck and kill the `ffmpeg` process
