作为一个IPC(IP Camera),其最重要的一个功能就是通过网络来进行视频的实时预览。而这种网络实时又分为两类:一类是局域网环境下的预览,另一类是互联网环境下的网络预览。从技术难度上说局域网环境下的网络预览难度比较小,主要是因为网络环境简单,而且网络比较稳定。 在安防监控领域,厂商们基本都有自己的私有协议来实现网络视频传输。但是也有一个行业的标准ONVIF协议,其主要包括基于Web service的信令控制和基于RTSP协议的视频传输两部分。今天我们就来在NanoPi上测试一下开源的RTSP库live555。
一、准备工作
1.1 下载live555源码
walker@nanopi2:~/opensource$ wget http://www.live555.com/liveMedia/public/live.2016.01.16.tar.gz
converted 'http://www.live555.com/liveMedia/public/live.2016.01.16.tar.gz' (ANSI_X3.4-1968) -> 'http://www.live555.com/liveMedia/public/live.2016.01.16.tar.gz' (UTF-8)
--2016-01-19 22:21:14-- http://www.live555.com/liveMedia/public/live.2016.01.16.tar.gz
Resolving www.live555.com (www.live555.com)... 4.79.217.242
Connecting to www.live555.com (www.live555.com)|4.79.217.242|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 630314 (616K) [application/x-gzip]
Saving to: 'live.2016.01.16.tar.gz'
live.2016.01.16.tar.gz 100%[=====================================================================================>] 615.54K 35.0KB/s in 13s
2016-01-19 22:21:27 (48.9 KB/s) - 'live.2016.01.16.tar.gz' saved [630314/630314]
1.2 准备一个H.264的视频文件
wget http://www.live555.com/liveMedia/public/264/slamtv60.264
1.3 准备一个支持RTSP协议的播放器
下载链接:http://get.videolan.org/vlc/2.2.1/win32/vlc-2.2.1-win32.exe
二、编译
2.1 解压
tar xzvf live.2016.01.16.tar.gz
解压后会在当前目录下出现一个live目录
2.2 编译(很简单,直接make)
进入解压出来的live目录后输入以下命令:
./genMakefiles linux
上面这句会生成Makefile
接着输入以下命令来启动编译:
make
由于NanoPi2的性能,这个编译过程持续了2分多钟:
real 2m41.603s
user 2m20.404s
sys 0m16.316s
当然我们可以通过给make 传入-j参数来加速编译(其实是多线程编译),j后面的参数不要超过cpu的核数哦。
这次我传入-j3试一下:
real 1m31.069s
user 3m44.072s
sys 0m27.100s
以上结果显示果然快乐一分多钟
三、测试
3.1 将刚才下载的文件拷贝到live目录下的mediaServer/目录中
walker@nanopi2:~/opensource/live$ cp ../slamtv60.264 mediaServer/
3.2 启动live555MediaServer服务器
walker@nanopi2:~/opensource/live$ cd mediaServer/
walker@nanopi2:~/opensource/live/mediaServer$ ./live555MediaServer
LIVE555 Media Server
version 0.88 (LIVE555 Streaming Media library version 2016.01.16).
Play streams from this server using the URL
rtsp://192.168.199.244:8554/
where is a file present in the current directory.
Each file's type is inferred from its name suffix:
".264" => a H.264 Video Elementary Stream file
".265" => a H.265 Video Elementary Stream file
".aac" => an AAC Audio (ADTS format) file
".ac3" => an AC-3 Audio file
".amr" => an AMR Audio file
".dv" => a DV Video file
".m4e" => a MPEG-4 Video Elementary Stream file
".mkv" => a Matroska audio+video+(optional)subtitles file
".mp3" => a MPEG-1 or 2 Audio file
".mpg" => a MPEG-1 or 2 Program Stream (audio+video) file
".ogg" or ".ogv" or ".opus" => an Ogg audio and/or video file
".ts" => a MPEG Transport Stream file
(a ".tsx" index file - if present - provides server 'trick play' support)
".vob" => a VOB (MPEG-2 video with AC-3 audio) file
".wav" => a WAV Audio file
".webm" => a WebM audio(Vorbis)+video(VP8) file
See http://www.live555.com/mediaServer/ for additional documentation.
(We use port 8000 for optional RTSP-over-HTTP tunneling, or for HTTP live streaming (for indexed Transport Stream files only).)
如果出现了以上的打印,说明服务已经跑起来了。
3.3 用VLC来测试RTSP视频播放
点击播放按钮,就可以看到RTSP的流媒体播放了。
四、总结
4.1 其实live555支持的文件不止是h.264的原始码流(ES)流文件,大家也可以测试下其他live555支持的文件;
4.2 作为一个优秀的开源RTSP库,live555的源代码是很值得学习的。尤其是那些希望提升自己C++面向对象编程能力的同学们更应该读一读。
4.3 live555的流媒体传输也分两部分:RTSP协议控制传输的信令(要播放的流、开始播放、暂停播放、停止播放等)、RTP协议才是真正的传输视频流的协议、还有个RTCP协议负责视频流传输过程中的流量控制。