基于ARM9的视频采集传输系统
即将对音频文件cat.wav和原始的yuv视频文件编码生成cat.mpg,如果没有输入数据文件,则音视频捕捉设备就将起作用,说明所需要的交叉编译生成的FFM-PEG库可以正确地运行。 这个函数的最后3个参数分别定义了文件的格式、缓冲区的大小和格式的参数;在这里赋值NULL和0来指定libavformat库函数自动检测格式和使用默认的缓冲区的大小。然后就可以读取文件的流信息: 来填充AVFormatContext中关于流区域的内容,接着通过一个循环寻找到第1段视频流: 这样就可以读取视频流的内容来指定选用的编解码器并将编解码器打开: 这里的定义CODEC_CAP_TRUNCATED是指当视频流被分割成小的数据包以后,由于每一帧视频的数据量会发生变化,这就需要两个视频帧的边缘与数据包的边缘匹配,因此在这里定义这个宏来告诉编码器该如何处理它。最后调用avcodec_alloc_frame()函数来分配帧缓冲。 
2.4 视频采集编码程序的关键技术
在设计视频采集程序时主要使用FFMPEG的libavformat和libavcodec这两个函数库,许多视频文件格式一般只是定义如何将音视频流编码进一个独立的文件,而不明确指出其使用的编码工具,libavformat库的功能主要是分析视频文件的语法格式,并将它从流中分离出原始的音视频流,libavcodec库的功能则是按照流格式处理原始的音视频流编解码。
在使用libavformat/libavcodec库函数对视频文件进行处理时,首先通过调用av_register_all()函数对其初始化,这个函数中定义了所有库所能支持的文件格式和编码器,因此当读取一个文件时,通过调用此函数来自动使用所对应的格式或者编码库。视频文件打开则通过av_open_input_file函数来实现: 




在编码端需要使用libavformat库函数来读取这些数据包,滤除掉不需要的非视频流数据,然后循环调用libavcodec库函数GetNextFrame(AVFormatContext *pFormatCtx,AVCodecContext * pCodecCtx,int video-Stream,AVFrame * pFrame)来处理每帧数据进行编解码。
视频采集端采用从Video4Linux视频设备源中捕捉视频帧,Video4Linux是Linux下用于获取音频和视频的API接口,现有的Video4Linux有v41和v412两个版本,我们采用v4l进行编程,在Linux下,将所有外没都看做一种特殊的文件,称之为设备文件,因此利用v4l API获取视频图像可以通过调用open、ioctl等函数,像对普通文件一样对硬件进行初始化、设置硬件属性和调用硬件中断等操作。在打开视频采集设备后,分别通过ioctl(vd->fd,VIDIOCGCAP,&(vd->ca-pability))函数的VIDIOCGCAP控制命令,来获取关于视频采集设备所能显示的最大图像大小,信号源的通道数和通过ioctl(vd->fd,VIDIOCGPICT,&(vd->picture))的VIDIOCGPICT来获取一些关于图像的亮度、对比度等信息。Video4Linux方式获取视频图像的方式有overlay和mmap两种,在这里采用了MMAP方式,MMAP方式允许直接将设备内存映射到用户进程的地址空间中,这样就可以直接在进程中读写内存来控制设备。在使用libavformat/libavcodec库从Vide-o4Linux视频设备源中捕捉视频帧时需要调用av_open_input_file()函数,因此,最后还需要修改此函数中的设备属性配置,使之与我们所选用的没备相对应。
3 测试结果及展望
在这里使用了ffserver流媒体服务端组件来实现流媒体传输,首先需要配置ffserver.conf文件中关于服务端主机的端口号、传输带宽、延迟,流媒体文件属性等信息。然后启动ffserver读取配置文件,就可以在接收端通过WMP(Windows Media Player)输入服务端URL看到实时采集的视频图像。经测试,目前该嵌入式流媒体服务器在传输MPEG-4视频时的帧率可以达到20帧/s,接收端观察图像流畅,画面清晰。
本文提出了一种基于ARM9架构MC9328MX21的嵌入式系统上实现MPEG-4流媒体视频采集传输系统,通过在ARM-Linux操作系统下移植libavformat/libavcode库,利用该函数库良好的可移植性和Video4Linux完成了本地视频图像的采集、编码等功能,并向网络发送流媒体打包数据。该系统具有实时性好、可移植性强、低功耗和可远程移动控制嵌入式系统的特点,并且采用软件实现其主要功能,有利于系统的二次开发及升级,其应用范围和前景将非常广阔。
- 基于T-DMB的手机电视软硬件设计(10-28)
- 模拟视频滤波技术(02-17)
- 基于FPGA的数字视频转换接口的设计与实现(02-07)
- 基于ARM平台的远程视频监控系统的研究(04-22)
- 基于NiosⅡ软核的嵌入式多路视频点播系统(04-23)
- 视频监控中ARM与DSP的HPI接口设计(05-10)
