LibVLC环境的搭建

最近又 LIBVLC 做一个视频播放器,封装成ActiveX控件,之前做过一个基于OpenCV的播放器(只解码视频,音频不用,OpenCV也没有解码音频的功能)。

到目前位置完成的功能有

设置文件名、播放、暂停/继续、获得视频长度、获得视频播放时间、设置视频播放位置(时间)、逐帧播放、停止、设置下一个播放的绝对时间(年 月 日 时 分 秒 毫秒)、设置视频开始位置的绝对时间(年 月 日 时  分 秒  毫秒)、全屏/恢复、获得视频播放速度、设置视频播放速度(快、慢)、截图; 以及视频的开始位置绝对时间的7个属性(年 月 日 时 分 秒 毫秒)以及他们的Get/Set方法。

在做全屏的时候遇到一个问题,libvlc给了三个和全屏有关的API,如下:

//切换全屏 / 恢复

LIBVLC_API void libvlc_toggle_fullscreen( libvlc_media_player_t *p_mi );//设置全屏 / 恢复,由b_fullscreen决定

LIBVLC_API void libvlc_set_fullscreen( libvlc_media_player_t *p_mi, intb_fullscreen );//获取是否全屏

LIBVLC_API int libvlc_get_fullscreen( libvlc_media_player_t *p_mi );

但是、可是、可但是,在该头文件中又说了:

* @warning With most window managers, only a top-level windows can be in

* full-screen mode. Hence, this function will not operate properly if

* libvlc_media_player_set_xwindow() was used to embed the video in a

* non-top-level window. In that case, the embedding window must be reparented

* to the root window before fullscreen mode is enabled. You will want

* to reparent it back to its normal parent when disabling fullscreen.

歌词大意是:在许多窗口管理器中,只有一个top-level window可以设置为full-screen模式。 因此当使用函数libvlc_media_player_set_xwindow() 来将视频嵌入到一个non-top-level window的时候,可能不会起作用(编者注:确实是这样,确实特么不起作用)。 这种情况下,这个嵌入的窗口必须将其父窗口设置为root window(编者注:Windows下的root window应该就是desktop窗口了)以便将全屏模式启用。 当取消全屏的时候你就要重新将他的父窗口设置为普通的窗口。

---------------------------------------------------------------

接着说

在全屏的时候,需要将控件窗口的设置为top-level window,方法就是去除WS_CHILD属性,然后将其父窗口设置为desktop。

恢复时,将其位置放在原来的合适位置,将其父窗口设置为原来的,将其窗口风格恢复。

if (b == true)

{//此时不是全屏, 要全屏

m_hWndParent = GetParent()->m_hWnd; //父窗口句柄

int cx =GetSystemMetrics(SM_CXSCREEN);int cy =GetSystemMetrics(SM_CYSCREEN);

GetWindowRect(&m_rectPlayer); //本视频窗口大小//获得其窗口风格

m_lStyle =GetWindowLong(m_hWnd, GWL_STYLE);

m_lStyleEx=GetWindowLong(m_hWnd, GWL_EXSTYLE);

SetWindowLong(m_hWnd, GWL_STYLE, m_lStyle| ~WS_CHILD | ~WS_CHILDWINDOW | ~WS_BORDER);

SetWindowLong(m_hWnd, GWL_EXSTYLE, m_lStyleEx| ~WS_EX_CLIENTEDGE);

HWND hWndDesktop= GetDesktopWindow()->GetSafeHwnd();

HWND hParentWnd=::SetParent(m_hWnd, hWndDesktop);

HWND hTemp=::GetParent(m_hWnd);

::MoveWindow(m_hWnd,0, 0, cx, cy, TRUE);//::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_DEFERERASE | SWP_NOMOVE | SWP_NOSIZE);

}else{

SetParent(FromHandle(m_hWndParent));//恢复原来的父窗口

CPoint leftTop(m_rectPlayer.TopLeft());

CPoint bottomRight(m_rectPlayer.BottomRight());

::ScreenToClient(m_hWndParent,&leftTop);

::ScreenToClient(m_hWndParent,&bottomRight);//恢复其窗口属性

SetWindowLong(m_hWnd, GWL_STYLE, m_lStyle);

SetWindowLong(m_hWnd, GWL_EXSTYLE, m_lStyleEx);

::MoveWindow(m_hWnd, leftTop.x, leftTop.y, m_rectPlayer.Width(), m_rectPlayer.Height(), TRUE);

::SetWindowPos(m_hWnd, HWND_NOTOPMOST,0, 0, 0, 0, SWP_NOMOVE |SWP_NOSIZE);

}

环境搭建

1、去官网下载播放器(安装后附带SDK)

2、安装完成后,将安装目录下 SDK\include 和 SDK\lib 拷贝到工程目录下

拷贝到工程目录下

当前图目录为工程目录,即解决方案所在目录

3、将VLC安装目录下的plugins目录、libvlc.dll、libvlccore.dll 拷贝至工程的debug 或 release目录下

