学习Media Foundation之前需要理解以下几个重要概念。

(一)流

定义:一个使用一致类型的媒体数据序列。例如:视频、音频、文本、脚本命令、静止图片等。

通常一个媒体文件包含一个或者多个流。

 

(二)压缩

 

目的:通过移除冗余数据来减小数据流的大小。

分为有损和无损压缩2种压缩方式。

 

(三)媒体容器

 

一个容器至少包含以下部分:

文件头:描述流的数目,各个流的格式等等;

索引:使能可以随机存取内容;

元数据:描述内容。例如,作者列表或者标题;

包头:使能网络传输和随机存取。

 

之所以称“容器”,不称“文件”,原因就是一些容器格式是被设计用于直接广播,应用程序实时地产生这种容器,从不保存到文件。

像avi文件格式、MP4文件格式、ASF文件格式都是容器。我们能够挺过文件扩展名(例如:.MP4)或者MIME类型来识别。

 

下面的图表展示了一个典型的媒体容器的结构:

 

(四)格式

格式是一个含糊不清的概念,它既可以指编码类型(例如:H.264视频),也可以指容器类型(例如:MP4),也可以2者都是(例如:MP3既指编码格式是MPEG-1AudioLayer3,也指.MP3文件格式)。

 

Media Foundation使用COM接口。

 

下面的图表展示了读取一个媒体文件使用的COM组件:

下面的图表展示了保存一个媒体文件使用的COM组件:

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