FFmpeg入门详解之65:三大多媒体框架简介与分析

1.DirectShow

1.1DirectShow的概念

DirectShow GraphEdit(graphedt.exe)来进行分析:

在上图中可以直观的看到播放这个媒体文件的基本模块,七个模块按广度顺序:读文件模块, 解复用模块, 视频解码模块, 音频解码音频, 颜色空间转换模块,视频显示模块,

音频播放模块。

按照DirectShow的称呼, 一个模块叫做一个filter(过滤器),模块的输入输出口叫做pin(管脚), 有input pin 和output pin两种; 第一个filter叫做Source filter, 每种媒体最后一个filter叫做Sink filter, 如上图所示连成串的所有filter组成一个Graph, 媒体文件的数据就像流水一样在Graph中流动, 各个相关的filter各司其职, 最后我们就看到了视频,也听到了声音(松耦合、高内聚)。

功能模块与组件分析

DirectShow中和播放器有关的filter粗略的分为五类, 分别是Source filter, Demux fiter,

Decoder filter, Color Space converter filter, Render filter, 各类的filter的功能与作用简述如下:

Source filter:源过滤器, 它的作用是为下级的demux filter以包的形式源源不断的提供数据流。在通常情况下,我们有多种方式可以获得数据流, 一种是从本地文件中读取,一种是从网上获取, Sourcefilter另外的一个作用就是屏蔽读本地文件和获取网络数据的差别,

在下一级的demux filter看来,本地文件和网络数据是一样的。总结一下, Sourcefilter有两个作用:其一是为下一级的demux filter提供数据流, 其二是屏蔽读本地文件和获取网络数据的差别即对于下一级的demux filter看来,本地文件和网络数据是一样的。

Demux filter:解复用过滤器, 它的作用是识别文件类型, 媒体类型, 分离出各媒体的原始数据流, 并打上时钟信息后送给下级的decoder filter。为识别出不同的文件类型和媒体类型,常规的做法是读取一部分数据, 然后遍历解复用过滤器支持的文件格式和媒体数据格式, 做匹配来确定是哪种文件类型,哪种媒体类型;有些媒体类型的原始数据外面还有其他的信息,比如时间,包大小,是否完整包等等。Demux filter解析数据包后取出原始数据, 有些类型的媒体不管是否完整包都立即送往下级的decoder filter, 有些类型的媒体要送完整数据包, 此时可能有一些数据包拼接的动作;当然时钟信息的计算也是demux filter的工作内容, 这个时钟用于各媒体之间的同步。例如, AVI Splitter是Demux filter。

Decoder filter:解码过滤器的作用就是解码数据包,并且把同步时钟信息传递下去,对视频媒体而言,通常是解码成YUV数据,然后利用显卡硬件直接支持YUV格式数据Overlay快速显示的特性让显卡极速显示。YUV格式是一个统称, 常见的有YV12, YUY2, UYVY等等。有些非常古老的显卡和嵌入式系统不支持YUV数据显示, 那就要转换成RGB格式的数据, 每一帧的每一个像素点都要转换, 分别计算RGB分量,并且因为转换是浮点运算, 虽然有定点算法, 还是要耗掉相当一部分CPU,总体上效率低下。对音频媒体而言, 通常是解码成PCM数据,然后送给声卡直接输出, 在本例中, AVI Decompress和ACM Warper是decoder filter。

Color space converter filter: 颜色空间转换过滤器,它的作用是把视频解码器解码出来的数据转换成当前显示系统支持的颜色格式。通常视频解码器解码出来的是YUV格式࿰

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值