当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于IP网络的实时视频采集系统

摘要:随着网络和多媒体技术的广泛应用,数字网络视频得到了飞速发展。尤其在监控领域,将传统的模拟视频监控信号转换为数字视频信号,并且利用现有IP网络设计一个不受距离限制的廉价通用网络视频监控设备成为了新的热点。本文根据这方面的应用需求提出一种设计方案。本方案的实现平台是基于Intel PXA255的嵌入式硬件平台以及基于嵌入式Linux的软件平台,采用先进的MPEG-4编码标准。最终实现一个具有实时视频采集压缩及传输功能的可以直接接入以太网的网络摄像机。

    关键词:PXA255 Linux MPEG-4 网络摄像机 流媒体技术

  1 系统概述

  本方案设计的是基于IP网络的实时视频采集、处理及传输系统。整个系统在嵌入式软硬件构架上实现,无需其它设备协助就能独立完成通用目的视频应用,比如视频监控和网络视频会议。
 

  1.1 硬件系统概述

  整个系统除摄像头部分外都是在Intel PXA255评估平台Sitsang(简称Sitsang板)上面实现的。Sitsang板以PXA255为核心,配备了大量的硬件资源,其中通信接口中的以太网控制器和USB Host控制器在本系统中尤为重要。Sitsang板采用Standard Microsystems LAN91C96以太网控制器,它通过U52与网络相连,支持IEEE802.3的10Mb/s模式。Sitsang板采用Philips ISP1161作为USB Host控制器,使用USB Host接口可以使Sitsang板与视频采集摄像头相连。以太网控制器和USB Host控制器通过数据总线收发器(74LVCH32245)以及地址、数据总线驱动器(74LVCH32244)与PXA255相接。整个硬件系统如图1所示。

  

 

  1.2 软件系统概述

  整个系统软件是在嵌入式Linux基础之上构建的。Sitsang板使用的嵌入工Linux内核是在linux-2.4.19内核上打上patch-2.4.19-sitsang2这个补丁后编译而成。Sitsang板使用的文件系统是针对Flash的无缓冲机制的jffs2文件系统,文件系统中包含应用程序、模块、配置文件、图形界面和库等。Sitsang板使用的是基于Qt/Embedded的图形界面系统。视频信号的采集、压缩和传输是建立在图形界面和嵌入式Linux内核之上的。整个软件系统如图2所示。

  

 

  2 系统设计

  系统的设计目标是设计一个工作在Sitsang/Intel PXA255和嵌和试Linux平台上,内置视频Web服务器,采用MPEG-4编码标准,支持相关网络传输协议的网络摄像要。系统的设计可以被分为以下几个大部分:

  *嵌入式Linux内核的移植和编译,文件系统和图形界面系统的安装;

  *基于嵌入式Linux视频采集模块的设计;

  *视频图像压缩模块的设计;

  *基于嵌入式Linux的网络视频流服务模块的设计。

  2.1 Linux内核、图形界面系统及文件系统的安装

  2.1.1 嵌入式Linux内核的定制

  工作在Sitsang板上的嵌入式Linux内核的定制步骤与其它嵌入式平台的开发步骤相似,具有一定的通用性,所以在这里将不再详述,但是要注意两点。

  ①在解压缩Linux内核源代码后,假设源代码是linux-2.4.19.sar.gz,需要为源代码打上Sitsang板的支持补丁:%gzip-dc patch-2.4.19-sitsang2.gz|patch-p0。

  ②在使用make menuconfig定制内核时,注意要让内核支持USB接口的摄像头,具体步骤为:在制定菜单中选择Multimedia devices→Video for Linux,这使得内核被配置了Video4Linux,为视频采集设备提供了编程接口;在菜单中选择USB Support→USB Multimedia devices→USB OV511 Camera Support,这使得在内核中加入了对4采用OV511接口芯片的USB数字摄像头的驱动支持。[!--empirenews.page--]2.1.2 图形界面系统的编译与安装

 

  Sitsang板使用的是基于Qt/Embedded的图形界面系统,Qt/Embedded的编译主要分为三个步骤:

  ①编译Qt/X11,Qt/X11是运行在IBM兼容PC中标准Linux这上的,这主要为Qt/Embedded及其应用程序提供图形编译环境及仿真运行环境;

  ②编译Qt/Embedded,Qt/Embedded为在嵌入式Linux平台上运行的图形界面系统及应用程序提供一系列的函数库;

  ③编译Qtopia,通过使用Qt/X11提供的编译工具以及Qt/Embedded提供的函数库,编译出最终基于嵌入式Linux平台的图形界面系统及该环境下的应用程序。

  2.1.3 文件系统的安装

  在嵌入式平台上用作非易失存储的设备一般是Flash,因而在嵌入式平台上除了广泛使用的ext2文件系统外,还经常使用jffs2文件系统。作为日志型文件系统,jffs2直接写到非易失存储器上,而不使用如ext2的缓冲机制,这样在随时断电的情况下够保护用户的资料。直接使用mkfs.jffs2生成Sitsang板上的jffs2文件系统。

  2.2 基于嵌入式Linux视频采集模块的设计

  在嵌入式Linux的内核定制和编译阶段,已经加入了对Video4Linux模块以及OV511设备的支持,所以运行在Linux下的视频图像采集程序,可以通过Video4Linux模块提供的编译接口(API)从OV511设备中获取图像帧。

  ①加载USB及OV511设备驱动模块,同时加载Video4Linux模块。分别使用命令:modprobe usbcor、modprobe usb-uhci、modprobe vodeodev和modprobe ov511。加载后将生成视频设备文件/dev/video0,为了和Video4Linux模块相协调,使用ln-s/dev/video0/dev/video为Video4Linux模块的默认视频设备voideo与物理视频设备video0建立连接。

  ②使用Video4Linux模块提供的API进行视频采集程序的设计。Video4Linux模块的视频采集接口设备为/dev/video,采集程序打开此接口设备并扫描 它以寻找自己所需要的数据。

  这里将简要介绍一下Video4Linux模块提供的主要API函数:VIDICGCAP函数以数据结构video_capability返回视频采集设备的性能参数;VIDIOCSFBUF函数使用数据结构video_buffer设备采集设备的帧缓存参数,如果设备不支持帧缓存则此调用无效;VIDIOCGWIN函数使用数据结构video_window来设备采集窗口参数,使用参数1调用VIDIOCCAPTURE则开始视频信号采集,使用参数0则结束采集;VDIOCGCHAN函数用来查询不同的采集通道(包括音频信道),使用数据结构video_channel返回通道属性;VIDIOCSPICT函数使用数据结构video_picture来获取和设置采集图像帧的属性,比较重要的是图像帧的调色板参数;read函数读取采集通道中效的下一帧图像,所读取的图像格式和尺寸由前面介绍的VIDIOCSPICT函数和VIDIOCGWIN函数决定,这些API函数以及数据结构定义在头文件 中。

  整个视频采集模块的工作流程见图3。

  

 

  2.3 视频图像压缩模块的设计

  由视频采集模块获取的视频图像需要在以太网上传输,为了提高传输效率从而提高视频图像质量,则需要将原始的视频图像进行压缩编码。本系统采用先进的MPEG-4标准对视频图像进行压缩编码,在几种开放源代码的MPEG-4编码软件中,选择xvidcore作为本系统中视频图像压缩模块中的核心算法。xvid是一个高效的而且具有可移植性的编码软件,目前版本为xvidcore-1.0.1。xvid支持Simple Profile和Advanced Profile,支持I/PFrames、B-Frames、Interlacing和GMC,以钻石和方块模式来进行PMVFast和EPZS运行估计,是目前比较流行的MPEG-4编码软件。

  对xvidcore-1.0.1进行交叉编译比较简单,有以下主要步骤。

  ①解压缩xvidcore源代码:tar-zxvf xvidcore-1.0.1.tar;

  ②设置环境变量:export xvidcore="the path of xvidcore";cd $xvidcore/build/generic;

  ③生成makefile:./configure-host=localhostbuild=arm-linux-gcc;

  ④编译源代码:make;make install;

  ⑤将交叉编译生成的库文件libxvidcore.so.*拷贝到交叉编译器工作目录的lib子目录中,该库文件为系统的其它模块提供了编程接口。[!--empirenews.page--]2.4 基于嵌入式Linux的网络视频流服务模块设计

 

  2.4.1 Linux中流数据的操作

  在本设计中,数据在整个系统中是以流数据的形式存在的,Linux内核为流数据提供了一个标准的编程接口,这种接口为数据从外部设备经内核到达用户进程提供了一个全双工通道。在这个通道中,数据的处理模块是作为可选的中间件由用户动态加载的,上面设计的视频压缩模块就是这样的一个中间件。

  

 

  2.4.2 ASF流式文件格式

  本系统主要是用于实时视频应用,所以需要系统提供对流式文件格式的支持,这样在接收方利用标准的流视频播放软件,如MMedia Player就可以观看实时传输的视频.在本系统中采用了开放的ASF流格式.压缩后的视频数据在传输前需要对其进行ASF编码.ASF文件的基本组织单元为ASF对象,每个对象由三个域组成:对象标识符域、对象大小域和对象数据域。ASF文件的高层逻辑结构也包含三部分:头对象、数据对象和索引对象。其中,头对象包含了许多全局信息,数据对象则包含了所有待播放的数据,头对象必须在数据对象之间被接收方接收并解释。

  2.4.3 流视频协议

  流视频协议是为了在客户机和视频服务器之间进行通信而设计和标准化的。根据它们的功能,与网络上流视频相关的协议分为三类。

  *网络层协议:网络层协议提供了基本的网络服务支持。IP就是网络上流视频使用的网络协议。

  *传输协议:传输协议为流服务提供端对端的网络传输功能。TCP、UDP、RTP和RTCP就是网络上流视频使用的传输协议。

  *话路控制协议:话路控制协议定义消息和程序。RTSP就是一种话路控制协议。

  为流视频设计的协议栈如图4所示。在发送方的数据面,压缩且经过ASF编码的视频数据被读出并在RTP/RTCP/RTSP层上打包,以提供定时和同步信息以及包的序列号。然后把这些打包的RTP数据流发送到UDP/TCP层和IP层,得到的IP包在网络上传输。在接收方则按照相反的方向处理。在控制面,RTCP包和RTSP包在UDP/TCP层上复用,并且被送到IP层,以便通过网络传输。

  3 小结

  系统采用先进的MPEG-4编码标准,得到了较高的压缩比。经测试、在50Kbps~100Kbps的带宽下,对CIF(352×288,30fps)格式的视频有较好的表现能力。满足了在目前宽带环境中的网络视频会议以及视频监控的要求,其应用十分广泛。

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

