LibVLC自定义插件目录,获取FPS方法
一、自定义插件目录
在Windows平台,使用LibVLC,只需要在VLC官网的nightly builds下载最新的win32 debug或win64 debug包,
解压缩之后,会有libvlc.dll libvlccore.dll , sdks目录下面包含lib和头文件
如果需要自定义插件目录,使用--plugin-path无效的时候,需要使用如下的代码
typedef int (__stdcall* PFN_putenv)(const char *envstring); pfn_putenv = (PFN_putenv)GetProcAddress( LoadLibrary(L"msvcrt.dll"), "_putenv" ); if ( pfn_putenv ) { pfn_putenv(szENV); }
这是因为在vlc的代码中,src\modules\bank.c AllocateAllPlugins函数中,会调用如下的代码获取插件目录
/* If the user provided a plugin path, we add it to the list */ paths = getenv( "VLC_PLUGIN_PATH" ); if( paths == NULL ) return; paths = strdup( paths ); /* don't harm the environment ! :) */ if( unlikely(paths == NULL) ) return;
而getenv在msdn中解释如下
getenv and _putenv use the copy of the environment pointed to by the global variable _environ to access the environment. getenv operates only on the data structures accessible to the run-time library and not on the environment "segment" created for the process by the operating system. Therefore, programs that use the envp argument to or may retrieve invalid information.
可以看到getenv和_putenv是读取和设置CRT运行时库的_environ全局变量,而libvlc.dll 以及 libvlccore.dll都是依赖的msvcrt.dll
所以,在开发的时候,如果直接调用 _putenv 设置VLC_PLUGIN_PATH,是设置不到msvcrt的全局变量的,而是设置到了msvcr100.dll 或msvcr140.dll这样不同
C运行时库的版本。
二、获取FPS的方法
在libvlc里面使用libvlc_media_player_get_fps获取FPS经常获取不到,返回值为0,虽然调用了libvlc_media_parse,根据最新版本的libvlc,建议使用
libvlc_media_tracks_get函数获取,试验后代码如下
uiStreamCount = libvlc_media_tracks_get(pMedia, &ppTracks); for ( unsigned i = 0; i < uiStreamCount; i++ ) { libvlc_media_track_t* pTrack = ppTracks[i]; if ( pTrack && libvlc_track_video == pTrack->i_type) { libvlc_video_track_t* pVideoTrack = pTrack->video; fps = pVideoTrack->i_frame_rate_num / pVideoTrack->i_frame_rate_den; } }
LibVLC自定义插件目录,获取FPS方法的更多相关文章
- jQuery命名空间和自定义插件的的多种方法
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jquery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...
- Adams 2013自定义插件方法zz
1.Adams插件介绍 Adams的高级模块(如Controls控制模块.Vibration振动模块.Durability耐久性模块等)是以插件的形式集成在Adams软件中.通过Adams提供的插件管 ...
- iOS中获取各种文件的目录路径的方法
我们的app在手机中存放的路径是:/var/mobile/Applications/4434-4453A-B453-4ADF535345ADAF344 后面的目录4434-4453A-B453-4AD ...
- (转)IOS中获取各种文件的目录路径的方法
iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...
- IOS中获取各种文件的目录路径的方法-备
iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...
- Android下获取FPS的几种方法
FPS(Frames Per Second)是关乎Android用户体验最为重要的指标之一,而在VR中更是如此.为了评估VR系统.VR SDK及Unity应用的性能,通常会实时获取FPS并将其显示出来 ...
- Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)
在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...
- Cordova与现有框架的结合,Cordova插件使用教程,Cordova自定义插件,框架集成Cordova,将Cordova集成到现有框架中
一.框架集成cordova 将cordova集成到现有框架中 一般cordova工程是通过CMD命令来创建一个工程并添加Android.ios等平台,这样的创建方式可以完整的下载开发过程中所需要的的插 ...
- webpack + vue 项目 自定义 插件 解决 前端 JS 版本 更新 问题
Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 它的异步加载原理是,事先将编译好后的静态文件,通过js对象映射,硬编 ...
随机推荐
- spring copy中的一个很气人的问题(初学者渣渣的一些感受)
把别人的工程直接导入使用,出现了各种bug......(细节决定成败,得到以下教训) 1.工程的第一步是检查版本和插件版本兼容问题.很重要 2.然后导入包,看依赖包是否版本太低,(前期做好这些,能让你 ...
- keil应用小贴士:Use MicroLIB是干什么的
在keil 建立ARM的工程时,其中有一项是选 use MicroLIB 查了查,得到了以下信息: microlib 是缺省 C 库的备选库. 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使 ...
- [NOIp 2016]愤怒的小鸟
Description Input Output Sample Input 22 01.00 3.003.00 3.005 21.00 5.002.00 8.003.00 9.004.00 8.005 ...
- [POI2006]OKR-Periods of Words
题目描述 一个串是有限个小写字符的序列,特别的,一个空序列也可以是一个串. 一个串P是串A的前缀, 当且仅当存在串B, 使得 A = PB. 如果 P A 并且 P 不是一个空串,那么我们说 P 是A ...
- ●51NOD 1705 七星剑
题链: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1705题解: 期望dp,期望的线性性质 (首先对于第k颗星,一定只 ...
- POJ - 3264:Balanced Lineup
ST表模版 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring&g ...
- [ZJOI2006]物流运输 SPFA+DP
题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...
- [BZOJ]1005 明明的烦恼(HNOI2008)
BZOJ的第一页果然还是很多裸题啊,小C陆续划水屯些板子. Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间 ...
- Python 编程规范
原文传送符:请点击
- div,margin,padding
<!-- 类比礼品盒里装方块月饼.月饼的食用部分(我们把它称之为月饼肉身)要装在小包装盒里,月饼肉身即为content.月饼肉身与直接包裹它的小包装盒(我们把它叫做月饼的衣服)之间的距离叫pad ...