1.视频监控方案
(1)方案一:简单低成本方案
摄像头在A地,要在B地使用终端设备观看,这其实就是视频监控。
如果A地和B地相隔很近,摄像头和终端设备可以通过局域网连接。譬如大疆无人机上有个摄像头,同时也有一个WiFi,其可以作为一个WiFi热点,手机连上该热点后,可以控制无人机,也可以观看无人机摄像头拍摄的图像。
这里的局域网有三种形式:
(1)无人机上的WiFi和手机上的WiFi连接上同一个路由器发出的WiFi信号。
(2)无人机上的WiFi作为一个热点,手机直接连接该热点。
(3)手机的WiFi作为一个热点,无人机直接连接该热点。
左边一般是一块ARM的板子,上面连了一个摄像头;右边一般是手机或电脑,用来观看摄像头的数据。
这种形式下,我们需要写两个程序:
(1)在连接摄像头的ARM板子上运行的程序:它是一个进程,里面有两个线程,一个线程是读取摄像头的数据,另一个线程则是一个服务器,一直等待客户端的网络连接。
(2)在手机或电脑上运行的程序:该程序也是由两部分组成,一部分是通过网络连接ARM板子上的服务器线程,另一部分是将获取到的数据显示在窗口中。
arm端也可以使用现成的程序mjpg-streamer。
mjpg-streamer是一个非常好的开源的学习代码,它可以运行在arm板子上,采集摄像头数据,并将其发到手机等终端上。mjpg-streamer非常适合初学者学习视频监控的相关知识。但它不支持声音的传输,并且不再维护了,仅仅只能当做学习使用。
当然,学习完其精华后,可以自己加上声音的传输代码,在一些对成本要求比较高的智能家居或玩具上可以使用这种方案。
(2)方案二 - 使用流媒体 (主流方案)
以前看视频的方式:先下载一个很大的视频和音频文件,然后再播放;现在可以一边下载一边播放,这就是流媒体。使用流媒体的情况,A地和B地可以相隔非常远。
流媒体一般用于直播和在线视频网站上。
这种情况下,我们需要编写三个程序:
(1)在ARM板子上运行的程序:它一边读取摄像头的数据,一边把数据推送到服务器中。
(2)在服务器中运行的程序:这个程序就是流媒体服务器程序,它接收ARM板发过来的数据,并把数据转换格式后发送给手机等客户端。
(3)在手机等客户端运行的程序:负责从服务器中拉流,并将视频数据显示出来。
推流和拉力会的协议:
RTMP:在服务器中有一个视频文件,播放端可以随意拖动进度条来播放视频。因为它本质上是一种TCP连接,所以很容易被防火墙拦截。
基于TCP容易被防火墙拦截的缺点,Adobe又开发了Http-flv协议。
Http-FLV:这种协议把视频数据分成一个个很小的数据包,播放器边下载到本地,边播放来实现视频显示。
虽然视频文件被分成了很小的数据包,但因为是需要先下载到本地再播放,所以下载的文件很容被盗取。即保存在本地的文件没有任何私密性可言。
上面的两种协议都是Adobe公司的产品,这两种协议的延时都非常小,也非常优秀,经常用来做直播。
虽然以上两种协议很优秀,但其对应的播放器却不太好用,经常奔溃,很多浏览器已经默认不支持Adobe Flash Player了。所以苹果公司又自己开发了一套新的协议HLS。
HLS:在服务器中把视频文件切割成一个一个的ts文件,客户端需要一个一个下载到本地再播放,并且维护了一个播放列表,这种协非常延时,有5到20多秒的延时,也基本半死不活。
总上所述,直播系统的推流和拉流协议用的比较多的是RTMP或HTTP-FLV,又因为目前市面上有大量的flv格式文件,HTTP-FLV成为了主流的直播协议。
直播的流程:
FFmpeg可以运行在ARM板子上,Nginx是开源的服务器。
转载:https://blog.csdn.net/qq_29083043/article/details/116544439