当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]Linux嵌入式视频直播监控系统

摘  要:本文以嵌入式处理器和Linux为开发平台,利用嵌入式软件开发技术,Linux下图像采集技术,MPEG-4压缩技术,RTP传输技术,Linux帧缓冲机制等设计并实现了嵌入式视频直播监控系统
关键词: 视频监控 ,MPEG-4 ,RTP/RTCP ,帧缓冲

AbstractThis paper described how to design and complete an Embedded Video Living Monitoring System, which depended on embedded software developing, Linux graph collection, MPEG-4 compression, RTP translation, Linux framebuffer and use embedded CPU and Linux as developing platform.   

Key words: Video Monitoring,MPEG-4,RTP/RTCP,framebuffer

1 引言

近年来,随着网络带宽,计算机处理能力的极大提高和人们安全防范观念的加强,视频监控领域进入了高速发展的数字化的网络时代。但嵌入式处理器具有低功耗、体积小、经济、稳定的特点;Linux作为一个开源软件,具有成本低廉的优势,同时兼具安全、稳定的特点。因此,以嵌入式处理器作为硬件平台,以Linux作为软件平台的视频监控系统能够结合两者的优点,必将成为未来的发展方向。本文介绍了一种Linux嵌入式视频直播监控系统的设计和实现方案。

2 系统概述

图 1 系统结构图

系统采用服务器/客户机架构,分别使用Intel Xscale PXA270、PXA255作为服务器、客户机硬件平台,并基于Linux (kernel version:2.6.12)操作系统进行开发。服务器采集视频,压缩后通过局域网传递给客户机;客户机接收数据,解压缩后播放。

服务器通过USB摄像头采集YUV格式视频,然后进行MPEG-4压缩,将压缩后的MPEG-4帧进行RTP封装,并通过RTP协议进行传输。客户机接收RTP数据包,将数据组成一帧,然后进行MPEG-4解压缩,得到YUV格式视频。然而计算机只能显示RGB格式视频,因此通过图像格式转换成RGB格式。最后,利用Linux下的帧缓冲机制进行写屏,从而实现了视频回放。

3系统软件设计与实现

3.1V4L视频采集

Video4Linux(简称V4L)是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供一系列接口函数,这些视频设备包括现今市场上流行的TV卡、视频捕捉卡和USB摄像头等。对于USB口摄像头,其驱动程序中需要提供基本的I/O操作接口函数open,read,write,close的实现、对中断的处理实现、内存映射功能以及对I/O通道的控制接口函数ioctl的实现等,并把它们定义在结构体file_operations中。这样当应用程序对设备文件进行诸如open,close,read,write等系统调用操作时,Linux内核将通过file_operations结构访问驱动程序提供的函数。

具体采集工作通过操作ioctl和mmap系统调用进行实现。ioctl实际上是input/output control的缩写。ioctl系统调用的功能就是通过打开的文件描述符对各种文件尤其是字符设备文件进行控制,完成特定的I/O操作。在本系统中,使用ioctl(fd, VIDIOCGCAP, &cap)以获取摄像头基本信息;使用ioctl(fd, VIDIOCGMBUF, *mbuf)以获取摄像头缓冲区信息;使用ioctl(fd, VIDIOCMCAPTURE, &mm)进行图像捕捉;使用ioctl(fd, VIDIOCSYNC, &frame)等待捕捉完该帧图像。mmap调用的功能是实现内存映射,即将指定文件或对象的一部分映射到内存中去。这样可以通过访问特定的内存区域来直接对文件或对象进行存取。与read和write。调用相比,这种I/O方式的效率要高得多。

3.2MPEG-4压缩和解压缩

MPEG是Moving Pictures Experts Group(运动图像专家组)的缩写。MPEG-4由MPEG制定,并于1999年2月正式成为ISO/IEC 14496国际标准。MPEG-4的压缩方法不同于MPEG1/2或H.263+系列标准,它是基于对象的多媒体数据压缩编码国际标准,定义的是一种框架、一种格式,而不是一种具体的算法。它在多媒体环境下提供的基于不同对象的处理方法对自然或合成的音频、视频进行压缩编码,由一系列支持在该应用领域下的工具组成,能够针对不同的应用组合使用不同的编码工具,提供如形状编码、运动估计和运动补偿编码、纹理编码和容错编码等技术。

