基于Linux嵌入式视频监控系统应用软件设计与实现.docVIP

基于Linux嵌入式视频监控系统应用软件设计与实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Linux嵌入式视频监控系统应用软件设计与实现

基于Linux嵌入式视频监控系统应用软件设计与实现   摘要 本文介绍了基于S3C2410硬件平台和嵌入式Linux的视频监控系统结构。阐述系统的软件结构、功能和控制流。对视频采集、压缩和显示的实现进行了分析,并对服务器端和客户端关键多线程的设计给出了实现方法。   关键词 嵌入式;视频监控;Framebuffer;线程   中图分类号 TP311文献标识码 A文章编号 1674-6708(2010)18-0132-02   0 引言   视频监控直观、准确、及时,并且信息内容丰富,所以被广泛应用于许多场合,在公共安全、突发事件处理等领域发挥重要作用。随着网络、通信、多媒体、嵌入式技术的发展,嵌入式视频监控系统以其体积小、重量轻、数字化、功耗低、价格低廉等特点,正日益受到人们的重视。   本文中提及的嵌入式视频监控系统基于S3C2410X硬件平台,和2.4内核以上的Linux操作系统。采用USB摄像头进行图像采集,对获取的数字化监测画面进行现场智能处理和判断。图像不必总是传回监控中心。而是一旦判断发现异常,则可立即通过网络向检测中心报警,并传回异常画面。   1 嵌入式视频监控系统组成   系统主要由硬件和软件两部分组成。结构如图1所示。   本系统硬件选用致远公司的MagicARM2410作为嵌入式网络视频服务器的开发平台,选用USB摄像头来进行视频采集。MagicARM2410以基于ARM920T内核的S3C2410X芯片为MPU。该芯片内部集成了指令/数据Cache、3路UART、并行I/O口,且通过以太网控制芯片扩展一个以太网接口,同时引出USB主口,用来接USB 摄像头。   软件系统由系统软件和应用软件组成。前者主要是指经过剪裁并移植的Linux,内含USB内核驱动程序、USB主机控制器驱动、USB摄像头驱动等;后者包括自行开发的服务器端软件和客户端软件。   其中,服务器端模块负责视频采集、压缩、检测、报警、传输、显示等,而客户端模块则负责视频接收、解压、显示、存储等。   2 软件功能概述   服务器端的视频采集功能利用Video4Linx(V4L)来实现;视频压缩采用JPEG压缩算法;视频检测则是将JPEG图像转换为三通道的图像。   视频显示则利用了Framebuffer技术。Framebuffer是从Linux内核2.2开始引入的一种驱动程序接口。它本身不具备任何运算数据的能力,就像是一个暂时存放水的水池。CPU将运算结果放到这个水池,水池再将结果流到显示器。中间不会对数据做处理。应用程序可以直接读写这个水池的内容。   本文中提及的监测系统视频传输通过有线网络进行,采用TCP协议。也可以采用UDP协议,只是需要对相应程序做出修改。   3 应用软件功能实现   3.1 服务器端   服务器端应用程序的核心是两个线程:视频采集线程和视频发送线程。   视频数据采集用于完成对视频的实时采集和压缩功能。采用Video4Linux(V4L)技术。V4L是 Linux内核中支持影像设备的一组APIs。应用程序通过标准的系统调用即可操纵视频设备。   应用程序main函数分别判断网络和视频缓冲区初始化是否完成,之后即调用start()函数开始下列工作:   1)创建线程   thread_create();   2)视频采集初始化    init_framebuffer(FB_FILE, fv, tempbuf); // 视频缓冲区初始化    ……   open_video(V4L_FILE, fv, // 打开并初始化摄像头   DEFAULT_DEPTH,   DEFAULT_PALETTE,   WIDTH, HEIGHT);   3)线程1进行视频采集和压缩    while(1){   ……   rgb_to_framebuffer(fv, WIDTH, HEIGHT, // 视频图像存入缓冲区   XOFFSET, YOFFSET, image);   ……    put_image_jpeg(fptr_jpg, (char *)image, // 图像压缩   WIDTH, HEIGHT,   DEFAULT_QUALITY,   DEFAULT_PALETTE);    }   4)线程2进行视频发送    while(1){    ……    memset(sendbuff, 0, FILE_LENGTH); // 开辟发送缓冲区    num = read(file, sendbuff, FILE_LENGTH); // 读取图像文件大小    ……    ret = send(temp_socke

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档