Libvlc API 简单说明

原文来自http://www.xuebuyuan.com/1519616.html

libvlc_instance_t* libvlc_new(int  argc,  const char* const*  argv)

创建并初始化一个LIBVLC实例

这个函数接受一个命令行参数列表,这个参数列表影响LIBVLC INSTANCE的缺省配置.

Version:

参数意味着被从命令行传递到LIBVLC,就像VLC媒体播放器做的那样。有效的参数列表依赖于LIBVLC的版本、操作系统、平台以及LIBVLC的插件集。无效或不支持的参数将会导致该API的失败(return NULL)。此外,某些参数可能会改变LIBVLC的行为或以其它方式干扰LIBVLC的其它功能。

param:

argc : 命令行参数个数

argv : 命令行类型参数

return:

成功返回LIBVLC实例,失败返回NULL。

  

VLC_PUBLIC_API void libvlc_release( libvlc_instance_t *p_instance );

减少LIBVLC INSTANCE的引用计数,并且如果计数为零的话就摧毁它。

(Decrement the reference count of a libvlc instance, and destroy it if it reaches zero)

param:

要摧毁的LIBVLC INSTANCE

VLC_PUBLIC_API libvlc_media_player_t * libvlc_media_player_new( libvlc_instance_t *p_libvlc_instance );

创建一个空的媒体播放器对象

Parameters:

p_libvlc_instance:被创建的媒体播放器所属的实例

return:

一个新的媒体播放器对象,出错返回NULL.

VLC_PUBLIC_API void libvlc_media_player_release( libvlc_media_player_t *p_mi );

使用后释放媒体播放器对象,减少媒体播放器对象的引用次数。如果计数已经为零,该方法将释放掉媒体播放器对象,如果媒体播放器对象已经被释放了,这个方法不应该再被调用(Release a media_player after use Decrement the reference count of a media player object. If the reference count is 0, then libvlc_media_player_release() will release the media player object. If the media player object has been released, then it should not be used again.)

param:

p_mi:要释放的媒体播放器对象

VLC_PUBLIC_API libvlc_event_manager_t * libvlc_media_player_event_manager ( libvlc_media_player_t *p_mi );

从发送事件的媒体播放器对象那里获取一个事件管理器

(Get the Event Manager from which the media player send event)

param:

p_mi: 媒体播放器对象

return:

返回关联到给定媒体播放器对象的事件管理器

VLC_PUBLIC_API int libvlc_event_attach( libvlc_event_manager_t *p_event_manager,
libvlc_event_type_t i_event_type,
libvlc_callback_t f_callback,
void *user_data );

事件通知注册器(Register for an event notification),设置事件处理器

param:

p_event_manager:你想关联的事件管理器

i_event_type:我们所要关注事件的类型

f_callback:事件发生时的回调函数

user_data:user provided data to carry with the event( 还没理解这个参数)

return:

成功:0;失败:ENOMEM

VLC_PUBLIC_API void libvlc_media_player_set_hwnd ( libvlc_media_player_t *p_mi, void *drawable );

设置给予媒体播放器媒体输出的win32/win64窗口句柄。如果构建LIBVLC时没有Win32/Win64 API输出的内置支持,该方法将不起作用(If LibVLC was built without Win32/Win64 API output support, then this has no effects)

param:

p_mi: 媒体播放器

drawable:绘制媒体(媒体输出)的窗口句柄

libvlc_log_* 函数提供对LibVLC消息日志的访问,用于调试或用于高级用户
VLC_PUBLIC_API unsigned libvlc_get_log_verbosity( const libvlc_instance_t *p_instance );

返回LIBVLC的日志级别

param:

p_instance:libvlc 实例

return:

日志级别

VLC_PUBLIC_API unsigned libvlc_get_log_verbosity( const libvlc_instance_t *p_instance );

设置LIBVLC的日志级别

param:

p_instance:libvlc 实例

level:日志级别

VLC_PUBLIC_API libvlc_log_t *libvlc_log_open( libvlc_instance_t *p_instance );

打开一个VLC消息日志句柄

param:

p_instance:libvlc实例

return:

成功:返回日志消息实例;失败:出错返回NULL;

VLC_PUBLIC_API void libvlc_log_close( libvlc_log_t *p_log );

关闭一个VLC消息日志实例

param:

