buf

BE something YOU love and understand
posts - 94, comments - 35, trackbacks - 0, articles - 2
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理

在MFC窗口中嵌入VLC ActiveX控件

Posted on 2011-08-02 00:56 buf 阅读(8376) 评论(0)  编辑 收藏 引用 所属分类: MiscMFC
经过一番的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
只有注册用户登录后才能发表评论。