Swapping FFMPEG input source

Viewed 2857

I'm using FFMPEG to stream RMTP to a server. I wish to change what I'm streaming without breaking the connection to this server.

My current FFMPEG command looks like so:

ffmpeg -f v4l2 -s 1280x720 -r 10 -i /dev/video0 -c:v libx264 -f flv -r 30 -pix_fmt yuv420p "rtmp://server live=true pubUser=user pubPasswd=pass playpath=stream"

If I wanted to change from /dev/video0 to /dev/video1 then I need to stop this program and re-run the command swapping out the -i bit.

Since FFMPEG can read from stdin as well as files, I believe it should be possible to switch the input source on the fly by either piping the output of a different program, or utilizing UNIX sockets. There may also be a solution built into FFMPEG which I'm not aware of.

My question now is: what's the simplest / least code / most recommended way of switching these inputs? Is there a third-party tool that's recommended? Does FFMPEG have an alternate command-line parameter I've never heard of? If I do use a UNIX socket of stdin, is there a recommended way to change what's being written to them?

One of my concerns is that if I have FFMPEG read in from a UNIX socket and in a separate shell I have a different instance of FFMPEG writing to this UNIX socket, during the brief period when I'm switching sources the first instance of FFMPEG (which is doing the broadcasting) would die, as it couldn't find any video data to stream.

0 Answers
Related