嵌入式远程视频采集系统的设计与实现(基于S3C2410)

上传人:oq****t 文档编号:11696064 上传时间:2017-10-14 格式:DOC 页数:6 大小:64.50KB
返回 下载 相关 举报
嵌入式远程视频采集系统的设计与实现(基于S3C2410)_第1页
第1页 / 共6页
嵌入式远程视频采集系统的设计与实现(基于S3C2410)_第2页
第2页 / 共6页
嵌入式远程视频采集系统的设计与实现(基于S3C2410)_第3页
第3页 / 共6页
嵌入式远程视频采集系统的设计与实现(基于S3C2410)_第4页
第4页 / 共6页
嵌入式远程视频采集系统的设计与实现(基于S3C2410)_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《嵌入式远程视频采集系统的设计与实现(基于S3C2410)》由会员分享,可在线阅读,更多相关《嵌入式远程视频采集系统的设计与实现(基于S3C2410)(6页珍藏版)》请在金锄头文库上搜索。

1、嵌入式远程视频采集系统的设计与实现(基于 S3C2410)发 布 时 间 : 2008-11-19 来 源 : 中电网 作 者 : 张永强 ,赵永勇,李崇德 浏 览 : 984 多媒体通信技术的发展为信息的获取和传输提供了丰富的手段,视频采集是其中不可缺少的重要组成部分,该系统基于 S3C2410 的 ARM9 芯片和嵌入式 Linux 操作系统,采用 USB 摄像头捕捉视频,经 MPEG-4算法压缩编码,系统直接与网络相连,用户使用标准的网络浏览器和流媒体播放程序即可查看远程视频影像。1 硬件系统系统硬件平台选用基于 ARM9 架构嵌入式芯片 S3C2410,稳定工作在 202MHz 主频,

2、板载 64MB SDRAM 64MB FLASH,主板资源包括:主 USB 口、从 USB 口、10M/100M 以太网口,触摸屏、彩色LCD、键盘、 8 个用户自定义 LED 数码管, A/D,RTC 电路,2 个串口、1 个 JTAG 通用接口,音频模块,支持 MPEG4,MP3 编解码,3 个 168PIN 的扩展插座,32 位的数据总线,保留充分扩展空间。其中标配模块包括:IC 卡+PS2 模块、IDE 硬盘+CF 卡模块、PCMCIA+SD/MMC 模块。另外可选配模块有:GPS 模块,GPRS 模块,FPGA 模块,CAN+AD+DA 模块、红外模块、蓝牙模块、摄像头模块。2 软件

3、系统2.1 内核配置与 USB 摄像头驱动假定已经搭建好嵌入式 Linux 的开发环境,下面第一步工作就是 USB 摄像头的安装与驱动。首先检查 Linux Kernel 中是否已经添加了 USB 模块的支持,并且加入 Video4Linux 支持。Multimedia devicesVideo For LinuxVideo For Linux*V4L information in proc filesystem在主菜单的 USB Support 下还有各种摄像头的驱动,选中将要使用的摄像头芯片类型。USB OV511 Camera supportUSB SE401 Camera suppor

4、tUSB 3com HomeConnect(akavicam)support在 USB 摄像头选购时,优先考虑 Linux 内核公开支持的摄像头芯片,不然要额外编写相应的 USB 摄像头驱动程序,然后进行编译、安装。在此选用网眼公司的 V3000 产品,他采用了 OV511 的芯片。确定 USB 摄像头被正常驱动后,下一步就是使用 Video4Linux 提供的 API 函数集来编写视频采集程序。2.2 基于 V4L 设计的视频采集模块在 Linux 下,所有外设都被看成是一种特殊的文件,称为设备文件。系统调用是内核和应用程序之间的接口,而设备驱动程序则是内核和外设之间的接口。他完成设备的初始

5、化和释放、对设备文件的各种操作和中断处理等功能,为应用程序屏蔽了外设硬件的细节,使得应用程序可以像普通文件一样对外设进行操作。Linux 系统中的视频子系统 Video4Linux 为视频应用程序提供了一套统一的 API,视频应用程序通过标准的系统调用即可操作各种不同的视频捕获设备。Video4Linux 向虚拟文件系统注册视频设备文件,应用程序通过操作视频设备文件实现对视频设备的访问。Linux 下与 Video4Linux 相关设备及用途如表 1 所示。 这里主要针对设备文件/dev/video 进行视频捕捉方面的程序设计。Linux 下视频采集流程如图 2 所示。其中用到的主要函数有:C

6、amera_open():用来开启视频设备文件,使用前需要首先声明一个 video_device 类型的设备文件。Camera_get_capability():通过调用 ioctl()函数取得设备文件的相关信息,并存放到 video_capability 结构里。Camera_get_picture():通过调用 ioctl()函数取得图像的相关信息,并且存放到 video_picture 结构里。Camera_close():用来关闭设备文件。Camera_grab_image():用来抓取图像,采用 mmap 方式,直接将设备文件 /dev/video0 映射到内存,加速文件 I/O 操

