本文修订中.........
参考资料
http://www.enjoythearchitecture.com/vlc-architecture
1.对象模型
vlc_object_t代表一个VLC对象,对VLC对象的操作有:
1)vlc_custom_create2)vlc_object_destroy3)vlc_object_find
LibVLC实例对象:libvlc_instance_t
libvlc_priv_t代表库的主结构实例
1.2对象内存管理
- libvlc_object_name_new() Create an object with a refcount equal to 1.
- libvlc_object_name_retain() Increment the object refcount by 1.
- libvlc_object_name_release() Decrement the refcount by 1, and release the object if the new refcount is less than zero.
对象调用需要先new然后再release,例外是libvlc_exception_t和libvlc_event_manager_t
1.3 Get/Set函数
Getter: libvlc_ object_name _ object, 内部会retain这个对象,使用完必须释放。 例外是libvlc_object_name_event_manager不会retain对象
Setter: libvlc_object_name_set_object,内部不retain这个对象,使用完不必调用释放函数
Modules
必须实现的接口
必须实现如下函数:
1) open() close()2)功能相关的接口
Modules之间的通信
Modules中有变量,可以create/set 这个变量值。我们还可以设置callback监控函数来监控这个变量,一旦这个变量改变,这个callback函数就会被调用。
Module间就是通过这种Observer模式来实现模块间的通信的
使用LibVCL:
#include <stdio.h>
#include <stdlib.h>
#include <vlc/vlc.h>
int main(int argc, char* argv[])
{
libvlc_instance_t * inst;
libvlc_media_player_t *mp;
libvlc_media_t *m;
/* 加载LIBVLC引擎 */
inst = libvlc_new (0, NULL);
/* 创建一个Media */
m = libvlc_media_new_path (inst, "http://mycool.movie.com/test.mov");
/* 创建MediaPlayer */
mp = libvlc_media_player_new_from_media (m);
/* 释放Media m */
libvlc_media_release (m);
/* 调用MediaPlayer 播放*/
libvlc_media_player_play (mp);
sleep (10); /* Let it play a bit */
/* 停止播放 */
libvlc_media_player_stop (mp);
/* 释放media_player */
libvlc_media_player_release (mp);
/* 释放LIBVLC引擎 */
libvlc_release (inst);
return 0;
}