Posted on 2011-08-02 00:56
buf 阅读(8366)
评论(0) 编辑 收藏 引用 所属分类:
MFC 、
Misc
经过一番的google和折腾,终于把VLC ActiveX控件嵌入MFC窗口并实现简单的视频播放了,虽然发现很多问题(比如vlc参数设置[注1],程序关闭后进程不结束等等),觉得最终可能还是会选择libvlc或者activeX+C#,不过还是记录一下过程,如果你真要这么做的话。
环境:VC8.0,Windows XP SP3,VLC 1.1.11 ActiveX v2
step1. 新建一个基于对话框的MFC exe工程
step2. 从资源视图打开主对话框,鼠标右键客户区域,选择“插入ActiveX控件”:
从弹出窗口中找到“VideoLAN VLC ActiveX Plugin v2”,确定:
step3. 调整新加入控件至合适大小,右键,选择“添加变量”,变量名设置为vlcCtrl:
添加变量后,类视图中增加了CVlcplugin1,解决方案视图中也相应增加了CVlcplugin1.h和CVlcplugin1.cpp文件
step4. 在主窗口类的实现文件中添加#import "C:\Program Files\VideoLAN\VLC\axvlc.dll",编译时IDE会从中生成.tlh文件,包含了调用控件的接口信息
step5. 执行第一次编译,会出现VLCPlayListInsert、VLCPlayListXXX。。。重定义错误,打开CVlcplugin1.h,注释掉其中重定义的部分
step6. 执行第二次编译,还是会出现VLCPlayListInsert、VLCPlayListXXX。。。重定义错误,不过这次是在axvlc.tlh中,这是IDE从axvlc.dll生成的信息,无法直接修改,通过exclude选项忽略该错误:
#import "C:\Program Files\VideoLAN\VLC\axvlc.dll" exclude("VLCPlaylistMode")
再次编译就没有错误了。
step7. 为修改确定按钮的单击事件响应函数为:
void CvlcActiveXv2TestDlg::OnBnClickedOk()
{
AXVLC::IVLCPlaylistPtr plo(reinterpret_cast<AXVLC::IVLCPlaylist*>(vlcCtrl.get_playlist()), false);
plo->add("sample.avi");
plo->play();
}
编译运行:
>>>工程文件下载<<< 注1:
vlc 1.0及其以后的版本提供的activeX所支持的参数受到限制,"
sout feature is no more allowed through ActiveX since it can be used by crap web designer to mess/crash your computer.
",参见
vlc 1.0.0 activex streaming .net