searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享

嵌入式视频监控

2022-06-27 03:21:41
294
0

嵌入式视频监控

目前,嵌入式系统在视频监控中的应用越来越广泛。伴随着网络的强大功能,视频监控更侧重网络监控方案,要求体积小、远程化、成本低、功耗小、操作界面人性化等。本系统基于嵌入式Linux 平台上利用USB 摄像头采集视频图像,通过视频图像压缩及结合网络进行视频图像传输,使远程监控成为可能。

1 系统介绍

由于项目需求,需要将imx开发版的摄像头,作为网络摄像头,供视频监控设备远程调用,并在平台上实时展示。这种框架在视频监控的安防领域已经很成熟和规范因此我们采取主流架构和技术,这样可以容易和主流设备厂商对接,并且易于开发和扩展。开发版需要将摄像头获取的视频流封装成行业标准的视频传输调用服务,向平台提供。在开发版收到平台的视频接入指令后,可提供身份认证、权限管理、发现设备、开启视频流传输、停止视频流传输、设置视频参数等服务。

1.1 协议介绍

保证开发版视频功能的通用性,需要选择主流厂商都支持的网络视频标准。经过调研发现,关于网络视频的标准,国际上主要有ONVIF、PSIA等标准,国标主要是GB/T28181标准,还有其它地方的、企业的标准,各有差异,监控行业的标准丰富度可谓全面。

PSIA协议是由PSIA实体安防互通联盟制定的一个可以使视频管理系统与各种网络媒体设备实现标准化通信的接口。为的是让实体安防系统的硬件和软件平台有一种标准化的接口,使基于IP网络的不同安防系统具有兼容性。PSIA实体安防互通联盟成立于2008年8月。

在PSIA协议不久之后,2008年11月,由安讯士联合博世及索尼公司三方携手共同成立的国际开放型网络视频产品标准网络接口开发论坛,取名为ONVIF(开放型网络视频接口论坛),在论坛上公布了ONVIF第一版规范——ONVIF核心规范1.0。ONVIF标准致力于通过全球性的开放接口标准来推进网络视频在安防市场的应用,这一接口标准将确保不同厂商生产的网络视频产品具有互通性。

ONVIF标准发布后得到了很多企业很商家的认可,加入到该组织中,目前松下、三星、思科、西门子、TI等著名品牌都在其中,国内海康威视、浙江大华也是ONVIF论坛的高级会员。从目前情况看来,早于ONVIF成立的PSIA,现在已基本销声匿迹,监控摄像机中,难觅其身影。可以说,PSIA已经脱离了安防监控标准化的中心地带,日渐边缘化,与ONVIF一争高下的局面已不复存在。

国内标准GB/T28181是目前国内的安防监控标准中,唯一能与ONVIF抗争的规范。于2012年6月1日,由公安部颁布,全称《安全防范视频监控联网系统信息传输、交换、控制技术要求》。但,GB/T28181作为国标,却也存在多个缺陷,如协议复杂、过程繁琐,应用上也是颇不方便,而公安部为其开发的检验程序,更如天书般复杂,加上GB/ T28181仅是大陆的标准,注定其难以与ONVIF相抗衡,全球化更是难上加难。

因此选择在开发版上移植实现ONVIF协议。

1.2 onvif 协议

ONVIF标准的厂商覆盖芯片、视频前端设备、存储设备、系统平台、智能分析设备、门禁、传感设备等各个安防相关领域,IPC摄像头只是ONVIF标准里的一个分支而已。ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供。每一个支持ONVIF规范的终端设备均须提供与功能相应的Web Service。ONVIF中的其他部分比如音视频流则通过RTP/RTSP进行。

在ONVIF网络摄像头开发中,也就是包括了Web Server 和RTSP这两大部分,这两大部分的依赖不是非常大,在嵌入式设备中,可能没有足够的硬件资源来运行第三方多媒体处理库,这时需要自己来封装RTSP流媒体传输协议。可以先从Web Server 中获取到了RTSP的URL之后,然后再通过这个URL来开发RTSP,这样可以去除对Web Server的依赖,简化程序的开发。总的来说****Web Server********:****

Ø 获取IPC的基本信息(厂家信息、版本信息等);

Ø 修改IPC的系统日期、时间;

Ø 修改IPC的网络配置(IP、子网掩码等);

Ø 获取/修改IPC摄像头的各种参数(视频分辨率、码率、帧率、OSD,云台控制等);

1.3 rtsp 协议

实时流协议有:

Ø RTP:实时传输协议(Real-time Transport Protocol)

Ø RTSP:实时流协议(Real Time Streaming Protocol,RTSP)

Ø RTCP:实时传输控制协议 (Real Time Control Protocol,RTCP)

 

RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。而前面提到的允许同时多个串流需求控制(Multicast),除了可以降低服务器端的网络用量,更进而支持多方视讯会议(Video Conference)。因为与HTTP1.1的运作方式相似,所以代理服务器(Proxy)的快取功能(Cache)也同样适用于RTSP,并因RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。

视频传输项目中常用的支持rtsp协议的库有ffmpeg、vlc、live555等。根据项目的实际需求,以及移植的工作量,目前考虑live555实现rtsp的推流服务器。数据流示意图如下:

​ 数据流示意图

实时流媒体模块包括usb摄像头原始数据采集、x264编码、视频流推流,其中usb摄像头原始数据采集主要使用opencv开源库来调用linux系统的v4l2模块完成原始数据采集,而为完成视频流的高速、稳定传输,每一帧图像在网络中传输需要编码,压缩原始数据,这里的压缩算法也是采用视频传输领域的通用开源库x264;在将压缩后的视频流作为流服务提供给订阅者,此处的推流工作采用live555库来完成。