随着现代通信技术和业务的发展,人们对通信的需求已经由最初的单一语音需求转变为对视频和音频的通信需求,以传送语音、数据。

关键字: 视频通信 视频 IP网络

刚入门嵌入式,选入门级RZ/G2L开发板,采用邮票孔形式封装了RZ/G2L核心板。

关键字: 开发板 嵌入式LINUX 嵌入式系统

2021年了,还有不支持弹幕的视频网站吗,现在各种弹幕玩法层出不穷,抽奖,ppt都上弹幕玩法了,不整个弹幕都说不过去了,今天笔者就抽空做了一个实时视频弹幕交互功能的实现,不得不说这样的形式为看视频看直播,讲义PPT,抽奖...

关键字: 实时视频 netty

未来的世界是什么样子?ICT业界描绘的图卷是“联接无处不在,智能无所不及”。随着5G呼啸而至,云与AI加速渗透,千行百业数字化、网络化、智能化转型升级如火如荼,一个“万物互联的智能世界”正迎面扑来。 新时代需要新网络,“...

关键字: IPv6 IP网络 网络时代

新基建能否成为后疫情时代维持经济平稳发展的基石?面对不确定性持续增加的外部环境,新一代数字基础设施的建设和利用,不仅是当前对冲疫情,拉动投资、提振经济的紧急之需,更是关乎经济转型、社会发展和国家繁荣的长远之计。当前,新基...