本系统借助于MPEG-4开源库Xvidcore作为编/解码库。具体选用版本1.1.2。Xvidcore中所有的编码工作都是通过编码函数xvid_encore执行的,xvide_encore函数定义如下:

int xvid_encore(void * handle,  int opt, void * paraml, void * param2);

其中opt为编码所要做的操作,opt有以下三种操作:(1)XVID_ENC_CREATE:创建一个新的编码器,则param1为XVID_ENC_PARAM, handle为新编码的句柄;(2)XVID_ENC_ENCODE:编码一帧,则param1为XVID_ENC_FRAME, param2为XVID_ ENC_ STATS或NULL;(3)XVID_DEC_DESTROY:编码结束,不返回任何句柄。

Xvidcore的所有解码工作都是由xvid_decore实现的,xvid_decore函数定义如下:

int xvid_decore(void * handle,  int opt,  void * param1, void * param2);   

其中opt为解码所要做的操作,opt有以下三种操作:(1)XVID_DEC_CREATE:创建一个新的解码器,则param1为XVID_DEC_PARAM,handle为新编码的句柄;(2)XVID_DEC_DECODE: 解码一帧,则param1为XVID_ENC_FRAME;(3)XVID_DEC_DESTROY: 关掉解码器,不返回任何句柄。

系统通过采集模块采集得到YUV420格式的视频帧存放在缓冲区中,Xvidcore取出该缓冲区存放的原始帧数据,调用xvid_encore函数进行编码。接收端调用xvid_decore函数对收到的帧进行解码。从而实现了MPEG-4的压缩和解压缩。

3.3RTP传输

实时传输协议(Real-time Transport Protocol,RTP)是在 Internet 上处理多媒体数据流的一种网络协议,利用它能够在一对一(unicast,单播)或者一对多(multicast,多播)的网络环境中实现传流媒体数据的实时传输。我们采用开源代码Jrtplib提供的RTP协议栈。最新的Jrtplib对RFC3550的实现进行了封装,使用C++语言开发,能够在多种平台如Linux和Windows下运行。

在网络带宽比较低的情况下,数据丢帧现象比较严重,这对于图像质量有很大的影响。我们采用拆帧以后再发送的方法,来降低丢帧率。接收端收到数据后,再把属于同一视频帧的数据组合起来。由于目前常用网络是802.3的10Mb/s系统,而该系统最大有效载荷为1500字节,因此设置1400为RTP包大小上限。网络发送接收程序流程图如图2所示。

图2 网络发送接收程序流程图

       简单的说,发送端发送RTP包到Client端,发送的时候是分批以数据包的形式发送到Client,就是说发送一个RTP包需要几次数据包发送来完成。发送成功以后发送下一个数据包,通过调用Jrtplib中函数SendPacket()实现;

接收端依次循环调用函数GetNextPacket()来接收某一RTP包的数据,数据包到来不是按顺序到来的,完全接收到RTP包所用的数据包以后,根据时间戳对所接收的数据包重新排序重新生成最初的RTP包。接收成功后,调用函数GotoNextSourceWithData()开始接收下一个RTP包。

3.4写framebuffer进行播放

framebuffer设备是图形硬件的抽象概念,意指某些视频硬件的帧缓冲,使得应用软件可以通过定义好的接口访问图形硬件。framebuffer将显示的象素点看成是内存的映射,屏幕上每一个点对应framebuffer内存中相应的单元。帧缓冲设备为标准字符设备,主设备号为29,次设备号从0到31,分别对应/dev/fb0-/dev/fb31,默认为/dev/fb0。通过/dev/fb0,应用程序主要完成以下几种操作:

1. I/O控制(ioctl)操作:对于帧缓冲设备,对设备文件的ioctl操作可读取(FBIOGET_SCREElVINFO,FBIOGET_SCREElVINFO)和设置(FBIOPUT_VSCREElVINFO, FBIOPUT_FSCREElVINFO)显示设备及屏幕的参数,如分辨率、显示颜色数、屏幕大小等。

    2. 映射(mmap)操作:工作在保护模式的应用程序有自己的虚拟地址空间,但不能直接访问物理缓冲区地址,为此可以使用mmap函数将文件的内容映射到用户空间。之后用户就可以通过读写这段虚拟地址访问屏幕缓冲区在屏幕上绘图了。

4结束语