7、作,还可以使多个线程共享数据。剩下的还有设备初始化、参数设备等相关函数,不再详述。2.3 视频压缩编码模块获取图像数据后,可以直接输出到 FrameBuffer 进行显示,由于本系统要将采集到的视频影响通过网络传输出去,所以在传输之前要对原始的图像数据进行压缩编码,在此选用 MPEG-4 视频编解码方案。和其他标准相比,MPEG-4 压缩比更高,节省存储空间,图像质量更好,特别适合在低带宽条件下传输视频,并能保持图像的质量。MPEG-4 中基于对象的视频编码过程可以分为 3 步进行:(1)从原始视频流中分割视频对象。(2)对视频对象进行编码,对不同视频对象的运动信息、形状信息、纹理信息分配不同

8、的码字。对输入的任意形状的 VOP 序列,用基于块的混合编码技术编码,处理顺序是先 IVOP 后 PVOP,BVOP。在对VOP 的形状信息编码后,取得任意形状 VOP 的采样,每个 VOP 划分为不相交的宏块,每个宏块含有 4个 88 象素块进行运动补偿以及纹理编码,已编码的 VOP 帧保存在帧存中,在当前 VOP 帧和已编码VOP 帧之间的计算运动矢量;对将编码的块和宏块,计算他们的运动补偿预测误差 ;运动补偿预测后的IVOP 及误差用 88 块 DCT 变换,并进行 DCT 系数的量化,然后是游程编码和熵编码。(3)对各个视频对象的码流进行复合,每个视频对象的形状、运动纹理信息复合成 V

9、OL 比特流,各视频对象视频流复合成统一的码流输出。对视频流进行压缩编码以后,接下来就要实现网络传输部分的功能。2.4 JRTPLIB 网络传输模块流媒体指的是在网络中使用流技术传输的连续时基媒体,RTP 是目前解决流媒体实时传输问题的好办法,JRTPLIB 是一个面向对象的 RTP 库,他完全遵循 RFC1889 设计,下面讲述如何在 Linux 平台上运用RTP 协议进行实时流媒体编程。2.4.1 初始化在使用 JRTPLIB 进行实时流媒体数据传输之前,首先应该生成 RTPSession 类的一个实例来表示此次RTP 会话,然后调用 Create()方法来对其进行初始化操作。RTPSes

10、sion 类的 Create()方法只有一个参数,用来指明此次 RTP 会话所采用的端口号。2.4.2 数据发送当 RTP 会话成功建立起来之后,接下来就可以开始进行流媒体数据的实时传输了。首先需要设置好数据发送的目标地址,RTP 协议允许同一会话存在多个目标地址,这可以通过调用 RTPSession 类的AddDestination()、DeleteDestination()和 ClearDestinations()方法来完成。目标地址全部指定之后,接着就可以调用 RTPSession 类的 SendPacket()方法,向所有的目标地址发送流媒体数据。2.4.3 数据接收对于流媒体数据的接

11、收端,首先需要调用 PollData()方法来接收发送过来的 RTP 或者 RTCP 数据报。由于同一个 RTP 会话中允许有多个参与者(源) ,因此既可以通过调用 GotoFirstSource()和GotoNextSource()方法来遍历所有的源,也可以通过调用 GotoFisstSourceWithDat()和GotoNextSourceWithData()方法来遍历那些携带有数据的源。在从 RTP 会话中检测出有效的数据源之后,接下去就可以调用 RTPSession 类的 GetNextPacket()方法从中抽取 RTP 数据报,当接收到的 RTP 数据报处理完之后,要及时释放。J

12、RTPLIB 为 RTP 数据报定义了 3 种接收模块,通过调用 RTPSession 类的 SetReceiveMode()方法可以设置下列这些接收模式:RECEIVEMODE_ALL:缺省的接收模式,所有到达的 RTP 数据报都将被接受;RECEIVEMODE_IGNORESOME:除了某些特定的发送者之外,所有到达的 RTP 数据报都将被接受,而被拒绝的发送者列表可以通过调用 AddToIgnoreList(),DeleteFromIgnoreList()和 ClearIgnoreList()方法来进行设置;RECEIVEMODE_ACCEPTSOME:除了某些特定的发送者之外,所有到达

13、的 RTP 数据报都将被拒绝,而被接受的发送者列表可以通过调用 AddToAcceptList(),DeleteFromAcceptList 和 ClearAcceptList()方法来进行设置。2.4.4 控制信息JRTPLIB 是一个高度封装后的 RTP 库,只要 PollData()或者 SendPacket()方法被成功调用,JRTPLIB 就能够自动对达到的 RTCP 数据报进行处理,并且还会需在要的时候发送 RTCP 数据报,从而能够确保整个 RTP 会话过程的正确性。在本系统中,使用 RTPSession JRTPLIB 类库提供的方法来实现底层的 RTP/RTCP 操作,并且把他封装在 CrtpTransmitter 类中,该类从 Media Sink 类继承而来,接收到相应的媒体帧数据,使用 RTPSession类库的操作把数据发送到网络上。3 结语本系统基于 S3C2410 平台和 Linux 操作系统,利用 Video4Linux 设计采集程序,使用 MPEG-4 压缩编码算法,通过实时流媒体传输技术实现了网络传输,整个系统具有稳定可靠、安装简便、成本低廉等特点,可扩展应用在工业控制、视频会议系统、可视电话、远程监控系统等诸多领域。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号