1 背景
USB摄像头与网络摄像头相比,可选择范围广、种类多、成本低,但是实际使用时需要通过rtsp流来访问,起到直播的效果,因此在摄像头采集终端上构建rtsp流媒体服务器,将USB摄像头数据转化为rtsp,可以多个客户端访问,在做相关调研时,找到有三种实现方式,分别是ffmpeg(ffserver)、vlc以及live555,接下来对这三种方式的实现方法做具体介绍,最后对三种方式的优缺点进行一个比较,读者可根据它们的特点选择合适的服务器,以下服务器搭建的过程均是在ubuntu 16.04上实现的。
2 ffserver
2.1 基本原理
有几个关键概念了解一下
ffserver,负责响应客户端的流媒体请求,把流媒体数据发送给客户端。
ffserver.conf,ffserver启动时的配置文件,在这个文件中主要是对网络协议,缓存文件feed1.ffm和要发送的流媒体文件的格式参数做具体的设定。
feed1.ffm,可以看成是一个流媒体数据的缓存文件,ffserver启动后会自动生成。ffmpeg把转码好的数据发送给ffserver,如果没有客户端连接请求,ffserver把数据缓存到该文件中。
ffmpeg,负责媒体文件的转码工作,把你服务器上的源媒体文件转换成要发送出去的流媒体文件。
关于ffserver的介绍,可参考wiki介绍,如图所示为ffserver的原理
大致流程为:通过ffmpeg将usb摄像头数据推送到ffserver服务器,终端设备通过rtsp地址访问,达到远程访问的效果
2.2 安装方法
很简单,只需要一句指令即可
sudo apt install ffmpeg libx264-dev
2.3 修改配置文件
在终端中打开配置文件
sudo gedit /etc/ffserver.conf
然后修改为以下内容
HTTPPort 8090 #绑定端口号
HTTPBindAddress 0.0.0.0 #绑定IP
MaxHTTPConnections 2000 #最大HTTP连接数
MaxClients 1000 #最大客户端连接数
MaxBandwidth 1000 #最大带宽
CustomLog - #日志文件,- 为直接打印
<Feed feed1.ffm> #feed:每一个输入都建立一个feed
File /tmp/feed1.ffm #feed缓存文件位置和名称
FileMaxSize 10M #缓存文件最大值
ACL allow 127.0.0.1 #允许写入feed的IP
ACL allow 192.168.0.0 192.168.255.255 #允许写入feed的IP范围
</Feed>
RTSPPort 8554 #rtsp端口号
RTSPBindAddress 0.0.0.0 #rtsp IP地址
<Stream live1.h264> #
Format rtp #视频流的格式
Feed feed1.ffm #视频流的种子来源
VideoCodec libx264 #
VideoFrameRate 24 #视频帧率
VideoBitRate 128 #视频比特率
VideoBufferSize 100 #视频缓冲区大小
VideoSize 640x480 #视频帧大小
VideoQMin 1 #
VideoQMax 31 #
NoAudio #无音频
AVPresetVideo default
AVPresetVideo baseline
AVOptionVideo flags +global_header
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
<Stream stat.html>
Format status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>
关于ffserver.conf的具体介绍,可参考官方给的配置文件说明,如果有多个USB摄像头,参考feed1的写法,再写一个缓存文件即可
2.4 启动ffserver服务
直接在终端运行
ffserver
2.5 转发rtsp流
ffmpeg -f v4l2 -i /dev/video1 -s 640x480 -r 24 -vcodec libx264 -an http://127.0.0.1:8090/feed1.ffm
注意:其中/dev/video1表示USB摄像头对应的名称,要根据自己的设备情况对应更改
2.6 客户端读取
在另外一台终端设备上,如windows的电脑上,用VLC软件,打开网络串流,输入如下rtsp地址,即可打开摄像头
rtsp://192.168.xx.xx:8554/live1.h264
其中,要将上边的IP地址改为服务器的地址
3 vlc
3.1 基本原理
此处用的vlc构建服务器,不是很多博文介绍的,直接在vlc软件中进行设置,而是在命令行中使用命令的方式,这样没必要在服务器端进行显示,只需要在客户端显示即可。
3.2 安装方法
sudo apt-get install vlc
3.3 转流方法
cvlc -vvv v4l2:///dev/video1 --sout '#transcode{vcodec=h264,vb=800,acodec=mp4a}:rtp{sdp=rtsp://:8554/live.ts}' -I dummy
其中:
v4l2:// - Video4Linux is the interface to webcams on Linux
/dev/video1 - device number assigned to webcam by Linux
vcodec=h264 video codec
vb=800 - 800 kb/s video bit rate
acodec=mp4a
sdp=rtsp://:8554/ - URL/port advertised by RTSP
3.4 客户端读取
同样的,可在windows电脑上的VLC软件中,输入如下rtsp地址打开摄像头,注意将IP地址改为服务器的地址
rtsp://192.168.xx.xx:8554/live.ts
4 live555
4.1 下载live555
在官网下载源码souce code,保存到指定文件夹,解压
tar xvzf live.20xx.tar.gz
sudo chmod -R 777 live
cd live
sudo ./genMakefiles linux-gdb
sudo make
(未完待续……)