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

1. 主要流程

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

流程图描述如下所示:

155303_rS9e_818427.jpg

2. 关键模块

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

160659_wKrR_818427.jpg

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

160715_Eax9_818427.jpg

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

160913_Gl4u_818427.jpg

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

160927_Unju_818427.jpg

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

160939_1RJP_818427.jpg


3. libvlc 

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

163634_SBAY_818427.jpg


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


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值