当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于S3C6410的视频监控系统的设计与实现

摘要:为了实现一种简单,可靠性高的嵌入式视频监控系统,基于三星S3C6410微处理器系统,结合嵌入式技术和图像处理技术,利用S3C64 10的硬件编码模块MFC进行MPEG-4编码,采用实时传输协议通过网络进行视频传输。经局域网条件下测试,该系统采集传输视频质量较好,性能稳定,满足低成本、高可靠性的嵌入式视频监控要求。在描述系统框架的同时,更具体地说明了实现部分的关键代码示例。
关键词:视频监控;S3C6410;MPEG-4;实时传输协议

    视频监控的应用领域日益广泛。随着电子信息技术、多媒体技术以及网络技术的快速发展,嵌入式视频监控技术也得到了快速的发展。相比较传统的监控系统,嵌入式监控系统具有成本低,小巧灵活,高可靠性等特点。本文以三星S3C6410微处理器为基础处理器ARM11,实现了一种简单高效的视频监控系统。系统既可以使用网线进行传输,也可以采用无线USB网卡进行无线传输。本文在说明系统框架的同时,着重对系统实现的具体软件进行了说明。

1 系统的组成和工作原理
    嵌入式视频监控系统由硬件部分和软件部分组成。硬件部分由视频采集模块、视频编码模块、网络传输模块以及嵌入式处理器模块组成;软件部分基于嵌入式操作系统平台,包括视频数据采集模块、视频编码模块和网络传输模块等。
    系统的总体设计原理为:通过OV9653的130万像素摄像头采集视频数据,然后将视频数据发送到S3C6410的MFC(多媒体格式编解码)模块进行视频编码后,得到MPEG-4视频流,最后将数据通过网络模块发送到接收端。系统组成框图如图1所示。



2 系统的硬件设计
2.1 数据采集模块
    视频采集模块采用OV9653摄像头传感器。OV9653摄像头传感器是低电压的CMOS图像传感器。采集图像的输出格式可以是YUV/YCbCr
4:2:2或者RGB 4:2:2。
2.2 视频编码模块
    系统基于ARMSYS6410开发板开发。ARMSYS6410开发板以三星S3C6410微处理器(ARM1176JZF-S内核)为核心。
    利用S3C6410提供的MFC(多媒体格式编解码)模块进行编码,将OV9653采集到的YUV格式数据编码成MPEG-4格式数据流。同时,也可以将OV9653采集的RGB格式的数据直接显示在LCD屏上。
2.3 网络传输模块
    基于S3C6410微处理器的ARMSYS6410开发板提供了1路10M/100M网络接口,1路USB2.0-OTG,1路USB Host。在网络传输模块中可以直接使用网络接口来进行有线的网络数据传输,也可以使用USB接口的网络卡来进行无线的数据传输。区别只是在软件部分使用的驱动不同,而对程序的结构没有任何影响。
2.4 嵌入式处理器模块
    三星S3C6410微处理器(ARM1176JZF-S内核)是一款高性能的多媒体应用处理器,具有强大的硬件多媒体格式编解码单元(MFC),完善的外部设备,同时拥有高达667 MHz的运行频率。[!--empirenews.page--]

3 系统的软件设计
    嵌入式操作系统是嵌入式系统的重要组成部分,为应用程序的开发提供了一个软件平台。由于Linux系统具有良好的可裁剪和可移植等特性,目前较多地采用Linux系统来进行嵌入式系统的开发。
    基于S3C6410的ARMSYS6410开发板,已经提供了基于Linux 2.6.28内核的操作系统源码。通过对内核各个功能模块进行裁剪,编译出镜像文件,然后下载到开发板上,即可实现Linux嵌入式操作系统以及相应的驱动程序的移植。
    系统的整体数据流如图2所示。图中①表示原始数据从外部摄像头到摄像头驱动模块。②表示数据由驱动模块经过处理传输到内存。此时数据可以有不同的格式。③表示数据从内存中传送给视频编码模块的输入缓冲区。④表示MFC编码模块从输入缓冲区读取数据进行MPEG-4编码。⑤表示编码结束后将数据传送到视频编码模块的输出缓冲区。⑥表示从视频编码的输出缓冲区读取编码后的数据传送给网络传输模块进行传输。


    在此需要注意的是,图示中的视频输入缓冲区对于解码模块是输入缓冲区,但是对于编码模块却是输出缓冲区。对于图示中的输出缓冲区也同样如此。[!--empirenews.page--]