2 移植

在开发版上实现视频监控,需要移植所需的库文件及相关应用程序,库文件包括openssl、x264、live555等,openssl库是用来作onvif和live555的登陆认证;x264库是用来实现将usb摄象头的yuv数据压缩为h264;live555库是用来实现rtsp的推流服务。下面详细说明移植过程。

2.1 交叉编译工具链

安装开发版对应的交叉编译工具链,我下载的是linaro的5.3,对应的下载链接为gcc-linaro.tar.xz

交叉编译工具链的安装方法,解压缩文件到工作目录,将其中的bin文件目录的决定路径添加到环境变量中即可。

我的是:

ubuntu-sis# export PATH=$PATH:/home/sis/software/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabi/bin

2.2 移植openssl

下载openssl

解压缩,生成配置文件

ubuntu-sis# tar xvf openssl-1.0.2r.tar.gz

ubuntu-sis# cd openssl-1.0.2r

ubuntu-sis# mkdir build

ubuntu-sis# ./config --prefix=/home/zjy/workStation/rtsp/crossGcc/openssl-1.0.2r/build no-asm -shared

修改Makefile,将CC修改为我们设置的交叉编译工具链,删除所有-m64 字符

CC = arm-linux-gnueabi-gcc

执行make;make install

在build中会生成我们需要的文件。

2.3 移植x264

下载x264

解压缩,更具配置生成makefile文件,并make

ubuntu-sis# tar xvf x264.tar.gz;cd x264;mkdir build

ubuntu-sis# ./configure --prefix=./build --enable-shared --enable-static --disable-win32thread --disable-asm --host=arm-linux --cross-prefix=arm-linux-gnueabi-

ubuntu-sis# make

ubuntu-sis# make install

具体需要配置那些选项,可以参考configure --help中的说明。

在build中会生成我们需要的文件。

 

2.4 移植live555

下载live555

解压缩文件,f复制配置文件

ubuntu-sis# tar xvf live555xxxx.tar.gz

ubuntu-sis# cd live555

ubuntu-sis# cp config.armlinux config.mylinux

修改我们自己的配置文件,主要修改交叉编译工具连+openssl库及头文件路径。

以下是我修改后的:

  1 CROSS_COMPILE?=         arm-linux-gnueabi-

  2 COMPILE_OPTS =          $(INCLUDES) -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET    _BITS=64 -I/home/zjy/workStation/rtsp/crossGcc/openssl-1.0.2r/build/include -L/home/zjy/workStation/rtsp/crossGcc/openssl-1.0.2r/build/lib

  3 C =                     c

  4 C_COMPILER =            $(CROSS_COMPILE)gcc

  5 C_FLAGS =               $(COMPILE_OPTS)

  6 CPP =                   cpp

  7 CPLUSPLUS_COMPILER =    $(CROSS_COMPILE)g++

  8 CPLUSPLUS_FLAGS =       $(COMPILE_OPTS) -Wall -DBSD=1

  9 OBJ =                   o

 10 LINK =                  $(CROSS_COMPILE)g++ -o

 11 LINK_OPTS =             

 12 CONSOLE_LINK_OPTS =     $(LINK_OPTS)

 13 LIBRARY_LINK =          $(CROSS_COMPILE)ar cr 

 14 LIBRARY_LINK_OPTS =     $(LINK_OPTS)

 15 LIB_SUFFIX =                    a

 16 LIBS_FOR_CONSOLE_APPLICATION = -lssl -lcrypto

 17 LIBS_FOR_GUI_APPLICATION =

 18 EXE =

 19 PREFIX = /home/zjy/workStation/rtsp/crossGcc/live555/build

 

注意,19行是我自行添加的,目的是将make install后的生成路径指定,但是这里并没有覆盖makefile中的PREFIX变量,只是在后面添加了一个新的同名变量,所以还需要在gemakefile后手动将所有子目录中makefile的PREFIX默认删除。

生成makefile

ubuntu-sis# ./genMakefiles mylinux

此时会生成所有makefile,需要手动将所有Makefile中的PREFIX默认变量删除

最后make;make install

在build中会生成我们需要的文件。

2.6 复制到开发版

如果采用动态库的开发方式,则需要将动态库复制到开发版的/usr/local/lib目录;如果是使用静态库开发,则不需要复制。

3 视频监控开发

3.1 rtsp协议的视频服务器

在移植live555的过程中,make后会在mediaServer目录生成live555MediaServer文件,该文件拷贝到开发版,可直接实现rtsp的视频服务器功能。

3.2 v4l2+rtsp推流

此处采用某网友的github,其实现了使了v4l2采集usb摄象头数据,并使用live555推流。

github

该项目本人亲自验证过了,编译通过,并且可以使用,但是,但是使用vlc播放其rtsp卡卡卡的,是在不能忍受,猜测其问题出现在使用v4l2将数据写入到fifo,live555服务fifo的数据,就在这个fifo中性能下降了。后续我会继续测试用修改。最后会将优化后的完整项目上传到自己的github,并给出代码解读说明,敬请期待。

代码已经更新,请访问如下链接

https://blog.csdn.net/mr_zhaojy/article/details/104549944

————————————————

版权声明:本文为CSDN博主「-黑色幽默-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/mr_zhaojy/article/details/104468080

0条评论
0 / 1000