拷贝至debug目录下

4、在VS的项目属性里,添加头文件和库文件的目录

5、在工程的合适位置引用头文件、导入库

#include

#pragma comment(lib, "libvlc.lib")

#pragma comment(lib, "libvlccore.lib")

以上

libvlc.java_VS2010下 LibVLC开发环境搭建相关推荐

  1. Android下NDK开发环境搭建

    Android下NDK开发环境搭建 1.     AndroidNDK安装与配置 1.1  NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...

  2. CentOS下C++开发环境搭建

    CentOS下C++开发环境搭建 vimplus github 我的环境 CentOS 7.5 64位 环境部署 vim 编辑工具 g++ 编译器 git 版本控制 gdb 调试工具 cmake 跨平 ...

  3. Windows下Android开发环境搭建和配置

    关于Windows下Android开发环境搭建.配置方面文章,网上一搜一堆,为方便以后参考,权且做个记录,主要关注安装过程中的注意事项.对新手提醒的是,本文介绍SDK开发Android APK环境搭建 ...

  4. ④ESP8266 开发学习笔记_By_GYC 【Ubuntu系统下ESP8266 开发环境搭建】

    目录 ④ESP8266 开发学习笔记_By_GYC [Ubuntu系统下ESP8266 开发环境搭建] 一.安装前准备 1.乐鑫官方的ESP-IDF 编程指南 2.ESP-IDF风格的ESP8266 ...

  5. 在ubuntu10.04下 GStreamer开发环境搭建

    在ubuntu10.04下 GStreamer开发环境搭建 一 安装gstreamer 1 下载gstreamer源码 http://gstreamer.freedesktop.org/src/gst ...

  6. Ubuntu下Android开发环境搭建

    Ubuntu下Android开发环境搭建 最近开始学习Android APP开发,首先第一步就是搭建开发环境,在网上找了很多教程,发现大部分的教程都过时了,搞得比较麻烦.其实,现在使用Android ...

  7. Linux下Java开发环境搭建

    最近刚开始玩Linux,搞开发搭建环境是第一步,于是总结了这篇Linux下Java开发环境搭建的博客,记录一下我爬过的坑. 一.JDK的下载 jdk8官方下载地址:http://www.oracle. ...

  8. win7下android开发环境搭建(win7 64位)

    注意:此为win7 (64)位系统 那么win7下32位系统如何进行android开发环境搭建呢?>>>win7下android开发环境搭建(win7 32位) 一.安装 JDK 下 ...

  9. Win7下android开发环境搭建

    所需软件安装包 1.  JDK.文件名为jdk-6u22-windows-i586.exe. 下载地址:http://www.oracle.com/technetwork/java/javase/do ...

  10. Win7下Android开发环境搭建(8.19,8.24,9.30,10.21)

    [2013-10-21 20:06:55 - L9ThreeGong] Unable to resolve target 'android-10' [ 意思就是没有找到android_10,这里的10 ...

最新文章

  1. 利用Libra进行机器学习和深度学习
  2. cocos2d-x 从onEnter、onExit、 引用计数 谈内存泄露问题
  3. 英文题,我恨你啊..
  4. 网络排错模型之我见----模型,基线,协议,数据包
  5. Nginx 笔记与总结(13)Nginx 的 gzip 压缩
  6. Eigen教程(11)之存储顺序
  7. windows下编译Chrome浏览器
  8. c#使用pdf控件,提示无效注册类
  9. 淘宝京东拼多多淘客源码,三合一淘客php源码cms搭建教程
  10. DS4000系列存储配置storage manager介绍
  11. 智慧图书馆管理系统提升服务水平和工作效率
  12. QTcpSocket使用发现的问题
  13. 【字符串匹配】BF算法
  14. AFX_EXT_CLASS的使用
  15. NoSql的四大类型
  16. LTE终端开机流程----同步和小区驻留
  17. 人工智能( AI )将如何颠覆项目管理?看看这六大关键领域
  18. Runc 容器初始化和容器逃逸
  19. 第五章 阻抗匹配与调谐 Smith圆图
  20. python种子下载器,tkinter版本

热门文章

  1. Rietveld, or “How to revamp your code review process”
  2. matlab求向量的模,MATLAB向量的模
  3. 云服务器如何链接本地打印机_如何在服务器上安装网络打印机
  4. WARN [org.springframework.web.servlet.PageNotFound] No mapping found for HTTP request with URI
  5. java 通过身份证判断性别
  6. 时间序列分析之GARCH模型介绍与应用
  7. matlab+nnf.m,第6章_西安电子科技大学:工程线性代数(MATLAB版)_ppt_大学课件预览_高等教育资讯网...
  8. linux apache 查看mpm 配置方式,apache httpd mpm配置
  9. 什么是栈,栈及其特点和应用详解
  10. “好工作”的最关键指标:场景足够复杂、数据量足够大、杠杆率足够高