VLC 关键模块结构分析

    VLC 采用的是全模块化结构,在系统内部,动态载入所需的模块,放入一个module_bank的结构体进行统一管理,连VLCMain模块也是经过插件的方 式动态载入的(经过module_InitBank函数在初始化创建module_bank时)。对于不支持动态载入插件的系统环境中,VLC也能够采用 builtin的方式,在VLC启动的时候静态载入所须要的插件,并放入module_bank统一管理。服务器

    VLC 的模块分红不少类别主要有:accessaccess_filteraccess_outputaudio_filter audio_mixeraudio_outputcodeccontroldemuxguimiscmuxpacketizer stream_outputvideo_filtervideo_outputinterfaceinputplaylist等(其中黑体为核 心模块)。VLC不管是做为流媒体服务器仍是多媒体播放器,它的实质思路就是一个播放器,之因此这么形象描述,是由于它实质处理的是ESPESPSTS等流间的转换、传输与显示。对于流媒体服务器,若是从文件做为输入 即:PS->DEMUX->ES->MUX->TS;对于多媒体播放器若是采用UDP方式传输 即:TS->DEMUX->ES网络

    这里我简单的从流程,关键模块及其核心库libvlc进行说明我本身的理解。ide

1. 主要流程模块化

1). 读取源数据;2)解封装; 3)解码;4) 渲染;函数

流程图描述以下所示:ui

2. 关键模块spa

1). Input Modules : 用于数据流(本地或者网络文件或者流)的读入;解封装,输出原始流ES(用于后续的解码操做);读取buffer中的数据进行交互;插件

2). Audio Modules:视频输出视频渲染,输出和窗口管理;多路复用模块用于格式封装,封装过程不涉及编解码过程;线程

3). Video Modules:视频输出视频渲染,输出和窗口管理;多路复用模块用于格式封装,封装过程不涉及编解码过程;code

4). Stream Modules:音视频文件的解码操做;将解码后的数据流送入FIFO,进行渲染。

5). UI Modules:用户用户和vlc各module之间的交互线程管理


3. libvlc 

vlc核心的是libvlc,它提供界面,应用处理功能,全部的libvlc的源代码都放在src目录及其子目录,其结构以下所示:


今天的总结就到这里了,欢迎你们多多点评指导啊。

相关文章
相关标签/搜索