微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 分析以嵌入式Linux与S3C2410平台为基础的视频采集

分析以嵌入式Linux与S3C2410平台为基础的视频采集

时间:01-04 来源:互联网 点击:

放到video_capability结构中。

Camera_get_picture():通过调用ioctl()函数取得图像的相关信息,并且存放到video_picture结构中。

Camera_close():用来关闭设备文件。

Camera_grab_image():用来抓取图像,采用mmap方式,直接将设备文件/dev/video0映射到内存,加速文件I/O操作,还可以使多个线程共享数据。

3.3 视频压缩编码模块

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

3.4 JRTPLIB网络传输模块

流媒体指的是在网络中使用流技术传输的连续时基媒体,RTP是目前解决流媒体实时传输问题的最好办法,JRTPLIB是一个面向对象的RTP库,它完全遵循RFCl889设计。

3.4.1 初始化

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

3.4.2 数据发送

先设置好数据发送的目标地址,RTP协议允许同一会话存在多个目标地址,这个可以通过调用RTPSession类的AddDestination()、DeleteDestination()与 ClearDestinations()的方法来完成。目标地址全部指定了以后,接着就可以调用RTPSession类的SendPacket()方法,向所有的目标地址发送流媒体数据。

3.4.3 数据接收

调用PollData()方法来接收发送过来的RTP或者RTCP数据报。由于同一个RTP会话中允许有多个参与者 (源),因此既可以通过调用GotoFirstSource()和GotoNextSource()方法来遍历所有的源,也可以通过调用 GotoFisstSourceWithDat()和Got-oNextSourceWithData()方法来遍历那些携带有数据的源。

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

RECEIVEMODE_ALL:缺省的接收模式,所有到达的RTP数据报都将会被接受;

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

RECEIVEMODE_ACCEPTSOME:除了某些特定的发送者之外,所有到达的RTP数据报都将被拒绝,而被接受的发送者列表可以通过调用 AddTo-AcceptList(),DeleteFromAcceptList和ClearAcceptList()方法来进行设置。

3.4.4 控制信息

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

4 结语

系统是以S3C2410平台和Linux操作系统为基础,利用Video4Linux设计采集程序,使用MPEG-4压缩编码,通过实时流媒体传输技术实现网络传输的,有软硬件成本低廉,体积小巧,安装简便等特点。可扩展应用在工业控制、视频会议系统、远程监控系统等诸多领域。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top