p_log:libvlc日志实例或NULL

VLC_PUBLIC_API unsigned libvlc_log_count( const libvlc_log_t *p_log );

返回一个日志实例内的消息数目

param:

p_log:LIBVLC日志实例或NULL;

return:

返回日志消息的数目,如果p_log为空则返回0;

VLC_PUBLIC_API void libvlc_log_clear( libvlc_log_t *p_log );

清空一个日志实例

日志实例内所有的消息都将被清空。日志应定期清除以避免堵塞。

param:

p_log:LIBVLC日志实例或NULL;

VLC_PUBLIC_API libvlc_log_iterator_t *libvlc_log_get_iterator( const libvlc_log_t *p_log );

分配或返回一个指向日志消息的新迭代器

param:

p_log:LIBVLC日志实例

return:

日志迭代器对象或出错返回NULL

VLC_PUBLIC_API void libvlc_log_iterator_free( libvlc_log_iterator_t *p_iter );

释放之前分配的日志消息迭代器

param:

p_iter:LIBVLC日志迭代器或NULL

VLC_PUBLIC_API int libvlc_log_iterator_has_next( const libvlc_log_iterator_t *p_iter );

迭代器返回日志是否有更多消息

param:

p_iter:LIBVLC日志迭代器或NULL;

return:

有:返回TRUE;没有:返回FALSE;

VLC_PUBLIC_API libvlc_log_message_t *libvlc_log_iterator_next( libvlc_log_iterator_t *p_iter,
libvlc_log_message_t *p_buffer );

返回下一条日志消息

消息内容一定不能被释放了

param:

p_iter:LIBVLC日志迭代器或NULL;

p_buffer:日志缓冲区;

return:

日志消息对象或NULL;

例程

之前说了,呆龙在做一个简易播放器时需要做日志播放器处理。上面讲了一些,下面给出个简单例子:

背景:对于简易LIBVLC日志处理,我们有三点未知:

  1. WHEN:播放器运行时,libvlc何时打出日志;
  2. WHERE:我们应该在应用代码的什么地方打日志;
  3. HOW:如何利用LIBVLC给出的以上日志API打日志;

基于以上三点,我的想法是单独开一个线程,每隔一秒检查是否有日志,有则打出,没有继续

正文

说明:一些libvlc对象,如libvlc实例,libvlc播放器会产生异步信号,每一个对象都提供有事件管理器.可以将相应对象事件关联到对应libvlc对象的事件管理器处理或取消关联事件管理器.

相关结构

事件管理器:事件管理器属于一个libvlc对象,管理器可以从对象处接收事件信号

typedef struce libvlc_event_manager_t libvlc_event_manager_t;############事件管理器结构

<p>struct libvlc_event_t;################################################################事件结构

typedef int libvlc_event_type_t;################################################--事件类型结构

typedef void(*libvlc_callback_t)(const struct libvlc_event_t*,void*)--事件回调函数

注册事件管理器

VLC_PUBLIC_API int libvlc_event_attach (
libvlc_event_manager_t *p_event_manager,
libvlc_event_type_t i_event_type,
libvlc_callback_t f_callback,
void *user_data);

param:

p_event_manager:要绑定的事件管理器

i_event_type: 事件类型

f_callback:回调函数指针

user_data:用户提供的数据,由事件带回

其他

  1. 获取事件类型名

    VLC_PUBLIC_API const char * libvlc_event_type_name (libvlc_event_type_t event_type);

    param:

    event_type:事件类型
  2. 获取播放器事件管理器

    VLC_PUBLIC_API libvlc_event_manager_t * libvlc_media_player_event_manager (libvlc_media_player_t *p_mi);

    Param:

    p_mi : Media Player

    return:

    返回p_mi关联的事件管理器
  3. 获取媒体描述符对象事件管理器

    VLC_PUBLIC_API libvlc_event_manager_t *

    libvlc_media_event_manager (libvlc_media_t * p_md);
  4. 获取媒体服务discover对象事件管理器

    VLC_PUBLIC_API libvlc_event_manager_t * libvlc_media_discoverer_event_manager (libvlc_media_discoverer_t * p_mdis);
  5. 获取媒体列表实例的事件管理器

    VLC_PUBLIC_API libvlc_event_manager_t * libvlc_media_list_event_manager (libvlc_media_list_t *p_ml); param: p_ml : 媒体列表实例 6.获取VLM媒体事件管理器 VLC_PUBLIC_API libvlc_event_manager_t * libvlc_vlm_get_event_manager (libvlc_instance_t *p_instance);`

    Param:

    P_instance : libvlc实例

注意

通常,我们在"Get"之 后要"Release",比如Windows API之GetDC(),相应的ReleaseDC等,在这里对于事件管理器的获取也有一个相应的"Release".

void libvlc_event_manager_release(libvlc_event_manager_t * p_em );

但是,我们并不需要显示的调用该方法,因为"对于一些LIBVLC对象,其结构里就有'事件管理器'####-

libvlc_event_manager_t * p_event_manager;

在释放或销毁对象的时候,该方法会被调用以同时销毁相应对象的'事件管理器'",例如:在调用libvlc_media_player_release()释放媒体播放器时就会调用该方法释放媒体播放器事件管理器.

Libvlc API 简单说明 [转]的更多相关文章

  1. salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)

    Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming ...

  2. 基于C语言libvirt API简单小程序

    libvirt API简单小程序 1.程序代码如下 #include<stdio.h> #include<libvirt/libvirt.h> int getDomainInf ...

  3. 常用函数式接口与Stream API简单讲解

    常用函数式接口与Stream API简单讲解 Stream简直不要太好使啊!!! 常用函数式接口 Supplier<T>,主要方法:T get(),这是一个生产者,可以提供一个T对象. C ...

  4. 百度地图API简单应用

    在做移动端应用时经常用到百度地图API,百度API有强大的示例和文档,开发之前去百度相关网站注册密钥,很块博主只花了几分钟 百度地图API范例 百度地图API文档说明 例子1:输入特定关键字绘制地图标 ...

  5. 【VLC-Android】LibVLC API简介(相当于VLC的MediaPlayer)

    前言 学新东西API很重要,这里抛砖引玉整理了一下,欢迎反馈! 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over14 ...

  6. 百度地图api简单使用方法

    百度地图API的使用方法   百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html&g ...

  7. Web API 简单示例

    一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...

  8. java正则API简单解析

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...

  9. 天气预报API简单实现

    本人小白,觉得好玩,就注册了一个博客.一时也不知道写些什么,就把昨天做的一个简单的网页天气预报写一下吧,希望对各位看官有所帮助. 运行环境:php+mysql+WIN/Linux,框架什么的都无所谓了 ...

随机推荐

  1. HTTP服务器(1)

    单文件服务器 导语 在研究HTTP服务器时,我们可以从一个单文件服务器开始.无论接受到什么请求,这个服务器始终发送同一个文件.下面是示例代码,绑定的端口,发送的文件名以及文件的编码从命令行读取.如果省 ...

  2. RandHelper

    /// <summary> /// 类说明:RandHelper类,用来实现取随机 /// 编码日期:2015-12-29 /// 编 码 人:里程碑 /// 修改日期:2015-12-2 ...

  3. 一个c#的输入框函数

    private static string InputBox(string Caption, string Hint, string Default) { Form InputForm = new F ...

  4. Babel:JavaScript编译器

    一.介绍: Babel是一个Javascript编译器,可以将ES6语法转换成ES5. 这意味着,你可以现在就用ES6编写程序,而不用担心现有环境是否支持.下面是一个例子: //转码前: input. ...

  5. 敏捷组织中PMO应遵循的准则

    敏捷改变了人们的工作方式,不仅仅是开发部门,而且还包括其它的部门,例如HR.财务以及PMO等.在大多数组织中,PMO是一个控制体.它指导项目团队的规范.模板以及流程.目前,大多数的IT组织都敏捷化了. ...

  6. Linux编译工具:gcc入门

    1. 什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器.最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还 ...

  7. javadoc

    Oracle官方javadoc说明 Generates HTML pages of API documentation from Java source files. http://docs.orac ...

  8. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  9. Bzoj1426 收集邮票

    Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 292  Solved: 232 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一 ...

  10. RabbitMQ 集群+负载均衡

    负载均衡 集群的配置已经搭建好了,代码也成功跑通,成功做到了高可用,但是我们的程序连接节点并不会管哪个服务器在忙.哪个服务器空闲,完全看心情想连谁就连谁.而且代码中要把每个ip的节点都手动的写出来 , ...