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, int b_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 <b>before</b> 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, , , 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, , , , , SWP_NOMOVE | SWP_NOSIZE);
}

环境搭建

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

地址 http://www.videolan.org/

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

拷贝到工程目录下

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

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

拷贝至debug目录下

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

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

#include <vlc/vlc.h>
#pragma comment(lib, "libvlc.lib")
#pragma comment(lib, "libvlccore.lib")

以上

VS2010下 LibVLC开发环境搭建的更多相关文章

  1. Windows 7 下 PHP 开发环境搭建(手动)

    Windows 7 下 PHP 开发环境搭建 1.说明 做开发的都知道一句话,就是“站在巨人的肩膀上”.确实现在打开浏览器随便一搜很多一键安装PHP环境的软件,比如wamp.xampp.AppServ ...

  2. NDK在windows下的开发环境搭建及开发过程

    在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库,关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释..so本是linux下的文件类 ...

  3. Android下NDK开发环境搭建

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

  4. spark-windows(含eclipse配置)下本地开发环境搭建

    spark-windows(含eclipse配置)下本地开发环境搭建   >>>>>>注意:这里忽略JDK的安装,JDK要求是1.8及以上版本,请通过 java  ...

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

    win7下android开发环境搭建(win7 64位)   一.安装 JDK 下载JDK最新版本,下载地址如下: http://www.oracle.com/technetwork/java/jav ...

  6. ubuntu下Nodic开发环境搭建

    ubuntu下Nodic开发环境搭建 1.编译环境 ubuntu可直接装gcc编译环境 sudo apt install gcc-arm-none-eabi 也可以下载可执行文件download 2. ...

  7. Windows系统下Android开发环境搭建

    “工具善其事,必先利其器”.要想学好Android,搭建好Android开发环境是一个良好的开端. Windows系统下Android开发环境主要有4个大的步骤.分别是: 1.JDK的安装 2.ecl ...

  8. pixhawk在linux(ubuntu16.04)下的开发环境搭建和源码编译

      1查找安装文档(http://dev.px4.io/starting-installing-linux.html)(本文仅针对硬件为PIXHAWK的开发环境搭建,其他硬件请参考官方文档)     ...

  9. Windows系统下JAVA开发环境搭建

    首先我们需要下载JDK(JAVA Development Kit),JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库. 下载地址:http://www.or ...

随机推荐

  1. 【互联网那些事儿】小度 i 耳目

    关于这个产品是什么,大家自行度. 这里我主要想说的,是百度关于这个产品的一点……呃,“卖萌”的介绍语言. 小度i耳目常见问题 问:为什么叫小度i耳目呢,貌似不太好记忆. 答:名字嘛都是父母起的,不过时 ...

  2. moto xt800 刷机到2.2.2

    老机器啊,原来2.1的系统大多数软件都不能装sbf刷机包+工具+教程下载地址:http://u.115.com/file/bhdlwl2x 刷完之后如果RSD Lite显示刷机结果为失败,不要担心,手 ...

  3. Hibernate逍遥游记-第15章处理并发问题-002悲观锁

    1. 2. hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.connection.driver_class=com.mys ...

  4. 对于delphi for linux心存梦想的同学,彻底醒醒吧

    Borland 曾经多次做市场调查,很多人呼吁推出delphi for linux.可是直到kylix发展到第三版,borland才明白:一个内置C编译器环境并与之关系紧密的免费OS,没有人愿意花钱去 ...

  5. iOS 开发中遇到的问题

    1. 关于纠结很久的KVO崩溃问题,其真正原因是,在删除roomItem的KVO之前,将这个对象已经赋值为nil,所以实际上并没有删除他的observer,因此而崩溃:长时间纠结的原因是受.cxx_d ...

  6. Windows系统上如何使用SSH

    Windows系统上如何使用SSH 传统的网络服务程序如FTP.Telnet等,在网络上一般使用明文传送数据.用户账号和口令信息,容易受到中间人的攻击.用户利用SSH协议后能有效防止DNS及IP欺骗, ...

  7. Java API —— DateFormat类

    1.DateFormat类概述         DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间. 是抽象类,所以使用其子类SimpleDateForm ...

  8. 尝鲜delphi开发android/ios_环境搭建

    Delphi这又老树发新枝了,开始做终端程序开发了,这个东西的准确名字是:RAD Studio XE5,可以使用delphi和c++ builder进行终端开发. 我尽可能讲啰嗦一些,免得回头被人问. ...

  9. C#版二维码生成器

    前言 本文所使用的二维码生成代码是谷歌开源的条形码图像处理库完成的,c#版的代码可去 这里   --  下载压缩包. 截止目前为止最新版本为2.2,提供以下编码格式的支持: UPC-A and UPC ...

  10. Java中JNI的使用详解第二篇:JNIEnv类型和jobject类型的解释

    上一篇说的是一个简单的应用,说明JNI是怎么工作的,这一篇主要来说一下,那个本地方法sayHello的参数的说明,以及其中方法的使用 首先来看一下C++中的sayHello方法的实现: JNIEXPO ...