3.1 视频数据采集程序
    视频采集程序使用内存映射的方式进行读取。通过内存映射直接把设备文件映射到内存中,绕过内核缓冲区,进程访问设备文件时和访问普通内存一样,极大的提高了视频数据的读取速度。
    视频采集部分的流程图如图3所示。
    下面列出视频采集部分的关键代码。
    首先打开设备,其中CODEC_NODE为预定义宏,表示摄像头结点文件路径。
    dev_fp=open(CODEC_NODE,O_RDWR);
    在设置参数部分,首先要得到设备能力参数,检查是否具有所需的功能,然后再进行参数的设置。使用下面的代码来实现。
    ioctl(dev_fp,VIDIOC_QUERYCAP,&cap);
    上一行代码得到设备的功能信息,存储到参数caF中。在检查设备具有所需功能后,下一行代码进行参数设置。
    ioctl(dev_fp,VIE)IOC_S_FMT,&codec_fmt);
    其中,codec_fmt为一个格式信息的结构体类型参数。
    在Linux平台,采集图像数据部分的实现方式与文件读取类似,采用下面的代码实现。
    read(dev_fp,g_yuv,YUV_FR_BUF_SIZE);
    而将数据传送给MFC模块这部分,可以采取直接共享缓冲区的方式,这样减少了一次数据在内存中的传输,增加了效率。
    最后是关闭设备文件。先停止图像的采集,然后关闭文件。
    ioctl(dev_fp,VIDIOC_STREAMOFF,&start);
    close(dev_fp);
    上述代码片段是视频采集部分的关键代码段。在实现部分还有很多的条件判断和分支选择等控制流程部分,这里不进行详细描述。
3.2 视频编码程序
    视频编码部分直接采用S3C6410的MFC视频编解码模块进行视频的编码。由于采用硬件编码,编码效率非常高。同时在程序的设计方面,不用涉及具体的硬件细节,只需要通过S3C6410提供的驱动模块进行。编码部分的流程图如图4所示。

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

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

助力科研与检测新突破 上海2024年5月15日 /美通社/ -- 全球知名的科学仪器和服务提供商珀金埃尔默公司今日在上海举办了主题为"创新不止,探索无界"的新品发布会,集中展示了其在分析仪器领域的最...

关键字: 质谱仪 BSP DSC 气相色谱

上海2024年5月16日 /美通社/ -- 2024年5月10日至5月13日,富士胶片(中国)投资有限公司携旗下影像产品创新力作亮相北京P&E 2024。在数码相机展览区域,全新制定的集团使命"为世界绽...

关键字: 富士 数码相机 影像 BSP

北京2024年5月16日 /美通社/ -- 5月10日晚,2024中国品牌日晚会在新华社全媒体矩阵播出,50个入选品牌在当晚揭晓,极氪名列其中,成为首度上榜的中国造车新势力代表。 图为北京时间5月10日 21:30 ,...

关键字: 吉利 COM HTML 代码

贝克曼库尔特目前已成为MeMed Key免疫分析平台和MeMed BV检测技术的授权经销商 在原有合作的基础上,继续开发适用于贝克曼库尔特免疫分析仪的MeMed BV检测 加州布瑞亚和以色列海法2024年5月16日...

关键字: BSP IO 检测技术 免疫分析仪

英国英泰力能的燃料电池是可产业化的产品解决方案 英国首个专为乘用车市场开发的燃料电池系统 在 157kW 功率下,此燃料电池比乘用车的其他发动机更为强大 &...

关键字: ENERGY INTELLIGENT 氢燃料电池 BSP

深爱人才,共赴"芯"程 深圳2024年5月15日 /美通社/ -- 5月11日,深圳国资国企"博士人才荟"半导体与集成电路产业专场活动在深圳市重投天科半导体有限公司(简...

关键字: 半导体 集成电路产业 BSP 人工智能

武汉2024年5月15日 /美通社/ -- 北京时间4月26日-5月4日,2024 VEX 机器人世界锦标赛于美国得克萨斯州达拉斯市举办。本届 VEX 世锦赛为期九天,设有 VIQRC 小学组/初中组、V5RC 初中组/...

关键字: 机器人 BSP RC POWERED

上海2024年5月15日 /美通社/ -- 由生成式人工智能(AI)驱动的临床阶段生物医药科技公司英矽智能宣布,与复星医药(600196.SH;02196.HK)合作开发的潜在"全球首创"候选药物IS...

关键字: ISM BSP PC 人工智能

上海2024年5月13日 /美通社/ -- 5月8日,浦东新区国资委组织陆家嘴集团等9家区属企业与立邦中国召开合作交流会,旨在贯彻落实浦东新区区委、区政府工作要求,进一步放大进博会溢出带动效应,持续扩大区属企业与进博会重...

关键字: BSP 数字化 自动化立体仓库 智慧园区

上海2024年5月13日 /美通社/ -- 在数字化时代,高效的税务管理和ERP系统成为企业发展的关键。为了满足这一需求商应信息科技与Exact Software 易科软件就金四全电票税系统与ERP系统集成及商务合作建立...

关键字: AC 软件 BSP 数字化
关闭
关闭