Skip to content

Latest commit

 

History

History
65 lines (51 loc) · 3.94 KB

File metadata and controls

65 lines (51 loc) · 3.94 KB

播放器基本原理

播放器模块划分

读文件模块、解复用模块、视频解码模块、音频解码音频、颜色空间转换模块、视频显示模块、音频播放模块。
DirectShow 中和播放器有关的filte r 粗略的分为五类:
  • Source filer
  • Demux flter
  • Decoder filter
  • Color Space converter filter
  • Render filter

各类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 的数据速率,按照这个速率往前播放即可;视频必须要使用同步时钟信息来决定什么时候显示。

Filter对应到ffplay

  • 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 库帮我们显示视频,播放音频。

FFmpeg主要的数据结构之间的联系

1

参考资料: