因工作需要学习vlc已经有一段时间了,现在对vlc的总体框架做一个大概的总结。有许多vlc的细节依旧不是了解,如有理解错误之处还请见谅。
一、整体架构
vlc是一个开源的播放器,支持各种平台及各种媒体文件的播放。其播放整体架构如下:
1、Access
Access可以理解为源,它是整个框架数据的来源。源可能是文件,也可能是网络流,也可能是摄像头、麦克风等输入设备。它把所有输入源的共性抽象成了结构体access_t。
2、stream
stream可以理解为一个过滤器,它从access中读取数据,会做一些平滑或者预加载处理。
3、demux
demux为解复用,对于一些媒体容器,如mp4、avi等等,其里面包含了各种流,需要进行解复用把每条流都分离出来。不同媒体容器需要选择不同的解复用模块。
4、es_out
es_out作用跟stream有点类似,它是把解复用后的数据送到各自的解码器进行解码
5、decoder
解码器
6、video/audio output
音频、视频播放
二、
vlc是很大的一个软件,包含的模块很多。写了个整体框架,我就不知道该写些什么了。我也不知道怎么来一点点的分析。接下来就从一个个我认为有必要理解的知识点来进行讲解。这些知识点基本就是我在看代码过程中不是很理解,需要刻意分析的东西,在此记录一下。