为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于S3C2410的网络视频采集

2012-05-18 3页 pdf 434KB 22阅读

用户头像

is_527365

暂无简介

举报
基于S3C2410的网络视频采集 兵工自动化 测控技术 O. I. Automation 2006年第 25卷第 5期 Measurement and Control Technique 2006, Vol. 25, No. 5 ·71· 文章编号:1006-1576(2006)05-0071-03 基于 S3C2410的网络视频采集 张雄,叶念渝,...
基于S3C2410的网络视频采集
兵工自动化 测控技术 O. I. Automation 2006年第 25卷第 5期 Measurement and Control Technique 2006, Vol. 25, No. 5 ·71· 文章编号:1006-1576(2006)05-0071-03 基于 S3C2410的网络视频采集 张雄,叶念渝,田俊 (华中科技大学 控制科学与工程系,湖北 武汉 430074) 摘要:基于 IP网络的实时视频采集、处理及传输系统,采用 ARM9 S3C2410+Linux组成嵌入式软硬件系统。 并由开发板引出相关接口,连接 USB数码摄像头,实现视频的实时采集。同时利用 S3C2410的高速运算能力对视频 图像进行压缩。实现过程包括:在内核中编写 USB数码摄像头驱动程序,编写上层应用程序以获取视频数据。 关键词:视频采集;S3C2410;Linux;USB数码摄像头 中图分类号:TN919.85 文献标识码:A Network Video Collection Based on S3C2410 ZHANG Xiong, YE Nian-yu, TIAN Jun (Dept. of Control Science & Engineering, Huazhong University of Science & Technology, Wuhan 430074, China) Abstract: Based on IP network, the ARM9 S3C2410+Linux was adopted by real time video collection, operation and transmission system to consist embedded software and hardware system. The USB interfaces were exported from the develop board to connect with USB digital camera and realize the real time video collection. At the same time, the video was compressed by the strong and high-speed operation capability of S3C2410. The realization process includes programming USB digital camera device driver in Linux kernel and programming the upper application program of video collection to acquire video data. Keywords: Video collection; S3C2410; Linux; USB digital cameraa 0 引言 基于 IP 网络的实时视频采集、处理及传输系 统,采用 ARM9 S3C2410+Linux 组成的嵌入式软 硬件系统,无需其它硬件就可实现通用视频采集的 应用如远程视频监控和网络视频会议。这里着重讨 论网络视频采集的实现。 1 系统组成 1.1 系统的硬件框架 系统的硬件是基于优龙公司开发的 arm9 S3C2410开发板 ST2410,其硬件系统如图 1。 RS232接口 S3C2410 CPU JTAG 数码摄像头 FLASH存储器 SDRAM USB接口 UART接口 以太网控制器 CS8900A 连接宿主机 PC 互联网 图 1 基于 S3C2410 网络采集系统硬件功能框图 1.2 系统的软件结构 系统软件是在 Linux基础之上构建的。ST2410 板使用的 Linux 内核是在 linux-2.4.18 内核上打上 2410_patch2418补丁后利用交叉环境编译而成。 ST2410板使用的文件系统是针对 Flash的无缓冲机 制的 jffs2文件系统,文件系统中包含应用程序、模 块、配置文件和库等。视频信号的采集、压缩和传 输建立在 Linux内核之上,如图 2。 应用程序(采集、压缩、传输) 文件系统 图 2 系统软件结构 摄像头驱动Linux内核 引导程序(U_boot) 2 视频采集的具体实现 视频采集实现分为:① 在内核中为 USB数码 摄像头编写驱动程序;② 编写上层应用程序来获 取视频数据。 2.1 USB数码摄像头驱动的实现 在 Linux 中 USB 驱动程序由主控制器驱动程 序、USB 内核、USB 客户驱动程序组成,如图 3。 USB 内核分别为客户端驱动程序层和主机控制器 驱动程序层提供一套函数集。 USB内核 USB客户驱动程序(设备驱动) 图 3 Linux的 USB 子系统结构 上层 API HC驱动 1 HC驱动 2 下层 API USB 主机控制器集成在 S3C2410 内部,并提 收稿日期:2005-10-26;修回日期:2005-12-18 作者简介:张雄(1980-),男,湖北人,华中科技大学在读硕士,从事计算机集成控制及嵌入系统应用研究。 兵工自动化 测控技术 O. I. Automation 2006年第 25卷第 5期 Measurement and Control Technique 2006, Vol. 25, No. 5 ·72· 供 2 个 USB 主机接口与 OHCI1.0 和 USB 1.1 相兼 容,支持低速(1.5MB/S)和全速(12MB/S)的 USB设备。在编译内核时需将 OHCI编进内核。选 用网眼 V2000 作为 USB 数码摄像头进行视频采 集。V2000 的驱动模块是 ov511.o,可将它编译成 可加载的模块。用 usb_register 和 usb_deregister 向 USB内核分别进行注册和注销此驱动程序,以一个 struct usb_driver的结构体作为参数。 Struct usb_driver { const char *name; //模块名字 void *(*probe)(struct usb_device*, unsigned int); //插入设备时调用 void (*disconnect)(struct usb_device*, void*); //拔出设备时调用 struct list_head driver_list; //usb core内部初始化 struct file_operations fops; //对驱动函数文件列表 int minor; } 当设备被总线检测到时,调用一个入口点: void* probe(struct usb_device*,unsigned int);当设 备从总线上取下时,调用另一个入口点:static void disconnect(struct usb_device*, void*) 当 Linux正常启动后,必须加入 USB摄像头的 驱动模块,在控制终端使用如下命令: modprobe usb_ohci //加载ohc主机控制器模块 modprobe usb_core //加载usb核心模块 modprobe videodev //加载V4L接口模块 modprobe ov511 //加载数码摄像头芯片驱动模块 加载 videodev 和 ov511 模块后将为摄像头 V2000 创建设备文件/dev/v4l/device0,这样就可以 驱动 V2000,然后编写视频采集程序。 2.2 USB数码摄像头视频采集编程 Linux内核针对 USB数码摄像头等视频设备提 供 V4L接口函数。V4L提供针对视频设备进行基本 I/O 操作的接口函数如 open、read、write、close、 中断处理、内存映射及 I/O 通道的控制 ioctl 等, 并定义在 struct file_operations 数据结构体中。当 应用程序对设备文件进行诸如 open、close、read、 write 等系统调用操作时, Linux 内核将通过 file_operations 结构访问驱动程序提供的函数接 口。具体的采集程序如下: (1) USB摄像头视频采集如图 4。 (2) USB摄像头设备数据结构的定义。 typedef struct { int fd; //设备文件描述符 int use_mmap; // 0-不使用内存映象, 1-使用 int width,height; //每帧图像的宽度和高度 int frame_rate; //采集帧的速率 struct video_capability capability; struct video_picture picture; struct video_window vwin; struct video_mmap vmmap; struct video_mbuf vmbuf; unsigned char *frame_buffer; } v4l_device; (3) USB摄像头设备操作函数的设计 int camera_open(char dev,v4l_device *vd); int camera_close(v4l_device *vd); int camera_get_capability(v4l_device *vd); int camera_get_picture(v4l_device *vd); int camera_pict_init(v4l_device *vd); unsigned char *camera_grab_image(v4l_device *vd); int camera_mmap_init(v4l_device *vd,int width,int height); int camera_get_mbuf(v4l_device *vd); 开始 图 4 Linux下视频采集流程 开启视频设备 camera_open() 获取设备信息和图像信息 camera_get_capability() camera_get_picture() camera_get_mbur() 初始化内存映射信息 camera_mmap_init() 设置颜色模式 camera_pict_init() 采集视频帧数据 camera_grab_image() 帧数据处理 是否中止视频采集 关闭视频设备 camera_close() 结束 N Y V4L 为视频设备采集图像提供两种:① read()直接读取;② mmap()内存映射。read()通过 内核缓冲区来读取数据;而 mmap()通过把设备内存 映射到用户进程地址空间中,绕过内核缓冲区,所 以 mmap()方式加速 I/O 访问。另外,mmap()系统 调用使得进程间通过映射同一文件实现共享内存, 各进程可像访问普通内存一样对文件访问,访问时 只需用指针而不用调用文件操作函数。因此用 mmap()采集图像,重点讨论初始化函数(camera_ pict_init,camera_mmap_init, camera_get_mbuf)和采 集图像函数(camera_grab_image)。 camera_get_mbuf() //通过ioctl获取设备的图像帧信息 ioctl(vd->fd,VIDIOCGMBUF,&vd->vmbuf); camera_mmap_init() //设置图像帧的水平和垂直分辨率及彩色显示格式 //并且调用mmap进行内存映射 vd->vmmap.height=height; vd->vmmap.width=width; vd->vmmap.format=VIDEO_PALETTE_RGB24; vd->frame_buffer=mmap(0,vd->vm_buf.size, PORT_READ|PORT_WRITE,MAP_SHARD,vd->fd,0); 兵工自动化 测控技术 O. I. Automation 2006年第 25卷第 5期 Measurement and Control Technique 2006, Vol. 25, No. 5 ·73· camera_pict_init() //通过ioctl初始化颜色模式 vd->picture.depth=3; ioctl(vd->fd,VIDIOCSPICT,vd->picture) camera_grab_image() //利用内存映射方式实现图像的采集 for(i=0;ivm_buf.frames;i++) //摄像头连续采集支持的帧数 { vd->vmmap.frame=i; /*帧的序号*/ if(ioctl(vd->fd,VIDIOCMCAPTURE,&vd->vmmap)<0) //采集图像 { perror("VIDIOCMCAPTURE:"); return 0; } } vd->vmmap.frame=0; vd->capturing=1; //检查帧是否采集完成*/ if (ioctl(vd->fd,VIDIOCSYNC,&vd->vmmap.frame)<0); return vd->frame_buffer+vd ->vmbuf.offsets[vd->vmmap.frame]; 3 小结 按照这些函数和上述流程设计的视频采集程 序可适用于所有的视频设备,只需在 video_open() 中带相应的设备文件即可。经测试,在 50Kbps~ 100Kbps 的带宽下,对 CIF(352×288,30fps)格 式的视频有较好的表现能力。视频处理如 MPEG-4 压缩和视频传输(ASF 流格式),可组成一个网络 摄像机用于远程网络监控和网络视频会议,具有广 泛的应用前景。 参考文献: [1] 肖踞雄. USB技术及应用设计[M]. 北京: 清华大学出版 社, 2003. [2] ALESSANDRO RUBINI . LINUX 设备驱动程序[M]. 魏 永明, 等 译. 北京: 中国电力出版社, 2002. [3] Alan Cox. Video4Linux Programming. alan@redhat.com. 2000. [4] K Wall. GNU/LINUX编程指南[M]. 王勇, 等 译. 北京: 清华大学出版社, 2000. ************************************************************************************************* (上接第 68 页) 调制控制和 发光电路 接收光电 转换电路 接受放 大电路 信号整 形电路 调制振 荡器 图 3 红外光电反射式传感器的典型运用框图 发光和接收电路的伺服电路 传统调制型红外光电反射式传感器的典型运用 电路图,如图 4。 IC1-2 4011 C1 0.01µF IC1-1 4011 W1 22K R1 10K VCC +5V R2 300 R5 220 W2 1K CF NPN LED(发) VCC +5V R5 10K VCC +5V + - R7 100K LED(收) C4 0.1 C5 0.1µF + - R8 10K R9 100K R10 100K VCC +5V K2 IC2 LM339 OUT C34339 图 4 红外光电反射式传感器典型运用电路 在历年大学生电子设计大赛和机器人大赛 中,寻线小车大多数都是用反射式红外光电传感 器。较好效果寻线小车采用的是调制型红外光电传 感器电路。将电路里的三极管和低价位运放用 TL431替换后的电路如图 5。 IC1-2 4011 C1 0.01µF IC1-1 4011 W1 22K R1 10K VCC +5V R2 300 R5 220 W2 1K TL431 LED(发) VCC +5V R5 10K VCC +5V R6 200 LED(收) C4 0.1 C4 + - R7 100K R9 100K R10 100K VCC +5V IC2 741 OUT 图 5 含 TL431 的调制型红外光电传感器电路 100K R3 VCC +5V C5 2200P 6800P TL431 R9 150 R8 330k 因 TL431器件精度高、可靠性好和很宽的调整 范围,使整个电路的可靠性及调试性能得到提高。 2.2 在超声波接受电路中的应用 竞赛机器人在寻找目标的行走中有一个测距 功能,多数采用超声波传感器。超声波具有穿透性 强、方向性好、传输衰减小、反射能力强等特点。 超声波接受电路中放大单元电路通常采用三极管 或运放完成。研究中用 TL431 代替三极管或运放, 如图 6。 R6 200 C3 0.1 C4 + - R9 100K R10 100K VCC +5V IC2 741 OUT 图 6 TL431 构成的超声波接受电路 VCC +5V C5 2200P 6800P TL431 R8 150 330K R9 Y R40-16 3 结束语 三端并联稳压器 TL431 主要用于开关电源的 稳压控制电路,经红外光电反射式传感器电路和超 声波接受电路的调试证明它还可构成运算放大器。 基于 TL431 的应用电路很多,廉价稳定的 TL431 具有广泛的应用前景。 参考文献: [1] Michael O’ Loughlin. 三端并联稳压器的隐藏应用 [J]. 电子技术设计, 2005, 12 (6): 76-78. [2] 林萌森 . 集成运算放大器的使用技巧和应用[M]. 北京: 人民邮电出版社, 1990. [3] 冈村迪夫 . OP 放大电路设计[M]. 王玲 , 等 译 . 北京 : 科学出版社, 2004. [4] 宗光华, 等. 机器人创意设计与实践[M]. 北京: 航空航 天大学出版社, 2004.
/
本文档为【基于S3C2410的网络视频采集】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索