陈天喜,刘黎明,陈凯
(株洲中车时代电气股份有限公司,湖南株洲,412001)
基于FFMPEG的跨平台视频编解码研究
陈天喜,刘黎明,陈凯
(株洲中车时代电气股份有限公司,湖南株洲,412001)
视频监控系统在生产、生活及社会安全中发挥着越来越重要的作用,各行各业对其需求也越来越高。本文介绍了企业中视频监控系统可用于监管全企业的运行状态,也可应用传感器等实现生产线状态监控、反馈和调整;阐述了视频解编码技术对视频文件的编码解码,实现视频存储、调用、分析处理及终端播放等功能;最后针对FFMPEG多媒体跨平台的视频编解码技术进行了详细的阐述。本文的思想可供同行参考借鉴。
FFMPEG;视频编解码;跨平台;监控系统
视频监控系统,特别是智能型视频监控系统应用越来越广泛,成为生产智能化、智能家居、社会安全与办公场所自动监控的重要装备。在实际应用过程中,可以对监测的对象实现实时监测,同时还可以对监测的数据信息进行保存,乃至预警,为调取相关的视频数据信息、及时处理相关情况提供保障。
FFMPEG是在LGPL/GPL协议下发布的,任何人都可以自由使用,但必须严格遵守LGPL/GPL协议。如果软件使用了FFMPEG的代码,一定要遵守LGPL/ GPL协议,且公开源代码。这种开源软件的发展趋势前景良好。
FFMPEG是Fast Forward Mpeg的简称,属于多媒体跨平台软件,其主要功能是将音频、视频等数据信息进行一定的记录和转化,同时它还可以将音频、视频文件进行压缩编码和解码复原,以实现音频和视频数据的传输。FFMPEG的支撑与开发平台是Linux,它可支持的编码高达40多种,如MPEG、DivX、MPEG4、FLV等,而其可以支持的解码多达90多种,如AVI、MPEG、OGG等。这说明该程序的应用范围比较广泛,且功能上也比较完善,因而在社会生产生活中发展十分迅速。
FFMPEG程序的开发、模块库、应用模式等还需要进一步完善。在实际的使用过程中,相关技术、设备及其先进性还有待进步。其中,对于我国大部分的视频监控设备来说,其画面的质量还比较低,同时在进行实时监测的过程中,比较容易发生一些技术问题,这就在一定程度上影响了视频监控的进行,因此应当切实加大对其中存在问题的研究力度,以切实提高我国视频监控的水平[1]。
为了保障客户端与服务器之间的信息传输,系统使用了C/S的设计模式。具体工作流程如下:
(1)当客户端收到服务器发出的监听指令之后,会对该指令进行一定的验证,只有验证通过,客户端才会与服务器进行连接;
(2)连接成功后,客户端会自动开启摄像头,并同时将监测得到的视频数据信息进行记录、保存。这时所记录的视频数据信息是Rgb565格式的,因此为了实现数据信息的传输,会将数据信息的格式进行一定的转换;
(3)视频数据信息格式转化完成后,会使用FFMPEG程序将数据信息进行压缩,之后其格式会转换为H.263格式类型的视频;
(4)压缩所得到的视频文件会利用通信网络的传输功能,将文件信息传送至服务器终端的电子计算机中;
(5)当终端接收到视频文件后,再次利用FFMPEG程序的解码功能,将视频文件进行解码处理[2]。最终通过VFW将所监测到的视频资料呈现在显示器中。
通过整个运行过程进行研究分析发现:该系统利用到了FFMPEG的压缩编码和解码的功能,且与FFPMEG配套的软件操作比较简单,视频监控系统实际应用方便。
对于系统客户端而言,其主要的功能首先是建立平台,搭建嵌入式Linux平台;其次就是建立一个交叉的编译环境。只有保证这些基本的准备工作完成,才可以启动摄像头开启的程序;最后就是将摄像头收集到的视频信息通过FFMPEG程序进行压缩编码,当收到监听服务器的监听指令后,将数据信息传输给服务器端。
3.1嵌入式Linux平台
客户端在搭建嵌入式Linux平台时,主要的步骤流程如下:首先,利用H-JTAG程序在短时间内编译BIOS到相应的开发板中;其次,将Nand Flash进行格式化处理;再次,将Bootloader完成安装;最后再,将内核的文件进行安装,完成以上步骤之后再将文件系统进行安装。
3.2交叉编译环境的搭建
当嵌入式Linux平台搭建完成后,就开始进行交叉编译环境的搭建。一般情况下,在该平台下要对内核、Bootloader以及一些其它程序进行编译,且这一过程中离不开交叉编译工具的支持。
3.3摄像头的配置介绍
由OmniVision公司所研制的CMOS系列OV9650型号的摄像头,在实际的应用过程中能够与S3C2440相匹配。该型号的摄像头的像素达到了130万,且其输出的视频图像的格式比较多样化,例如主要包括了SXGA、VGA、QVGA等,同时由于其具有加窗的功能,这样就可以根据需要选择不同大小的图像。由于该摄像头可以输出多种格式类型的图像,因此不同格式图像之间的最高输出帧率是具有一定差异的,其中最高达到120 fps.
在Linux平台中,OV9650型号的图像传感器是充当字符设备进行描述的,在启动摄像头的过程中,传感器相应的驱动程序会为一个流动控制接口提供相应的应用程序,这时用户就可以利用相应的设备文件实现与硬件之间的数据信息传输,因此从本质上来讲,在对有关的设备文件进行使用的过程时就是对相关系统进行了调用[3]。用户一旦想要将系统的调用和有关的设备驱动程序结合起来,那么就必须用到Struct file_operations这一个关键的数据结构。因此从专业角度来说,设备驱动的编写主要就是将数据结构中的子函数进行一定的编译,并将其填充至file-operation的各个域中。为了在开发阶段尽量避免多次烧写内核,可以利用Insmod的命令来进行驱动程序的加载,当驱动模块完成相应的加载之后,便可以对摄像头的数据信息进行收集、处理等程序,例如设计相应的编译码来启动摄像头等。最后将所收集到的视频信息数据利用FFMPEG程序进行压缩编码。
3.4FFMPEG编码的介绍
在对视频数据信息进行FFMPEG编码的过程中,首先应当将该程序进行初始化的处理,并将所使用到的所有编解码器完成注册,同时还应当将码率、帧速率、图像的格式以及其分辨率等进行提前的设定,只有完成这些准备工作,才能开始编码。从另一层面来说,这些准备工作的有效完成也是编码顺利完成的保障。在编码过程中可以通过设置videocodec的值来进行编码器的设置工作,例如anfmt->video-codec=CODEC-ID-H263来完成H.263编码器的设置。其具体的客户端编码步骤如图1所示。
图1 客户端编码步骤图
通过以上的步骤可以完成H.263的视频流,而摄像头所收集到的数据信息的格式是rgb565,因此必须先实现其向rgb888的格式转换,之后再向yuv420的格式转换,最后再经由FFMPEG程序进行压缩编码,最终成为了H.263的视频格式。
前面已将客户端的主要工作及工作的编码程序进行了详细地说明,而对于服务端而言,其主要的任务就是对涉及到的所有客户端进行实时的监控,同时还可以根据实际的需要对任何一个客户端进行监控。服务器端在接收客户端传输的数据信息后,会利用FFMPEG程序将数据信息进行解码,并最终将其显示于显示器中。
在利用FFMPEG程序对视频信息数据进行解码的过程中,首先应当将FFMPEG进行初始化处理,并将使用到的编码器完成相关的注册。其次还应当对解码器进行配置,并对解码的图像的像素格式进行一定的设置,完成这些准备工作之后,才能够对视频数据信息进行解码。服务器端对视频数据信息进行解码的步骤如图2所示。
图2 服务器端解码步骤
4.1服务器端解码
前面已经知道客户端传输的视频流的格式是H.263,对其进行解码与普通的文件解码是存在一定的差异的,这主要是因为将进行解码数据的长短是不确定的,而为了解决这一难题,可以设置一个线程来主要完成解码工作,另外也可以设置一个FIFO队列来进一步完善解码的流程[4]。这样当对视频流进行解码时,服务器端接收的数据信息会不间断地进入到FIFO的队列中,之后只要从最开头的位置调取固定的数据字节进行解码既可。但是经由FFMPEG程序完成的解码其格式是YUV,因此为了保障在显示器显示正常应当将这种格式转换成RGB格式。
4.2服务器端显示
一般来说,显示的视频使用的都是VFW,且其应用的核心函数是Draw DibDraw。对于这种函数来说,一般具有13个主要的参数,其中主要的参数就是第7个、第8个。第7个参数,是将位图的头信息进行编译,而第8个参数,是将RGB的图像数据进行编译的。另外应当注意的是在使用DrawDibDraw时,应当对图像数据进行反向的操作,在这一过程中尤为注意的是应当对图像的宽度值进行明确,之后再进行相关的操作。
对于本次实验来说,其运行的环境是3G的通信环境,其数据流格式为H.263,因此应当将所使用通道的数据流进行一定的设置,并将其分辨率也进行一定的设置,本次实验中的分辨率设置为QCIF(176*144),而对于其他参数的设置,应当根据实际的情况来完成,例如在对码率进行设置的过程中,应当事先对拍摄的实际视频情况进行分析,继而再对相关的数据进行设定。对于3G的通信环境来说,其带宽一般为48 kB/s,因此在对码率进行设定的过程中,其值不允许超过该数值[5]。如果用户想要得到较为流畅的视频画面,可以适当地将帧率进行一定的增加;如果用户想要的是将视频监控中移动的物体进行突出显示,可以将适当地将关键帧的比例进行一定的增加,但是需要注意的是在调整的过程中切忌超过系统的带宽。
综合全文所述,视频监控系统对于今天的社会生产和生活具有十分重要的作用,因此应当加大对该项技术的研究力度,切实提高视频画面的质量,以满足当下社会发展对其的迫切需求。然而,据目前情况来看,视频监控系统在实际的应用过程中仍旧存在一定的问题,例如画面不流畅、画面不清晰等。为了切实解决这些问题,应当加大对FFMPEG技术的研究,以推动我国视频监控技术的研发与进步。
[1]辛长春.基于FFMPEG的远程视频监控系统编解码[J].电子技术,2013(01): 3-5.
[2]施惠娟.基于FFMPEG的视频水印系统[J].电子设计工程,2013,21(23): 185-187.
[3]何圆圆.基于FFMPEG的H.263视频解码器的研究与实现[J].电脑知识与技术,2012(35): 8519-8521.
[4]张正华.基于H.264的嵌入式视频解码研究[J].无线电工程,2013,43(1): 46-49.
[5]刘嘉.基于PPMPEG的AVS视频播放器设计与实现[J].郑州轻工业学院学报,2015(3): 75-78.
Research Cross-platform Video Code Based on the FFMPEG
Tianxi Chen, Liming Liu, Kai Chen(Zhuzhou Zhongche Times Electric Limited Co., Ltd., Zhuzhou, Hunan, 412001, China)
Video monitoring system has played an increasingly important role in social security, production,life and so on, which is under higher and higher demand. This paper introduces the video monitoring system which can be regulated in the whole enterprise operation state, also be used sensors to achieve production line condition monitoring, feedback and adjustment. Expounds the video coding technology solutions for video file coding decoding, realize the video storage, load, analysis, processing and terminal play functions. Finally, based on FFMPEG cross-platform multimedia video codec technologies are described in detail. This paper has reference value for peers.
FFMPEG; Video Codec; Cross Platform; Video Monitoring System
TP277
A
2095-8412 (2016) 04-805-04
工业技术创新 URL: http://www.china-iti.com 10.14103/j.issn.2095-8412.2016.04.061
陈天喜(1981-),工程师,轨道交通信息系统。E-mail: chentx@teg.cn
刘黎明(1979-),工程师,轨道交通信息系统。E-mail: liulm@teg.cn
陈凯(1984-),工程师,轨道交通信息系统。E-mail: chenkai@teg.cn