张立平
(武汉铁路职业技术学院电子电气工程系,湖北武汉 430205)
随着流媒体播放、视频监控等应用程序的开发被普遍应用,H.264被认为是最有影响力的流媒体视频压缩标准。它既保留了以往压缩技术的优点和精华,又在编码质量和压缩比上比原有的视频编码标准都有了明显的提高。在相同的视觉感知质量上,H.264 的数据压缩比比当前DVD系统中使用的MPEG-2高2~3倍,比MPEG-4高1.5~2倍。由于H.264/AVC 采取了大量的先进算法,在编码效果和实现复杂度之间取得了良好的平衡[1-4]。正因为如此,目前网上大部分视频是基于H.264视频标准的。
传统的影音播放器没有播放H.264文件的功能,即使通过升级实现该功能,但使用时需安装,用户不方便。针对此问题,作者利用FFOCX控件在Delphi中实现了H.264视频的解码。
FFmpeg是一套用于录制、转换和流化音频、视频的完整解决方案,而FFOCX 是对FFmpeg库的完美封装和扩展后的ActiveX OCX 版,支持目前所有的音视频格式。FFOCX 能够充分发挥FFmpeg库的强大功能,并且比FFmpeg官方所提供的命令行程序更灵活、强大,比如支持转换预览,支持视频合并,支持帧输入、帧输出,还支持同时转换多个文件,可以充分利用现在越来越普及的多核CPU 资源[5]。FFOCX 控件名为ActiveFFmpegControls.ocx,可以从www.ccavc.com 网站下载。
普通的H264播放器一般具有播放、暂停、停止、音量调节等功能。一个简单的H264播放器包含以下3个部分:
(1)播放窗口:用于播放H264视频文件。
(2)播放控制:包括播放、暂停、停止以及音量控制等。
(3)显示播放信息:如视频格式、帧格式、播放时间、目前播放时间等。
在用户界面中,包含视频播放窗口、水平滑块(调节视频播放位置)、列表(设置视频播放比率以及控制视频播放的按钮。在播放视频时,显示播放时间等信息。
FFOCX 控件在Delphi中不能直接使用,必须先注册(使用Regsvr32命令)并安装后才能使用。Delphi2010中安装ActiveX 控件的方法如下[6]:
(1)注册FFOCX 控件。
执行regsvr32 ActiveFFmpegControls.ocx命令,可完成注册。
(2)启动Delphi2010。
(3)选择File→New→Package-Delphi for Win32菜单命令,新建一个包。
(4)选择Component菜单下的Import Component命令,打开Import Component对话框。
(5)选择Import ActiveX Control单选项,单击“Next”按钮,弹出“Registered ActiveX Controls”。
(6)在对话框中选择“ActiveX FFmpeg Control 3.0”。
(7)单击“Next”按钮,弹出控件的Unit等存放位置对话框,选中“Generate component wrappers”复选框。
(8)单击“Next”按钮,弹出“Create Unit”对话框。
(9)选择“Add Unit to package”单选项,单击“Finish”按钮,完成安装。
(10)在项目管理器中用鼠标右击Package,从弹出的快捷菜单中选择“Install”命令,完成Package的安装。
(11)Delphi2010 中添加FFOCX 控件成功后就可以在Delphi2010窗口中添加该控件了,该控件位于组件面板的ActiveX 控件类中,包括FFEncoder、FFPlayer、FFDecoder、FFLogger、FFLoader。* FFEncoder用于音频和视频格式的转换。
*FFPlayer用于播放音频和视频文件。
*FFDecoder用于获得媒体文件信息以及解码视频帧画面或音频采样数据.
*FFLogger捕获其他组件输出的日志。
*FFLoader用于运行时期加载动态库。
文中是使用FFPlayer控件开发的简单音视频播放器。
(1)新建一个基于对话框的VCL Form Application 名为Player_H264 的应用程序,窗体Caption属性设为“简单音视频播放器”,其项目名称为playerh264。调整窗体至合适大小。
(2)添加控件。
①将组件面板ActiveX控件类中的FFPlayer控件添加到窗体中,该控件用于播放视频文件。
②在窗体上添加1个打开文件对话框控件(Opendialog)。
③在窗体上添加1个面板控件(Panel)、1个ScrollBar控件、1个TrackBar控件、1个ListBox控件、4个按钮控件、5个Label控件和1个Com-BoBox控件,控件名取默认值。Panel控件窗口用于播放视频,ScrollBar控件用于控制视频播放进度,TrackBar控件用于控制播放声音。
(3)调整各控件至合适大小,效果如图1所示。
图1 添加控件效果
(1)主窗口代码
(2)音视频文件播放窗口代码
运行程序,结果如图2所示。
图2 运行结果
FFOCX 控件具有丰富的功能,能实现目前所有音视频格式文件的播放。www.ccvac.com网站提供了两种格式的组件,一种是OCX 控件,其最高版本为3.0,适用于目前所有开发环境;另一种是针对Delphi 开发平台的,控件名为FFVCL,并提供了丰富的事例程序。本文开发的简单音视频播放器使用的是OCX 控件,读者可以使用此控件设计出属于自己的功能强大的媒体播放器。
1 刘辉,魏玉琛,蒲布.基于Directshow 的H.264解码器的设计与实现[J].电子技术应用,2011,37(9):139-141,148.
2 程少炼,陈林.基于Directshow 的H.264流媒体播放器设计[J].山西电子技术,2010,6:65-67.
3 吴杰,吴宁,周阳等.基于H.264的网络流媒体播放控件的设计与实现[J].南京师范大学学报(工程技术版),2011,11(4):53-56.
4 张前进.基于RTP 的H264实时传输系统的设计与实现[J].企业技术开发,2011,30(23):1-2.
5 www.ccvac.com.
6 向隅.基于Delphi的PDF文档显示的实现[J].长江大学学报(自然科学版),2009,6(2):252-254.