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进行说明我自己的理解。

1. 主要流程

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

流程图描述如下所示:

VLC 关键模块结构分析

2. 关键模块

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

VLC 关键模块结构分析

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

VLC 关键模块结构分析

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

VLC 关键模块结构分析

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

VLC 关键模块结构分析

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

VLC 关键模块结构分析


3. libvlc 

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

VLC 关键模块结构分析


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


转载于:https://my.oschina.net/starmier/blog/643720

相关文章: