全球旧事资料 分类
器。如发现正确的播放频率,然后重新制作从解码器接收过来的音频帧。Stream_output类似Audio_output。Misc被libvlc其它部分使用的杂项,如线程系统,消息队列,CPU探测,对象查询系统,或者特定平台代码。
f22VLC
VLC是一个纯粹围绕着LibVLC写成的程序。它是非常小的,但是功能很齐全的媒体播放器,归功于LibVLC的动态组件支持。
23组件
组件位于modules子目录,在运行时被加载。每一个组件提供不同的特征适应特定的文件的环境。另外,大量的不断编写的可移植功能位于audio_output,vidco_output和i
terface组件,以支持新的平台如BeoSMaeOSX。组件中的插件被位于srcmiscmodulesc和i
cludemodulesh中的函数动态加载和卸载。写组件的API描述如下,共3种l组件描述宏声明组件具有哪种优先级的能力接口,demux2等等,还有GUI组件的实现参数,特定组件的配置变量,快捷方式,子组件等等2Ope
vlc_objeet_tp_object被VLC调用初始化这个组件,它被组件描述宏赋值给了结构体module_t中的pf_activate函数指针,被Module_Need调用3Closevlc_objeet_tp_object被VLC调用负初始化这个组件,保证消耗Ope
分配的所有资源。它被组件描述宏赋值给了结构体module_t中的pf_deactivate函数指针,被Module_U
eed调用。用LibVLC写的组件能够直接被编译进VLC,因为有的OS不支持动态加载代码。被静态编译进VLC的组件叫做内置组件。
24线程分析
l线程管理VLC是一个密集的多线程应用。由于解码器必须预先清空和播放工序必须预先做好流程比如说解码器和输出必须被分开使用,否则无法保证在要求的时间里播放文件,因此VLC不采用单线程方法。目前不支持单线程的客户端,多线程的解码器通常就意味着更多的开销各线程共享内存的问题等,进程间的通信也会比较复杂。VLC的线程结构基于pthreads线程模型。为了可移植的目的,没有直接使用pthreads函数,而是做了一系列类似的包裹函数vlc_thread_create,vlc_thread_exit,vlc_thread_joi
,vlc_mutex_i
it,vlc_mutex_lock,vlc_mutex_u
lock,vlc_mutex_destroy,vlc_co
d_i
it,vlc_co
d_sig
al,vlc_co
d_broadcast,vlc_co
d_wait,vlc_co
d_destroy和类似结构vlc_thread_t,vlc_mutex_t,a
dvlc_co
d_t。2线程同步VLC的另一个关键特征就是解码和播放是异步的解码由一个解码器线程工作,播放由音频输出线程或者视频输出线程工作。这个设计的主要目的是不会阻塞任何解码器线程,能够及时播放正确的音频帧或者视频帧。这样实现也导致产生了在接口,输入,解码器和输出之间的一个复杂的通讯结构。虽然当前接r
好听全球资料 返回顶部