本文提出了一种Linux视频直播监控系统的设计和实现方案。经过对系统的测试表明:当客户端向服务器请求现场音视频流时,服务器端立刻向通过客户端发送音视频流,客户端软件实时接收、实时解码、实时播放,都能流畅的播放出清晰画面,无明显抖动和延时。服务器和客户机可以稳定运行。服务器稳定后,CPU利用率达60%-70%,客户机稳定后,CPU利用率达70%-80%。系统稳定后,占用带宽约400kbit/s-500kbit/s,播放帧率约14f/s,能够满足一般情况下视频监控要求。

本论文的新见解主要体现在:

(1)提出了一套简单易行的流媒体直播系统解决方案,并将其应用于嵌入式平台。

(2)传输过程中对RTP数据包的大小进行控制,大大降低了丢帧率。

参考文献:

[1]           陈章龙等. 嵌入式技术与系统——Intel XScale结构与开发. [M]北京 北京航空航天大学出版社,2004

[2]           鲁比尼. Linux设备驱动程序(第二版) [M] 北京:电力出版社,2002

[3]           钟玉琢. 流媒体和视频服务器. [M] 北京:清华大学出版社.2003. 6

[4]           吴昱军. 媒体实时传输协议及其在视频传输系统中的运用.微计算机信息.2003.19

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

助力科研与检测新突破 上海2024年5月15日 /美通社/ -- 全球知名的科学仪器和服务提供商珀金埃尔默公司今日在上海举办了主题为"创新不止,探索无界"的新品发布会,集中展示了其在分析仪器领域的最...

关键字: 质谱仪 BSP DSC 气相色谱

上海2024年5月16日 /美通社/ -- 2024年5月10日至5月13日,富士胶片(中国)投资有限公司携旗下影像产品创新力作亮相北京P&E 2024。在数码相机展览区域,全新制定的集团使命"为世界绽...

关键字: 富士 数码相机 影像 BSP

贝克曼库尔特目前已成为MeMed Key免疫分析平台和MeMed BV检测技术的授权经销商 在原有合作的基础上,继续开发适用于贝克曼库尔特免疫分析仪的MeMed BV检测 加州布瑞亚和以色列海法2024年5月16日...

关键字: BSP IO 检测技术 免疫分析仪

英国英泰力能的燃料电池是可产业化的产品解决方案 英国首个专为乘用车市场开发的燃料电池系统 在 157kW 功率下,此燃料电池比乘用车的其他发动机更为强大 &...

关键字: ENERGY INTELLIGENT 氢燃料电池 BSP

深爱人才,共赴"芯"程 深圳2024年5月15日 /美通社/ -- 5月11日,深圳国资国企"博士人才荟"半导体与集成电路产业专场活动在深圳市重投天科半导体有限公司(简...

关键字: 半导体 集成电路产业 BSP 人工智能

武汉2024年5月15日 /美通社/ -- 北京时间4月26日-5月4日,2024 VEX 机器人世界锦标赛于美国得克萨斯州达拉斯市举办。本届 VEX 世锦赛为期九天,设有 VIQRC 小学组/初中组、V5RC 初中组/...

关键字: 机器人 BSP RC POWERED

上海2024年5月15日 /美通社/ -- 由生成式人工智能(AI)驱动的临床阶段生物医药科技公司英矽智能宣布,与复星医药(600196.SH;02196.HK)合作开发的潜在"全球首创"候选药物IS...

关键字: ISM BSP PC 人工智能

上海2024年5月13日 /美通社/ -- 5月8日,浦东新区国资委组织陆家嘴集团等9家区属企业与立邦中国召开合作交流会,旨在贯彻落实浦东新区区委、区政府工作要求,进一步放大进博会溢出带动效应,持续扩大区属企业与进博会重...

关键字: BSP 数字化 自动化立体仓库 智慧园区

上海2024年5月13日 /美通社/ -- 在数字化时代,高效的税务管理和ERP系统成为企业发展的关键。为了满足这一需求商应信息科技与Exact Software 易科软件就金四全电票税系统与ERP系统集成及商务合作建立...

关键字: AC 软件 BSP 数字化

北京2024年5月13日 /美通社/ -- 5月11日,鲲鹏昇腾开发者大会2024期间,华为举办"昇思AI框架及大模型技术论坛",软通动力数字基础设施与集成事业部总经理谢睿受邀出席、软通动力...

关键字: AI 模型 BSP 精度
关闭
关闭