VLC 属于Video LAN开源项目组织中的一款全开源的流媒体服务器和多媒体播放器。内部 采用全模块化结构,在系统内部,通过动态的载入所需的模块,放入一个module_bank的结构体中统一管理,连VLC的Main模块也是通过插件的方 式动态载入的(通过module_InitBank函数在初始化建立module_bank时)。对于不支持动态载入插件的系统环境中,VLC也可以采用 builtin的方式,在VLC启动的时候静态载入所需要的插件,并放入module_bank统一管理。
VLC 的模块分成很多类别主要有:access、access_filter、access_output、audio_filter、 audio_mixer、audio_output、codec、control、demux、gui、misc、mux、packetizer、 stream_output、video_filter、video_output、interface、input、playlist等(其中黑体为核 心模块)。VLC无论是作为流媒体服务器还是多媒体播放器,它的实质思路就是一个“播放器”,实质处理的是ES、PES、PS、TS等流间的转换、传输与显示。
这里主要的文件模块做了梳理,请大家多多指教😊。
1. 主要线程
主线程:
vlc/src/input/input.c
解码线程:
vlc/src/input/decoder.c
2.网络及数据相关文件
网络相关:
vlc/modules/access/http.c
vlc/src/network/tcp.c
vlc/src/network/Io.c
数据相关:
vlc/src/input/strem.c
3. 视频相关
3.1 m3u8相关文件
m3u8文件解析及视频地址的维护 及TS包解析 、同步
vlc/modules/strean_filter/httplive.c:
vlc/modules/demux/ts.c
3.2 mp4相关文件
mp4 处理 、同步
vlc/modules/demux/mp4/mp4.c
vlc/modules/demux/mp4/libmp4.c
4. 缓存队列
vlc/src/input/es_out.c
vlc/src/misc/block.c
vlc/src/misc/picture_fifo.c
5. 解码文件
vlc/modules/codec/avcodec/video.c
vlc/modules/codec/avcodec/audio.c
vlc/modules/codec/videotoolbox.m
6. 输出
6.1 视频输出
vlc/src/video_output/video_output.c
vlc/modules/video_output/ios2.m
vlc/modules/video_output/iospanorama.m
6.2 音频输出
vlc/modules/audio_output/audiounit_ios.m