接触MAC下的QuickTime开发也有一段时间了,一直也没有时间纪录下学习过程中的点点滴滴,现在我就简单讨论一下苹果QuickTime开发的难点,重点,也希望有相关技术的兄台能给点指点,不胜感激!
MAC下作音视频开发首先你要弄清楚苹果下的视频格式,我就简单介绍一下苹果自己的视频格式.MOV格式,.MOV格式是对图片视频的压缩,归纳起来就是单个图片按照播放顺序进行解码和显示,其中没有用到帧间参考(这是我自己理解的,有不正确的地方欢迎大家指正)。但像MPEG2,MPEG4等视频压缩格式都存在帧间的参考,如P帧的前向参考和B帧的前向参考和后向参考。
Mac下的视频流程和DirectShow的流程有一定的相似度,但又存在很大的区别,首先你应该了解一下几个概念:
Movie ToolBox (提供控制Movie播放的上层Api函数和驱动力)。
Image Compress Manager (提供音视频压缩,解码的上层Api以及和底层交互的参数变量)。
QuickTime下没有Filter的概念,每一个播放环节都进行了模块化,成为Component(构件)。苹果提供犹如Movie Import Component,Media Handler Component,Decompress Component,Clock Component,Compress Component等等,具体要用到的可以参考Mac的IDC。
QuickTime 对媒体的播放可以理解成下面这样:
首先:你需要利用Movie Import Component 将媒体引入填充到一个Movie框架中。
其次:在Media Handler Component 中要对这个Movie 框架中的数据进行读取。
再次:将读取的数据通过Decompress Component进行解压缩到一个系统制定的buffer中就可以实现现实。
最后:就是通过对各个函数的实现来进行媒体播放的控制。
MAC下写Component不存在类继承的概念,但是提供了一个Delegate的对象,也就是相当于系统帮你实现不需要的部分,这个和继承有点相似。所以写Component不需要自己实现每一个功能,只要找到一个合适的Component就可以帮你完成大部分功能,这个我们一般选取base的对象。