首页 » 技术文章 » 基于嵌入式Linux与S3C2410平台的视频采集

基于嵌入式Linux与S3C2410平台的视频采集

作者:  时间:2011-01-13 18:33  来源:EDN

  在此主要针对设备文件/devvideo进行视频捕捉方面的程序设计。

  其中用到的主要函数有:

  Camera_open():用来开启视频设备文件,使用前需要首先声明一个video_device类型的设备文件。
Camera_get_capability()
:通过调用ioctl()函数取得设备文件的相关信息,并存放到video_capability结构中。
Camera_get_picture()
:通过调用ioctl()函数取得图像的相关信息,并且存放到video_picture结构中。
Camera_close()
:用来关闭设备文件。
Camera_grab_image()
:用来抓取图像,采用mmap方式,直接将设备文件/devvideo0映射到内存,加速文件IO操作,还可以使多个线程共享数据。

  剩下的还有设备初始化、参数设备等相关函数,这里不再详述。

  33 视频压缩编码模块

  获取图像数据后,可以直接输出到FrameBuffer进行显示,由于该系统要将采集到的视频影响通过网络传输出去,所以在传输之前要对原始的图像数据进行压缩编码,在此选用映佳公司的MPG440芯片来实现MPEG-4视频编解码方案。与其他标准相比,MPEG-4压缩比更高,节省存储空间,图像质量更好,特别适合在低带宽条件下传输视频,并能保持图像的质量。对视频流进行压缩编码以后,接下来就要实现网络传输部分的功能。

  34 JRTPLIB网络传输模块

  流媒体指的是在网络中使用流技术传输的连续时基媒体,RTP是目前解决流媒体实时传输问题的最好办法,JRTPLIB是一个面向对象的RTP库,他完全遵循RFCl889设计,下面讲述如何在Linux平台上运用RTP协议进行实时流媒体编程。

  341 初始化

  在使用JRTPLIB进行实时流媒体数据传输之前,首先应该生成RTPSession类的一个实例来表示此次RTP会话,然后调用 Create()方法来对其进行初始化操作。RTPSession类的Create()方法只有一个参数,用来指明此次RTP会话所采用的端口号。

  342 数据发送

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

   343 数据接收

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

  JRTPLIBRTP数据报定义了3种接收模块,通过调用RTPSession类的SetReeeiveMode()方法可以设置下列这些接收模式:

  RECEIVEMODE_ALL:缺省的接收模式,所有到达的RTP数据报都将被接受;
RECEIVEMODE_IGNORESOME
:除了某些特定的发送者之外,所有到达的RTP数据报都将被接受,而被拒绝的发送者列表可以通过调用 AddTo-IgnoreList()DeleteFromlgnoreList()ClearIgnoreList()方法进行设置;
RECEIVEMODE_ACCEPTSOME
:除了某些特定的发送者之外,所有到达的RTP数据报都将被拒绝,而被接受的发送者列表可以通过调用 AddTo-AcceptList()DeleteFromAcceptListClearAcceptList()方法来进行设置。

  344 控制信息

  JRTPLIB是一个高度封装后的RTP库,只要PollData()SendPacket()方法被成功调用,JRTPLIB就能够自动对达到 RTCP数据报进行处理,并且还会在需要的时候发送RTCP数据报,从而能够确保整个RTP会话过程的正确性。在系统中,使用 RTPSessionJRTPLIB类库提供的方法来实现底层的RTPRTCP操作,并且把他封装在CrtpTransmitter类中,该类从 MediaSink类继承而来,接收到相应的媒体帧数据,使用RTPSession类库的操作把数据发送到网络上。

  4 结语

  因为系统是以S3C2410平台和Linux操作系统为基础,利用Video4Linux设计采集程序,使用MPEG-4压缩编码,通过实时流媒体传输技术实现网络传输的,所以软硬件成本低廉,体积小巧,整个系统具有稳定可靠、安装简便等特点,而且监控距离可随网络延伸不断加长,具有良好的发展应用前景。可扩展应用在工业控制、视频会议系统、可视电话、远程监控系统等诸多领域。

相关推荐

Linux将进军汽车智能系统领域

Linux  汽车智能系统  2013-07-09

Android回归Linux核心怀抱

Google  Linux  Android  2012-11-01

EXT4数据损失bug影响Linux稳定版内核

EXT4  Linux  2012-10-25

Fedora Linux 18 延期至年底

Fedora Linux 18  2012-10-17

Marvell和Tuxera推出业界最快的全功能NAS解决方案

Marvell  Linux  NAS  2012-01-19

ARM-Linux嵌入式系统的BootLoader分析与设计

嵌入式系统  Linux  2011-09-19
在线研讨会
焦点