新闻中心

EEPW首页 > 消费电子 > 设计应用 > 基于S3C6410的视频监控系统的设计与实现

基于S3C6410的视频监控系统的设计与实现

作者:时间:2012-02-08来源:网络收藏

下面列出编码部分的关键代码。
hOpen=open(MFC_DEV_NAME,O_RDWR | O_NDELAY);
上一行代码打开MFC设备。由预定义的宏MFC_DEV_NAME指定MFC设备文件路径。
模块的初始化部分需要指定编码帧的长宽,编码帧的速率等参数。初始化的这些信息并没有直接应用于设备,而是存储于一个编码参数的结构体类型参数pCTX中,然后用下面的代码进行参数设置,也即将参数应用于实际的设备。
ioctl(pCTX->hOpen,cmd_init,&mfc_args);
编码部分用下一行代码
ioetl(pCTX->hOpen,cmd_exe,&mfc_args);
在编码完成后,可以通过函数获取编码后帧的内存地址。函数原型为:
void*SsbSipMPEG4EncodeGetOutBuf(vold*openHandle,long*size)。
最后关闭设备文件。
close(pCTX->hOpen);
同样,对于一些流程控制部分的代码,限于篇幅,没有进行详细的描述。
3.3 网络传输程序
网络部分采用RTP实时传输协议进行数据的传输。RTP(Real-time Transport Protocol)是用于网络多媒体数据流的一种传输协议。为了使系统的更简单和稳定,采用已有的RTP库进行程序的开发。本系统选用开源的C语言库oRTP进行开发。
oRTP库是对RTP协议的一种,完全采用C语言编写。oRTP库使用简单易用的接口,实现了RTP协议,可以工作于Linux,Windows等多个
平台。
系统网络传输模块的流程比较简单。模块首先初始化oRTP库,然后传输数据,在传输完成后释放oRTP库资源。由于模块流程较简单,在此就不列出系统的流程图,仅针对具体的实现进行说明。下面列出网络传输模块的关键代码。在传输数据之前,要对oRTP库进行一些基本的初始化操作。首先对时间戳进行初始化,采用下面的一行代码实现。
m_nUser-Timestamp=0;
然后,调用oRTP库提供的初始化接口函数:
ortp_init();
ortp_scheduler_init();
在完成基本的初始化后,创建一个新的rtp会话对象,并且设置会话对象的一些参数和属性。
session=rtp_session_new(RTP_SESSION_SENDONLY);
上面的代码创建了一个新的rtp会话对象,接下来用下面的函数对session进行参数和属性的设置。
rtp_session_set_scheduling_mode(); rtp_session_set_blocking_mode(); rtp_session_set_remote_addr();rtp_session_set _payload_type();
上面的函数依次对rtp会话对象的调度管理、阻塞模式、发送目的地址和负载类型进行设置。限于篇幅,略去了调用参数。
发送数据调用库函数:
rtp_session_send_wlth_ts();
在发送数据完成后,销毁rtp会话对象,然后释放oRTP库的资源。
rtp_session_destroy(session);
ortp_exit();
在网络传输模块中需要注意的是,由于RTP协议对数据包的大小是有限制的,所以如果传输的视频帧过大,需要进行分包传输处理。

4 结语
本文在微处理器的开发平台上,实现了一种MPEG-4编码的视频。利用内部集成的MFC模块进行视频编码,实现了很高的编码效率。最后,通过RTP协议进行网络数据传输。采用模块化的之后,使得系统的网络数据传输部分与具体的有线或者无线传输方式无关。文章在描述各部分实现流程的基础上,详细地说明了关键部分的代码实现。实验测试中,数据编码效率很高。采用了
MPEG-4编码方式,在正常网络情况下,传输视频质量较好,系统运行稳定。实验证实了系统的可行性较高。

本文引用地址:http://www.eepw.com.cn/article/165899.htm

上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