This is an streamer feed from an Video4Linux device that support H264/JPEG or VP8 capture.
The RTSP server support :
- RTP/UDP unicast
- RTP/UDP multicast
- RTP/TCP
- RTP/RTSP/HTTP
The HTTP server support :
- HLS
- MPEG-DASH
Domain public
- liblivemedia-dev License LGPL > live.2012.01.07 (need StreamReplicator)
- liblog4cpp5-dev License LGPL
The build try to install live555 package using apt-get, however in order to install live555 disabling check of port reuse, you can proceed like this:
wget https://www.live555.com/liveMedia/public/live555-latest.tar.gz -O - | tar xvzf -
cd live
./genMakefiles linux
sudo make CPPFLAGS=-DALLOW_RTSP_SERVER_PORT_REUSE=1 install
cmake . && make
If it fails you will need to install liblivemedia-dev liblog4cpp5-dev.
If it still not work you will need to read Makefile.
make install
cpack .
dpkg -i v4l2rtspserver*.deb
This RTSP server works using Raspberry Pi camera with :
-
the unofficial V4L2 driver for the Raspberry Pi Camera Module https://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=14
sudo uv4l --driver raspicam --auto-video_nr --encoding h264
-
the official V4L2 driver bcm2835-v4l2
sudo modprobe -v bcm2835-v4l2
For camera providing uncompress format v4l2tools can compress the video to an intermediate virtual V4L2 device v4l2loopback:
/dev/video0 (camera device)-> v4l2compress_h264 -> /dev/video10 (v4l2loopback device) -> v4l2rtspserver
This workflow could be set using :
modprobe v4l2loopback video_nr=10
v4l2compress_h264 /dev/video0 /dev/video10 &
v4l2rtspserver /dev/video10 &
./v4l2rtspserver [-v[v]] [-Q queueSize] [-O file] \
[-I interface] [-P RTSP port] [-p RTSP/HTTP port] [-m multicast url] [-u unicast url] [-M multicast addr] [-c] [-t timeout] \
[-r] [-s] [-W width] [-H height] [-F fps] [device1] [device2]
-v : verbose
-vv : very verbose
-Q length: Number of frame queue (default 10)
-O output: Copy captured frame to a file or a V4L2 device
RTSP options :
-I addr : RTSP interface (default autodetect)
-P port : RTSP port (default 8554)
-p port : RTSP over HTTP port (default 0)
-u url : unicast url (default unicast)
-m url : multicast url (default multicast)
-M addr : multicast group:port (default is random_address:20000)
-c : don't repeat config (default repeat config before IDR frame)
-t secs : RTCP expiration timeout (default 65)
-T : send Transport Stream instead of elementary Stream
-S secs : HTTP segment duration (enable HLS & MPEG-DASH)
V4L2 options :
-r : V4L2 capture using read interface (default use memory mapped buffers)
-w : V4L2 capture using write interface (default use memory mapped buffers)
-s : V4L2 capture using live555 mainloop (default use a separated reading thread)
-f : V4L2 capture using current capture format (-W,-H,-F are ignored)
-fformat : V4L2 capture using format (-W,-H,-F are used)
-W width : V4L2 capture width (default 640)
-H height: V4L2 capture height (default 480)
-F fps : V4L2 capture framerate (default 25)
device : V4L2 capture device (default /dev/video0)
When v4l2rtspserver is started with '-S' arguments it give access to streams through HTTP. These streams could be reveced :
* for MPEG-DASH with :
MP4Client https://..../unicast.mpd
* for HLS with :
vlc https://..../unicast.m3u8
gstreamer-launch-1.0 playbin uri=https://.../unicast.m3u8