一种多格式视频插件在图书馆的应用
2011-06-17高睿鹏
高睿鹏
(内蒙古工业大学 内蒙古 呼和浩特 010051)
我校图书馆近年来采购和收集了大量的教学、培训、学习等视频资料,为方便读者使用并保护这些资源的版权,准备通过视频点播网站向读者提供这些视频资源,供读者在线观看。图书馆引进的视频资料中包含了多种不同格式的视频文件,要为这些视频文件搭建视频点播服务,首先要解决播放插件不兼容的问题。目前解决这个问题主要有两种方式:第一种,对于不同格式的视频文件,采用不同的插件播放;第二种,利用格式转换软件,将所有格式转换为同一种格式。若采用不同播放插件,就需要为不同插件开发多个界面,而且日后的维护较为不便;若采用转换格式的方式,由于视频文件数据量一般较大,转换格式是一项耗费时间和资源的工作,而且转换格式后的视频质量可能不高,增加了系统的维护成本。
本文研究的多格式视频插件,可同时支持Rm/Rmvb、AVI、wmv/asf、MPEG、mkv 和 flv 等这些主流视频文件格式的视频插件,解决上述不足之处。
1 多格式视频插件的设计方案
1.1 插件框架
本文是在Windows操作系统下使用VC中的ATL(ActiveX Template Library,ActiveX模版库)做为开发工具,基于ActiveX插件技术开发视频插件。ActiveX技术是基于COM技术的一种插件开发技术,使用ActiveX开发的插件可以方便的嵌入网页或其他应用程序,扩展这些应用的功能。其中使用FFMPEG解码视频文件,使用SDL播放视频文件。
本文设计的ActiveX视频插件主要有以下几个方面:
(1)该插件能够嵌入网页浏览器或其他容器中使用,通过控件接口与网页浏览器通信,由网页浏览器提供视频文件的地址等属性。
(2)设计控件接口的方法,使用FFMPEG编解码库实现解码视频文件,使用SDL多媒体库实现播放视频,以及播放控制功能。
(3)由于解码和播放是同时进行,所以建立多个线程,每个线程分别完成解码和播放功能。
1.2 解码视频
视频文件有多种格式,每种文件格式使用不同的方式封装了音频流和视频流,而音频流和视频流又由不同编码器编码生成。解码视频是将视频文件的音频流和视频流解码成音频帧和视频帧,分为解码音频模块和解码视频模块。
本文使用FFMPEG多媒体库分析视频文件,并解码其中的音频流和视频流。FFMPEG多媒体库支持包括MPEG系列在内的众多视频压缩标准和数十种常见的音视频文件格式,是一套比较完备的格式转换、压缩编码、视频音频文件播放的解决方案。
解码视频包括解码音频模块和解码视频模块,因为音频和视频的解码需要同时进行,所以把解码音频和解码视频分配到两个线程中并行执行。
控件主进程负责对FFMPEG库和SDL进行初始化,创建解码线程,从视频帧队列取出并显示视频帧以及等待并响应线程发出的事件。
解码线程完成将视频流和音频流分离,将视频包和音频包分别放入视频包队列和音频包队列,并创建视频线程和音频线程。
音频线程完成解码音频包得到音频帧并播放声音。
视频线程完成解码视频包得到视频帧,并将视频帧加入到视频帧队列。
1.3 播放视频
播放视频是将解码的音频帧和视频帧通过音频和视频设备播放出。播放声音和显示视频都使用SDL多媒体库实现,SDL多媒体库是一个跨平台的多媒体底层存取库,可以直接控制底层的多媒体硬件的接口,用于编写音频视频应用和游戏等。
在播放过程中主要解决音频与视频的同步问题,以及播放控制。音频与视频同步是通过比较视频帧的显示时间戳与音频播放时间,调整视频帧的显示时间,实现视频与音频同步。播放控制主要有快进快退和暂停功能。快进快退通过清空当前帧缓存,根据新的位置重新向帧缓存中添加帧实现;暂停功能则是将解码线程和播放线程都挂起,暂停工作,等待恢复播放信号出现后再继续播放。
2 多格式视频插件的应用
在系统中注册插件后,可通过如下代码在网页种调用本插件:
其中 “4296D608-0847-4AD9-9BF7-934B4E4298DB”是该插件在系统中的标识符,通过此标识符可找到需要调用插件的dll文件。
Codebase表示若客户机没有安装此插件,可以从codebase指定的地址下载插件的安装包,客户机在下载安装包后自动安装并注册插件。若客户机以安装插件则直接调用插件。
插件的调用方法与调用WMP控件和RealPlayer控件基本相同,只需要改变claasid参数即可。所以,此插件可以方便的应用于使用播放控件的视频点播系统,而且能兼容各种格式的视频文件,极大的节省了视频点播系统的管理成本。
3 总结
本文研究的多格式通用视频插件是在Windows系统中,Visual Studio集成环境下,使用ActiveX技术开发,利用FFMPEG编解码库对多种视频文件格式以及视频编码的支持, 实现可同时支持 Rm/Rmvb、AVI、wmv/asf、MPEG、mkv 和flv等多种主流视频文件格式的通用视频插件,整个插件采用多线程的方式,各个线程分别完成不同功能模块。
在图书馆视频点播系统中应用该插件,可方便的发布各种格式的视频文件,无需转换格式,提高了图书馆视频点播系统维护工作的效率,也方便了读者及时观看最新的视频文献。
[1]求是科技.Visual C++音视频编解码技术及实践[M].北京:人民邮电出版社,2006.
[2]蒋志峰.ffmpeg的快速音视频开发方法[J].单片机与嵌入式系统应用,2008,1:69-71.
[3]刘马飞,曾学文,倪宏.Windows平台下应用FFMPEG实现H.264视频回放[J].微计算机应用,2008,29(11):61-65.
[4]FFMPEG 官方网站.http://ffmpeg.org/index.html[OL].
[5]SDL 官方网站.http://www.libsdl.org[OL].
[6]视频技术论坛.http://bbs.chinavideo.org/[OL].