VLC 源码分析总结
1.概述
属于 开源项目组织中的一款全开源的流媒体服务器和多媒体播放器。
作为流媒体服务器, 跨平台,支持多操作系统和计算机体系结构;作为多媒体播放器,
可 以 播 放 多 种 格 式 的 媒 体 文 件 。 主 要 包 括 有 :
、、、、、 等多种常见媒体格式。
采 用全模块 化结 构, 在系 统内 部, 通过 动态 的载 入所 需的 模块 ,放 入一 个
的结构体中统一管理,连 的 模块也是通过插件的方式动态载入
的(通过 函数在初始化建立 时)。对于不支持动态载
入插件的系统环境中, 也可以采用 的方式,在 启动的时候静态载入所需
要的插件,并放入 统一管理。
的 模 块 分 成 很 多 类 别 主 要 有 :
access、!!""#$、access_output、#$、%$、
&、codec、!$、demux、'、"!、mux、packetizer、stream_out
put、(#$、(&、interface、in put、playlist 等(其中黑体为核
心模块)。 无论是作为流媒体服务器还是多媒体播放器,它的实质思路就是一个“播放
器”,之所以这么形象描述,是因为(The core gives a framework to do the media processing,
from input (files, network streams) to output (audio or video, on ascreen or a network), going
through various muxers, demuxers, decoders and filters. Even the interfaces are plugins for
LibVLC. It is up to the developer to choose which module will be loaded. 摘于官网说明)它实
质处理的是 )、)、、* 等流间的转换、传输与显示。对于流媒体服务器,如果从
文件作为输入即:+,-)./+,)+,./+,*;对于多媒体播放器如果采用 .- 方
式传输即:*+,-)./+,)。
2.插件管理框架
在 中每种类型的模块中都有一个抽象层0结构体,在抽象层或结构体中定义了若干
操作的函数指针,通过这些函数指针就能实现模块的动态载入,赋值相关的函数指针的函
数地址,最后通过调用函数指针能调用实际模块的操作。
对于 所有的模块中,有且仅有一个导出函数:(!$123-.))4。
(其中 3-.)) 为宏定义,对于 模块,在5!5"$6 中
定义为 )动态载入模块的过程是:使用 函数,在 中