- Source filer
- Demux flter
- Decoder filter
- Color Space converter filter
- Render filter
- Source filter 源过滤器
- 1: 为下级demux filter 以包的形式源源不断的提供数据流。
- 2: 屏蔽读本地文件和获取网络数据的差别。
- Demux filter 解复用过滤器
- 识别文件类型,媒体类型,分离出各媒体原始数据流,打上时钟信息后送给下级decoder filter。
- Decoder filter 解码过滤器
- 解码数据包,并且把同步时钟信息传递下去。
- 对视频媒体而言,通常是解码成YUV 数据,然后利用显卡硬件直接支持YUV 格式数据Overlay 快速显示的特性让显卡极速显示。
- 对音频媒体而言,通常是解码成PCM 数据,然后送给声卡直接输出。
- Color space converter filter 颜色空间转换过滤器
- 把视频解码器解码出来的数据转换成当前显示系统支持的颜色格式。
- Render filter 渲染过滤器
- 在适当的时间渲染相应的媒体,对视频媒体就是直接显示图像,对音频就是播放声音。
- 视音频同步的策略方法有好几种
- 最简单的一种就是默认视频和音频基准时间相同,这时音频可以不打时钟信息,通过计算音频的采样频率,量化bit 数,声道数等基本参数就知道音频PCM 的数据速率,按照这个速率往前播放即可;视频必须要使用同步时钟信息来决定什么时候显示。
- Source filter 读文件模块
- 最低层: file、pipe、tcp、udp、http等具体本地文件或者网络协议。
- 中间抽象层: 使用URLContext 结构来统一表示底层具体的本地文件或网络协议。
- 最上层: 用ByteIOContext 结构来扩展URLProtocol 结构成内部有缓冲机制的广泛意义上的文件,并且仅仅由ByteIOContext 对模块外提供服务。
- 此模块主要有libavformat 目录下的file.c,avio.h, avio.c, aviobuf.c 等文件,实现读媒体文件功能。
- Demux filter 解复用模块
- 底层是AVIContext,TCPContext,UDPContext 等等这些具体媒体的解复用结构和相关的基础程序。
- 上层是AVInputFormat 结构和相关的程序。
- 上下层之间由AVInputFormat相对应的AVFormatContext 结构的priv_data 字段关联AVIContext 或TCPContext 或UDPContext 等等具体的文件格式。
- AVInputFormat 和具体的音视频编码算法格式由AVFormatContext 结构的streams 字段关联媒体格式,streams相当于demux filter 的output pin,解复用模块分离音视频裸数据通过streams 传递给下级音视频解码器。
- libavformat 目录下的avidec.c,utils_format.c 文件。
- Decoder filter 解码模块
- 由AVCodec 统一表述。
- 上层是AVCodec 对应的AVCodecContext 结构和相关的基础程序。
- 底层是TSContext,MsrleContext 等等这些具体的编解码器内部使用的结构和相关的基础程序。
- 此模块主要有libavcodec 目录下的msrle.c,truespeech.c,truespeech_data.h,utils_codec.c 等文件。
- Color space converter 颜色空间转换模块
- 此模块主要有libavcodec 目录下的imgconvert.c,imgconvert_template.h 文件。
- Render filter 渲染模块
- ffplay 中的渲染模块使用SDL 库,由SDL 库帮我们显示视频,播放音频。
