VLC全称为VLC Media Player ,是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。它同时提供了ActiveX控件,可进行二次开发,实现一个多媒体播放器。下面以简单易用的VFP语言为例,制作一个简易播放器。
首先需要下载安装VLC,请使用其最新版本。下载地址:VLC: Official site - Free multimedia solutions for all OS! - VideoLAN
安装后即自动注册了ActiveX控件,可在程序中调用。
一、界面设计。先从表单控件列表中选中VLC控件放到表单中并调整位置、大小。其余控件如下图,依次放到表单中并调整布局。
二、各控件的代码(设VLC控件的name属性为olebfq)
1、“打开”按钮的click代码:
F=GETFILE()
IF EMPTY(F) THEN
RETURN
ENDIF
F='file:///'+CHRTRAN(F,'\','/')
THISFORM.olebfq.OBJECT.playlist.items.CLEAR
vid=THISFORM.olebfq.OBJECT.playlist.ADD(F) &&添加到播放列表
IF vid>=0 THEN
THISFORM.olebfq.OBJECT.playlist.playItem(vid) &&播放刚加入的媒体
THISFORM.olebfq.OBJECT.VOLUME=80 &&音量设为80
ENDIF
2、“信息”按钮的click代码:
vmess="版本:"+thisform.olebfq.obJECT.VersionInfo+CHR(13)+CHR(10)
vmess=vmess+'音轨数:'+TRANSFORM(thisform.olebfq.obJECT.audio.count)+CHR(13)+CHR(10)
vmess=vmess+'当前音轨:'+TRANSFORM(thisform.olebfq.obJECT.audio.track)+CHR(13)+CHR(10)
vmess=vmess+'当前通道:'+TRANSFORM(thisform.olebfq.obJECT.audio.channel)+CHR(13)+CHR(10)
vmess=vmess+'播放列表数:'+TRANSFORM(thisform.olebfq.objECT.playlist.itemCount)+CHR(13)+CHR(10)
vmess=vmess+'当前播放:'+TRANSFORM(thisform.olebfq.objECT.playlist.currentItem)+CHR(13)+CHR(10)
vmess=vmess+'文件名:'+thisform.olebfq.objECT.mediaDescription.title
thisform.edit1.Value=vmess
**显示字幕
thisform.olebfq.oBJECT.video.marquee.text='当前播放:'+thisform.olebfq.objECT.mediaDescription.title
thisform.olebfq.oBJECT.video.marquee.color=0xFFFF00
thisform.olebfq.oBJECT.video.marquee.enable &&启用
thisform.olebfq.oBJECT.video.marquee.position='top-left' &&中心center,左left,右right,顶部top,左上角top-left,右上角top-right ,底部bottom,左下角bottom-left,右下角bottom-right
**显示图标(png格式透明图片)
thisform.olebfq.oBJECT.video.logo.file('123.png')
thisform.olebfq.oBJECT.video.logo.enable &&启用
thisform.olebfq.oBJECT.video.logo.position ='top-right' &&右上角
3、“播放”按钮的click代码:
thisform.olebfq.oBJECT.playlist.play
4、“暂停”按钮的click代码:
thisform.olebfq.oBJECT.playlist.pause
5、“停止”按钮的click代码:
thisform.olebfq.oBJECT.playlist.stop
6、“静音”按钮的click代码:
thisform.olebfq.object.audio.toggleMute()
7、“上一首”按钮的click代码:
thisform.olebfq.objECT.playlist.prev
8、“下一首”按钮的click代码:
thisform.olebfq.objECT.playlist.next
9、音轨选项的InteractiveChange事件的代码:
thisform.olebfq.oBJECT.audio.track=this.value &&超出媒体音轨数目(用thisform.olebfq.obJECT.audio.count可获取)将出错
this.Parent.cmdmess.click &&触发“信息”按钮
10、立体声选项的InteractiveChange事件的代码:
thisform.olebfq.obJECT.audio.channel=this.Value
this.Parent.cmdmess.click &&触发“信息”按钮
11、在VLC控件的MediaPlayerPlaying事件中的代码:
this.Parent.cmdmess.click &&触发“信息”按钮
12、在VLC控件的MediaPlayerPositionChanged事件中的代码:
thisform.lbljdsj.Caption="posi:"+TRANSFORM(position)+"|time:"+TRANSFORM(this.oBJECT.input.time)+'|length:'+TRANSFORM(this.oBJECT.input.length)+'|state:'+TRANSFORM(this.oBJECT.input.state)
这些代码是动态记录媒体播放的进度,包括总时间和当前时刻的时间。其中position是该事件传出的参数,它的值很有意思,总是0到1之间,这就可以直接用来做一个进度条,将它乘以进度条容器的总长度即可动态显示当前进度条的长度,无需进行其他计算。
以上代码完全可以实现常用的播放器功能了。其中,笔者最感兴趣的是VLC的音轨、字幕、图标这几个功能,之前见到的各种播放器控件,包括WMP、MCI等都没有这么有趣的功能,十分难得。比如音轨,它与立体声、左右声道的概念是不同的,许多卡拉OK歌曲是通过改变音轨来切换原唱和伴奏的,只有古老的VCD视频才是通过切换左右声道来切换原唱与伴奏,因此VLC的这个功能就可以让你实现K歌点播功能!此外你还可以在视频中打上自己的字幕,以及打上自己的Logo图标。上文中已在“信息”按钮的代码中演示了字幕和图标功能。
更有趣、更强大的功能有待各位读者发挥想象力去深度开发,笔者在此仅作抛砖引玉。
补充说明:安装64位的VLC,发现其activex控件无法调用,改为安装32位后调用正常。特此补充。