Raspberry Pi Camera vs. RTSP Streaming

It Would Be Nice to turn the various Raspberry Pi camera boxen around here into more-or-less full-automatic IP streaming cameras, perhaps using RTSP, so as to avoid having to start everything manually, then restart the machinery after a trivial interruption. I naively thought video streaming was a solved problem, especially on an RPi, particularly with an Official RPi Camera, given the number of solutions found by casual searching with the obvious keywords.

As far as I can tell, however, all of the recommended setups fail in glorious / amusing / tragic ways. Some failures may be due to old configurations no longer applicable to new software, but I’m nowhere near expert experienced enough to figure out what’s broken and how to fix anything in particular.

Doing RTSP evidently requires the live555.com Streaming Media libraries & test suite. Compiling requires adding -DNO_SSL=1 to the COMPILE_OPTS line in the Makefile, then letting it bake it for a while.

The v4l2rtspserver code fetches & cleanly compiles its version of the live555 code, then emits various buffer overflow errors while streaming; the partial buffers clearly show how the compression works on small blocks in successive lines. Increasing various buffer sizes from 60 kB to 100 kB to 300 kB had little effect. This may have to do with the stream’s encoding / compression methods / bit rates, none of which seem amenable to random futzing.

Another straightforward configuration compiled fine, but VLC failed to actually show the stream, perhaps due to differences between the old version of Raspbian (“Stretch”) and the new version of Raspberry Pi OS (“Buster”).

Running the RPi camera through the Video4Linux2 interface to create a /dev/video0 device seems to work, but controlling the camera’s exposure (and suchlike) with v4l2_ctl behaves erratically. Obvious effects, like rotation & flipping, work fine, but not the fine details along the lines of auto exposure and color modes.

Attempting to fire raspivid through cvlc to produce an RTSP stream required installing VLC on a headless Raspberry Pi, plus enough co-requisite packages to outfit world+dog+kitchenSink. After all the huffing & puffing wound down, the recommended VLC parameters failed to produce an output stream. The VLC doc regarding streaming is, to me, impenetrable, so I have no idea how to improve the situation; I assume RTSP streaming is possible, just not by me.

Whenever any of those lashups produced any video whatsoever, the images suffered from tens-of-seconds latency, dropped frames, out-of-order video updates, and generally poor behavior. Some maladies certainly came from the aforementioned inappropriate encoding / compression methods / bit rates.

The least horrible alternative seems to be some variation on the original theme of using raspivid to directly create a tcp stream or firing raspivid into netcat to the same effect, then re-encoding it on a beefier PC as needed. I’m sure systemd can automagically restart raspivid (or, surely, a script with all the parameters) after it shuts down.

So far, this has been an … unsatisfactory … experience, but now I can close a dozen browser tabs.

5 thoughts on “Raspberry Pi Camera vs. RTSP Streaming

  1. Maybe not what you’re looking for, but I recently bought an older Axis 211 camera on eBay. It’s POE and was easy to plug in to my network and connect to. Not HD, but the picture is good and with a cheap CS telephoto lens, I have a close up view of what the mill is doing.

    1. Man, those things look like they ought to have video tubes inside! I suppose the size makes them more conspicuous, which is most of the value a low-res security camera brings to the table.

  2. I recently dealt with this, and I used motioneyeos on a pi3b+. If you’ve got network bandwidth to throw at it, I found the “fast network camera” option over gigabit ethernet to produce a good stream with minimal delay. RTSP caused too much lag for my purpose. I assume the standalone package would also work.

    1. Long ago, I knew wired networks were better. Trying to stream video over WiFi reminds me how right I was.

      Thanks for the pointer!

  3. I’m fighting the same battle, but I have way many more tabs open ;-) I want to capture video in real-time, add audio and allow multiple raspberry pi’s to fetch that video (I’m trying to make a DIY video doorbell with multiple indoor units). I can’t seem to find a solution that has near-zero latency… the fastest stream so far was using an mjpeg stream, but no audio…

Comments are closed.