libvlc.java_VS2010下 LibVLC开发环境搭建
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开发环境搭建相关推荐
- Android下NDK开发环境搭建
Android下NDK开发环境搭建 1. AndroidNDK安装与配置 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...
- CentOS下C++开发环境搭建
CentOS下C++开发环境搭建 vimplus github 我的环境 CentOS 7.5 64位 环境部署 vim 编辑工具 g++ 编译器 git 版本控制 gdb 调试工具 cmake 跨平 ...
- Windows下Android开发环境搭建和配置
关于Windows下Android开发环境搭建.配置方面文章,网上一搜一堆,为方便以后参考,权且做个记录,主要关注安装过程中的注意事项.对新手提醒的是,本文介绍SDK开发Android APK环境搭建 ...
- ④ESP8266 开发学习笔记_By_GYC 【Ubuntu系统下ESP8266 开发环境搭建】
目录 ④ESP8266 开发学习笔记_By_GYC [Ubuntu系统下ESP8266 开发环境搭建] 一.安装前准备 1.乐鑫官方的ESP-IDF 编程指南 2.ESP-IDF风格的ESP8266 ...
- 在ubuntu10.04下 GStreamer开发环境搭建
在ubuntu10.04下 GStreamer开发环境搭建 一 安装gstreamer 1 下载gstreamer源码 http://gstreamer.freedesktop.org/src/gst ...
- Ubuntu下Android开发环境搭建
Ubuntu下Android开发环境搭建 最近开始学习Android APP开发,首先第一步就是搭建开发环境,在网上找了很多教程,发现大部分的教程都过时了,搞得比较麻烦.其实,现在使用Android ...
- Linux下Java开发环境搭建
最近刚开始玩Linux,搞开发搭建环境是第一步,于是总结了这篇Linux下Java开发环境搭建的博客,记录一下我爬过的坑. 一.JDK的下载 jdk8官方下载地址:http://www.oracle. ...
- win7下android开发环境搭建(win7 64位)
注意:此为win7 (64)位系统 那么win7下32位系统如何进行android开发环境搭建呢?>>>win7下android开发环境搭建(win7 32位) 一.安装 JDK 下 ...
- Win7下android开发环境搭建
所需软件安装包 1. JDK.文件名为jdk-6u22-windows-i586.exe. 下载地址:http://www.oracle.com/technetwork/java/javase/do ...
- 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 ...
最新文章
- 利用Libra进行机器学习和深度学习
- cocos2d-x 从onEnter、onExit、 引用计数 谈内存泄露问题
- 英文题,我恨你啊..
- 网络排错模型之我见----模型,基线,协议,数据包
- Nginx 笔记与总结(13)Nginx 的 gzip 压缩
- Eigen教程(11)之存储顺序
- windows下编译Chrome浏览器
- c#使用pdf控件,提示无效注册类
- 淘宝京东拼多多淘客源码,三合一淘客php源码cms搭建教程
- DS4000系列存储配置storage manager介绍
- 智慧图书馆管理系统提升服务水平和工作效率
- QTcpSocket使用发现的问题
- 【字符串匹配】BF算法
- AFX_EXT_CLASS的使用
- NoSql的四大类型
- LTE终端开机流程----同步和小区驻留
- 人工智能( AI )将如何颠覆项目管理?看看这六大关键领域
- Runc 容器初始化和容器逃逸
- 第五章 阻抗匹配与调谐 Smith圆图
- python种子下载器,tkinter版本
热门文章
- Rietveld, or “How to revamp your code review process”
- matlab求向量的模,MATLAB向量的模
- 云服务器如何链接本地打印机_如何在服务器上安装网络打印机
- WARN [org.springframework.web.servlet.PageNotFound] No mapping found for HTTP request with URI
- java 通过身份证判断性别
- 时间序列分析之GARCH模型介绍与应用
- matlab+nnf.m,第6章_西安电子科技大学:工程线性代数(MATLAB版)_ppt_大学课件预览_高等教育资讯网...
- linux apache 查看mpm 配置方式,apache httpd mpm配置
- 什么是栈,栈及其特点和应用详解
- “好工作”的最关键指标:场景足够复杂、数据量足够大、杠杆率足够高