最近在写一个视频点播程序,基本思路是根据用户选择把视频文件添加到Windows Media Player的当前播放列表并播放。我用Delphi的Import ActiveX向导导入了wmp.dll(Windows Media Player Control 1.0),但是觉得这个组件的功能比起Windows Media Player本身要少很多,例如,这个组件只能以特定速度快进快退,而WMP本身则可以有几档速度快进快退。于是我想利用WMP本身来播放文件。查资料得知,可以使用WMP Control的“remote”模式来显示完整的播放器。我做的尝试不太成功,请高手解惑:1. 向播放列表添加文件失败var
wmpPlayer: TWindowsMediaPlayer; // TWindowsMediaPlayer是向导自动生成的Wrapper类
media: IWMPMedia;
begin
media := wmpPlayer.newMedia('C:\Test1.wmv'); // 这句出错
//media := wmpPlayer.mediaCollection.add('C:\Test1.wmv'); // 这句顺利执行
wmpPlayer.currentPlaylist.appendItem(media);
end;2. 实现远程模式根据MSDN,我手工修改了向导生成的WmpLib_TLB.pas,把TWindowsMediaPlayer类修改为TRemotedWindowsMediaPlayer,为TRemoteWindowsMediaPlayer类实现了IServiceProvider及IWMPRemoteMediaServices接口,并重新编译安装成功。运行后,检查wmpPlayer.isRemote,返回值为True。(这证明Remote模式已经实现?)但是以下代码出错:var
wmpPlayer: TRemotedWindowsMediaPlayer;
wmp4: IWMPPlayer4;
app: IWMPPlayerApplication;
begin
if wmpPlayer.isRemote then begin
wmp4 := wmpPlayer.ControlInterface;
app := wmp4.playerApplication; // 这句出错
app.switchToPlayerApplication;
end;
end;找了很久都不知道原因在哪里,难道是Bug?
wmpPlayer: TWindowsMediaPlayer; // TWindowsMediaPlayer是向导自动生成的Wrapper类
media: IWMPMedia;
begin
media := wmpPlayer.newMedia('C:\Test1.wmv'); // 这句出错
//media := wmpPlayer.mediaCollection.add('C:\Test1.wmv'); // 这句顺利执行
wmpPlayer.currentPlaylist.appendItem(media);
end;2. 实现远程模式根据MSDN,我手工修改了向导生成的WmpLib_TLB.pas,把TWindowsMediaPlayer类修改为TRemotedWindowsMediaPlayer,为TRemoteWindowsMediaPlayer类实现了IServiceProvider及IWMPRemoteMediaServices接口,并重新编译安装成功。运行后,检查wmpPlayer.isRemote,返回值为True。(这证明Remote模式已经实现?)但是以下代码出错:var
wmpPlayer: TRemotedWindowsMediaPlayer;
wmp4: IWMPPlayer4;
app: IWMPPlayerApplication;
begin
if wmpPlayer.isRemote then begin
wmp4 := wmpPlayer.ControlInterface;
app := wmp4.playerApplication; // 这句出错
app.switchToPlayerApplication;
end;
end;找了很久都不知道原因在哪里,难道是Bug?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货