关键字: 华为 IP网络

整理自网络,排版:付斌 对嵌入式系统工程师及嵌入式硬件工程师而言,2020年将是振奋人心的一年。随着物联网应用的普及,MCU市场将再次繁荣。因此,市场上对嵌入式系统工程师人才的需求也将出现新高。这些都是底层编程领域中即将...

关键字: 嵌入式 软硬件 BSP 嵌入式LINUX

华为全球产业展望GIV@2025预测,到2025年,全球1000亿联接将泛在于公用事业、交通、制造、医疗、农业和金融等各个领域,推动数字化转型,届时企业应用云化率将达85%、AI利用率达86%、

关键字: AI 华为 IP网络 ENGINE

网络数据动辄30%、40%的高速增长在过去十余年中已成常态,随着5G时代的到来以及云、AI这些创新技术进入成熟期,这一趋势将愈演愈烈。运营商骨干网作为国家互联、省际互联的根基,正迎来新一轮的流量

关键字: 华为 IP网络 核心路由器 TE

近日,中国电信智能网络与终端研究院携手华为成功举办“新网络-新起点”2019年中国电信IP技术论坛。本次论坛就5G和云时代IP网络的智能化、IP新技术发展等热点话题进行了深入地探讨。 I

关键字: 5G 云时代 数字经济 IP网络

[导读] 前文分析了Linux设备驱动的驱动模型,本文来聊聊Platform_driver/Platform_device这个类。做嵌入式Linux的驱动,这个也是绕不开的,所以来学习分析总结一下。 阅读本文,建议先读:...

关键字: DEVICE PLATFORM 嵌入式LINUX LINUX驱动
关闭
关闭