0

I made an infinite loop in the Bash script to restart streaming.

#!/bin/bash
while true
  do
    ffmpeg -re -rtsp_transport tcp -i "rtsp://{address:port}/{key}" -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -c:a libmp3lame -ab 128k -ar 44100 -c:v copy -threads 2 -bufsize 512k -f flv "rtmps://{address:port}/live/{key}" &
    PID=$!
    sleep 12h
    kill $PID
    sleep 2
 done

But sometimes an error occurs... which is displayed in the console in the following form:

rtsp://{address:port}/{key}: Invalid date found when processing input

And this time the stream does not work. How to supplement my script, which would track after running the command output in the console and when the error Invalid date found when processing input will end the process and immediately restart the stream?

1 Answer 1

1

If ffmpeg wasn't launched in the background this would be a lot easier: you'd just have to check the exit status.

But because we're dealing with multiple processes, we'll have to incorporate some inter-process communication.

Using signals: this is untested:

#!/bin/bash

# set up a signal handler for SIGUSR1
trap 'echo "ffmpeg died!"; exit 1' USR1

while true; do
    (   # start a subshell
        # if ffmpeg exits non-zero, signal the parent shell
        ffmpeg -options... || kill -s USR1 $$
    ) &
    # rest of loop is the same
done
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.