学习Media Foundation之前需要理解以下几个重要概念。
(一)流
定义:一个使用一致类型的媒体数据序列。例如:视频、音频、文本、脚本命令、静止图片等。
通常一个媒体文件包含一个或者多个流。
(二)压缩
目的:通过移除冗余数据来减小数据流的大小。
分为有损和无损压缩2种压缩方式。
(三)媒体容器
一个容器至少包含以下部分:
文件头:描述流的数目,各个流的格式等等;
索引:使能可以随机存取内容;
元数据:描述内容。例如,作者列表或者标题;
包头:使能网络传输和随机存取。
之所以称“容器”,不称“文件”,原因就是一些容器格式是被设计用于直接广播,应用程序实时地产生这种容器,从不保存到文件。
像avi文件格式、MP4文件格式、ASF文件格式都是容器。我们能够挺过文件扩展名(例如:.MP4)或者MIME类型来识别。
下面的图表展示了一个典型的媒体容器的结构:
(四)格式
格式是一个含糊不清的概念,它既可以指编码类型(例如:H.264视频),也可以指容器类型(例如:MP4),也可以2者都是(例如:MP3既指编码格式是MPEG-1AudioLayer3,也指.MP3文件格式)。
Media Foundation使用COM接口。
下面的图表展示了读取一个媒体文件使用的COM组件:
下面的图表展示了保存一个媒体文件使用的COM组件: