FFplay播放器实战及源码剖析


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

播放器原理

直观的讲,播放一个媒体文件一般需要5个基本模块,按层级顺序:

  • 文件读取模块(Source)

  • 解复用模块(Demuxer)

  • 视频频解码模块(Decoder)

  • 色彩空间转换模块(Color Space Converter)

  • 音视频渲染模块(Render)


数据的流向如下图所示,其中 ffmpeg 框架包含了文件读取、音视频解复用的模块。

image.png


1.文件读取模块(Source)的作用是为下级解复用模块(Demuxer)以包的形式源源不断的提供数据流,对于下一级的Demuxer来说,本地文件和网络数据是一样的。在ffmpeg框架中,文件读取模块可分为3层:


协议层: pipe,tcp,udp,http等这些具体的本地文件或网络协议

抽象层:URLContext结构来统一表示底层具体的本地文件或网络协议

接口层用:AVIOContext结构来扩展URLProtocol结构成内部有缓冲机制的广泛意义上的文件,并且仅仅由最上层用AVIOContext对模块外提供服务,实现读媒体文件功能。


2.解复用模块(Demuxer):的作用是识别文件类型,媒体类型,分离出音频、视频、字幕原始数据流,打上时戳信息后传给下级的视频频解码模块(Decoder)。可以简单的分为两层,底层是 AVIContext,TCPContext,UDPContext 等等这些具体媒体的解复用结构和相关的基础程序,上层是 AVInputFormat 结构和相关的程序。上下层之间由 AVInputFormat 相对应的 AVFormatContext 结构的 priv_data 字段关联 AVIContext 或 TCPContext 或 UDPContext 等等具体的文件格式。AVInputFormat 和具体的音视频编码算法格式由 AVFormatContext 结构的 streams 字段关联媒体格式,streams 相当于 Demuxer 的 output pin,解复用模块分离音视频裸数据通过 streams 传递给下级音视频解码器。


3.视频频解码模块(Decoder)的作用就是解码数据包,并且把同步时钟信息传递下去。


4.色彩空间转换模块(Color Space Converter)颜色空间转换过滤器的作用是把视频解码器解码出来的数据转换成当前显示系统支持的颜色格式


5.音视频渲染模块(Render)的作用就是在适当的时间渲染相应的媒体,对视频媒体就是直接显示图像,对音频就是播放声音




好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***