qt调用vlc响应windows消息

转载 2015年07月10日 13:41:20

调用vlc的时候,vlc将会托管所有鼠标消息,键盘消息(因为vlc内置一个dvd menu功能,将会使用到这些消息),然而我们便不能定制自己的行为了,比如本人需要获取鼠标点击的坐标。
查询资料发现有5种解决方案。如下
1.全局hook,都说能成功。没有尝试过。
2.在事件到达vlc部件之前拦截鼠标消息,按照windows消息传递机制,外部消息是由父到子(顶层窗口,子窗口,部件……),可以在父部件上面设置时间过滤器,取消到子部件事件分发
3.libvlc_video_set_mouse_input(,false);禁用鼠标事件(视频渲染窗口不处理鼠标消息),google上面查询到事件到达视频窗口后会直接传递到父窗口,本人曾经测试成功,后来不知道什么原因cursor直接被吃掉了。(键盘有对应的 libvlc_video_set_key_input)
4.编译vlc源码,收到消息后转发。本人测试成功,但是自己编译的vlc几乎比官方大一半,而且稳定性相对较弱。
5.调用windows API,禁用掉vlc事件处理窗口,这样事件不能够到达vlc。和第二条原理类似。本人最终采用这条方案。
注:vlc接收到传入的窗口句柄后,会派生两个窗口,一个用于渲染视频,一个时间处理
引用自:https://forum.videolan.org/viewtopic.php?f=32&t=92568#
Ok, vlc creates two child windows into window you pass in the libvlc_media_player_set_hwnd function every time you play a video. One of these windows is maked to get mouse events, and the other window is used to output the video.

Windows schema :
1 MyWindow
2 -VlcEnvetWindow
3 –VlcOutputWindow

You need get handle of VlcEventWindow. To get these handle i use a timer when video starts to play and into these timer i use EnumChildWindows passing in the hWnd MyWindow to search the inmediate child. I use a timer because vlc windows take some time to be created.

CODE: SELECT ALL
// First step is start a timer when you play a video,

// Second step : in the timer function i call :
EnumChildWindows(MyWindow_HWND, EnumerateVLC, NULL);

// Third step : if EnumerateVlc get some child window these window is the VlcEventWindow, and need disable it, to reach mouse events on MyWindow
BOOL CALLBACK EnumerateVLC(HWND hWndvlc, LPARAM lParam) {
EnableWindow(hWndvlc, FALSE);
// And kill timer, i only need get this handle one time.
return TRUE;
}

// When EnumerateVLC is called all mouse events are redirected to MyWindow

And remember, when you stop/finish the video vlcwindows are destroyed, and you need to get new handle every time after this ocours on your play function.

Another thing is, when you pause the video, vlcwindows are not destroyed, and its not necesary get VlcEventWindow handle again.

Sorry for my poor english again, and Good luck.

qt调用vlc响应windows消息

调用vlc的时候,vlc将会托管所有鼠标消息,键盘消息(因为vlc内置一个dvd menu功能,将会使用到这些消息),然而我们便不能定制自己的行为了,比如本人需要获取鼠标点击的坐标。 查询资料发现有...
  • dwjmantou
  • dwjmantou
  • 2015年01月28日 12:33
  • 1119

vlc响应windows消息

在使用过程中libvlc创建出来渲染窗口消息在内部捕获并进行处理,外部的window 无法收到消息,如双击,单击事件,这样就给使用者带来了很多不方便的地方.官网论坛有人说要想捕获鼠标消息要钩子.开始用...
  • zjf82031913
  • zjf82031913
  • 2012年01月18日 16:07
  • 5384

Qt调用VLC写的视频播放器源码

http://www.bcwhy.com/thread-18482-1-1.html 最近因为工作需要,做了个视频播放器,能播放目前绝大多数格式,也能播放流媒体文件,界面是用Qt做的,这...
  • chenyijun
  • chenyijun
  • 2014年03月17日 12:06
  • 2701

Qt开发: Qt5使用VLC开发库

1 下载VLC库    csdn下载:      在E盘创建VLC文件夹,在文件夹里创建include,和lib 2 QT项目文件    *.pro文件     INCLUDEPATH+=E:...
  • taoerit
  • taoerit
  • 2017年08月08日 10:21
  • 870

Qt-vlc 开发全记录

qt-vlc 开发起来还是非常方便,如果对定制开发没有特殊需求,对实时性也没有特殊需求,可以采用该方案。作者记录一下以防以后忘记。 到qt -vlc 的官网下载 最新的 qt-vlc 版本,使用的一个...
  • luopeiyuan1990
  • luopeiyuan1990
  • 2015年03月22日 19:00
  • 4551

在QT中处理windows消息

http://blog.csdn.net/sryan/article/details/6744070 为了能处理某些qt无法处理的事件,或者在Qt将消息封装之前能做某些操作等等,我们...
  • haluoluo211
  • haluoluo211
  • 2015年05月18日 19:54
  • 938

QT中处理Windows消息

为了能处理某些qt无法处理的事件,可以自己处理windows事件。 处理windows事件是重写QApplication::winEventFilter(MSG*,long)函数来实现的。假如功能想...
  • sunyongsunyong
  • sunyongsunyong
  • 2012年12月04日 15:10
  • 1216

Qt5+VLC实现多媒体播放器安装配置调试各种问题总结

首先介绍下版本吧 用的ubuntu
  • zwlq1314521
  • zwlq1314521
  • 2014年10月22日 19:13
  • 6358

基于VLC-Qt播放RTSP流

此篇是 使用VLC浏览器插件播放RTSP流的姊妹篇。 一.直接使用libVLC libVLC是VLC media player多媒体框架的核心引擎和接口,开发者使用它能轻松的创建大量具有VLC特性的应...
  • caoshangpa
  • caoshangpa
  • 2016年11月14日 15:38
  • 4922

qt使用libvlc库的方法,RTSP播放器的实现(windows、Linux)

1. libvlc库的产生、配置和使用方法 这个网站专门介绍libvlc的产生、工程中配置和使用方法的。 利用QT和libvlc写RTSP播放器  http://blog.chinaun...
  • laoAyang
  • laoAyang
  • 2014年04月10日 11:43
  • 1194
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:qt调用vlc响应windows消息
举报原因:
原因补充:

(最多只允许输入30个字)