2017-08-16 22:41:44 +00:00
[![Codacy Badge ](https://api.codacy.com/project/badge/Grade/aa0c28514aa843ea9fa7da358d905871 )](https://www.codacy.com/app/michelpromonet_2643/v4l2rtspserver?utm_source=github.com& utm_medium=referral& utm_content=mpromonet/v4l2rtspserver& utm_campaign=badger)
2016-05-18 17:09:47 +00:00
[![Build status ](https://travis-ci.org/mpromonet/v4l2rtspserver.png )](https://travis-ci.org/mpromonet/v4l2rtspserver)
2015-03-25 21:46:11 +00:00
[![Coverity Scan Build Status ](https://scan.coverity.com/projects/4644/badge.svg )](https://scan.coverity.com/projects/4644)
2016-05-18 17:09:47 +00:00
[![Coverage Status ](https://coveralls.io/repos/github/mpromonet/v4l2rtspserver/badge.svg?branch=master )](https://coveralls.io/github/mpromonet/v4l2rtspserver?branch=master)
2016-01-31 10:11:25 +00:00
2017-05-13 20:40:29 +00:00
[![Release ](https://img.shields.io/github/release/mpromonet/v4l2rtspserver.svg )](https://github.com/mpromonet/v4l2rtspserver/releases/latest)
[![Download ](https://img.shields.io/github/downloads/mpromonet/v4l2rtspserver/total.svg )](https://github.com/mpromonet/v4l2rtspserver/releases/latest)
2014-09-12 22:51:38 +00:00
2016-05-18 17:09:47 +00:00
v4l2rtspserver
2013-11-09 23:08:44 +00:00
====================
2013-11-09 23:34:56 +00:00
2017-03-12 11:15:33 +00:00
This is an streamer feed from :
2017-10-15 14:55:23 +00:00
- an Video4Linux device that support H264, HEVC, JPEG, VP8 or VP9 capture.
2017-08-06 15:02:25 +00:00
- an ALSA device that support PCM S16_BE, S16_LE, S32_BE or S32_LE
2017-03-12 11:15:33 +00:00
2013-11-09 23:34:56 +00:00
The RTSP server support :
- RTP/UDP unicast
- RTP/UDP multicast
- RTP/TCP
- RTP/RTSP/HTTP
2016-05-18 17:09:47 +00:00
The HTTP server support :
- HLS
- MPEG-DASH
2014-11-22 14:35:59 +00:00
Dependencies
2014-09-13 15:33:45 +00:00
------------
2016-02-07 17:13:57 +00:00
- liblivemedia-dev [License LGPL ](http://www.live555.com/liveMedia/ ) > live.2012.01.07 (need StreamReplicator)
2016-09-18 09:07:47 +00:00
- libv4l2cpp [Unlicense ](https://github.com/mpromonet/libv4l2cpp/blob/master/LICENSE )
2017-12-09 23:34:59 +00:00
- liblog4cpp5-dev [License LGPL ](http://log4cpp.sourceforge.net/#license ) (optional)
2015-10-17 22:22:34 +00:00
2013-11-09 23:45:40 +00:00
Usage
-----
2016-06-04 17:08:46 +00:00
./v4l2rtspserver [-v[v]] [-Q queueSize] [-O file] \
2016-05-24 19:45:08 +00:00
[-I interface] [-P RTSP port] [-p RTSP/HTTP port] [-m multicast url] [-u unicast url] [-M multicast addr] [-c] [-t timeout] \
2015-09-05 16:09:13 +00:00
[-r] [-s] [-W width] [-H height] [-F fps] [device1] [device2]
2015-01-22 21:30:27 +00:00
-v : verbose
-vv : very verbose
2013-11-09 23:49:18 +00:00
-Q length: Number of frame queue (default 10)
2015-01-22 21:30:27 +00:00
-O output: Copy captured frame to a file or a V4L2 device
2017-05-14 15:00:59 +00:00
2014-08-18 21:35:23 +00:00
RTSP options :
2015-07-07 19:06:11 +00:00
-I addr : RTSP interface (default autodetect)
2013-11-09 23:49:18 +00:00
-P port : RTSP port (default 8554)
2016-05-24 19:45:08 +00:00
-p port : RTSP over HTTP port (default 0)
2017-05-14 15:00:59 +00:00
-U user:password : RTSP user and password
-R realm : use md5 password 'md5(< username > :< realm > :< password > ')
2015-08-01 16:39:46 +00:00
-u url : unicast url (default unicast)
-m url : multicast url (default multicast)
2015-09-06 18:15:19 +00:00
-M addr : multicast group:port (default is random_address:20000)
2015-08-01 16:39:46 +00:00
-c : don't repeat config (default repeat config before IDR frame)
2015-05-03 21:38:49 +00:00
-t secs : RTCP expiration timeout (default 65)
2016-05-24 19:45:08 +00:00
-T : send Transport Stream instead of elementary Stream
2017-10-15 14:55:23 +00:00
-S[secs] : HTTP segment duration (enable HLS & MPEG-DASH)
2017-05-14 15:00:59 +00:00
2014-08-18 21:35:23 +00:00
V4L2 options :
2015-03-14 16:37:26 +00:00
-r : V4L2 capture using read interface (default use memory mapped buffers)
2016-05-24 19:45:08 +00:00
-w : V4L2 capture using write interface (default use memory mapped buffers)
2015-03-14 16:37:26 +00:00
-s : V4L2 capture using live555 mainloop (default use a separated reading thread)
2016-08-13 15:36:10 +00:00
-f : V4L2 capture using current capture format (-W,-H are ignored)
-fformat : V4L2 capture using format (-W,-H are used)
2013-11-09 23:49:18 +00:00
-W width : V4L2 capture width (default 640)
-H height: V4L2 capture height (default 480)
2016-08-13 15:36:10 +00:00
-F fps : V4L2 capture framerate (default 25, 0 disable setting framerate)
2017-05-14 15:00:59 +00:00
ALSA options :
-A freq : ALSA capture frequency and channel (default 44100)
-C channels: ALSA capture channels (default 2)
-a fmt : ALSA capture audio format (default S16_BE)
2017-10-15 14:55:23 +00:00
device : V4L2 capture device and/or ALSA device (default /dev/video0)
2017-03-12 11:15:33 +00:00
2017-11-30 21:46:19 +00:00
Authentification is enable when almost one user is defined. You can configure credentials :
* using plain text password:
-U foo:bar -U admin:admin
* using md5 password:
-R myrealm -U foo:$(echo -n foo:myrealm:bar | md5sum | cut -d- -f1) -U admin:$(echo -n admin:myrealm:admin | md5sum | cut -d- -f1)
2017-05-14 15:00:59 +00:00
It is possible to compose the RTSP session is different ways :
2017-03-12 11:15:33 +00:00
* v4l2rtspserver /dev/video0 : one RTSP session with RTP video capturing V4L2 device /dev/video0
* v4l2rtspserver ,default : one RTSP session with RTP audio capturing ALSA device default
* v4l2rtspserver /dev/video0,default : one RTSP session with RTP audio and RTP video
* v4l2rtspserver /dev/video0 ,default : two RTSP sessions first one with RTP video and second one with RTP audio
* v4l2rtspserver /dev/video0 /dev/video1 : two RTSP sessions with an RTP video
2017-10-15 14:55:23 +00:00
* v4l2rtspserver /dev/video0,/dev/video0 : one RTSP session with RTP audio and RTP video (ALSA device associatd with the V4L2 device)
2015-01-25 18:31:18 +00:00
2016-09-18 09:07:47 +00:00
Build
-------
2017-01-02 15:33:59 +00:00
- Before build (optional)
2016-09-18 09:07:47 +00:00
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 http://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
- Build
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.
2017-01-02 15:33:59 +00:00
- Install (optional)
2016-09-18 09:07:47 +00:00
2017-01-02 15:33:59 +00:00
sudo make install
2016-09-18 09:07:47 +00:00
2017-01-02 15:33:59 +00:00
- Packaging (optional)
2016-09-18 09:07:47 +00:00
cpack .
Using Raspberry Pi Camera
-------------------------
2017-11-30 21:46:19 +00:00
This RTSP server works with Raspberry Pi camera using :
2017-01-02 15:32:49 +00:00
- the unofficial V4L2 driver for the Raspberry Pi Camera Module http://www.linux-projects.org/uv4l/
2016-09-18 09:07:47 +00:00
sudo uv4l --driver raspicam --auto-video_nr --encoding h264
- the official V4L2 driver bcm2835-v4l2
sudo modprobe -v bcm2835-v4l2
2017-11-30 21:46:19 +00:00
Using v4l2loopback
2016-09-18 09:07:47 +00:00
-----------------------
For camera providing uncompress format [v4l2tools ](https://github.com/mpromonet/v4l2tools ) can compress the video to an intermediate virtual V4L2 device [v4l2loopback ](https://github.com/umlaeute/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 &
2017-10-15 14:55:23 +00:00
Playing HTTP streams
2016-06-04 17:08:46 +00:00
-----------------------
2017-10-15 14:55:23 +00:00
When v4l2rtspserver is started with '-S' arguments it also give access to streams through HTTP.
These streams could be played :
2016-06-12 12:51:11 +00:00
* for MPEG-DASH with :
MP4Client http://..../unicast.mpd
2017-10-15 14:55:23 +00:00
2016-06-12 12:51:11 +00:00
* for HLS with :
vlc http://..../unicast.m3u8
gstreamer-launch-1.0 playbin uri=http://.../unicast.m3u8
2016-06-04 17:08:46 +00:00
2017-10-15 14:55:23 +00:00
It is now possible to play HLS url directly from browser :
* using Firefox installing [Native HLS addons ](https://addons.mozilla.org/en-US/firefox/addon/native_hls_playback )
* using Chrome installing [Native HLS playback ](https://chrome.google.com/webstore/detail/native-hls-playback/emnphkkblegpebimobpbekeedfgemhof )
There is also a small HTML page that use hls.js and dash.js, but dash still not work because player doesnot support MP2T format.