Media Foundation在windows7中的功能被大大增强,包括支持了更多的格式、支持采集、支持硬件编码器接口等,扩展了接口、增强了API等。本系列将逐一讲解。先介绍架构。
Media Foundation被分成几层:
一、基础层(Media Foundation Primitives):贯穿于整个Media Foundation中的基础对象。
二、平台层(Media Foundation Platform):提供工作队列、一不回调、事件发送、以及各种帮助对象。
ü 提供统一的异步回调API:诸如网络流操作、分析分拣、解码等操作都需要callback函数。
ü 提供统一的事件模型,所有对象利用这一个模型去发送事件通知:诸如异步回调函数结束、对象状态改变。
ü Platform还提供工作队列,不同的线程中都可操作、共享工作队列,工作队列为其它线程执行异步操作提供了一种高效的方法。
三、管道(Pipeline):定义了所有处理Media Foundation数据管道中数据(Media Data)的对象。这项对象包括创建、操作、最终render。media source、编解码器、色彩变换,也都在这一层。
有三种类型Pipeline对象:
ü Media Source:Media Source从网络、文件等获取原始数据
ü Media Foundation transforms(MFTs):
逻辑上类似于Directshow中的Transform filter,encoder、decoder、DSPs在此对象中实现,每个对象可以有n个输入、输出,但是注意有两点的不同:
1) Pipeline中各个组件的连接及数据移动,都需要应用程序来控制(类似于DMO,不像Directshow那样由filter graph来控制)
2) Media Source中的数据,必须被“拉”到后面的组件中。当然,这个拉的操作,可以是应用程序来控制,也可以是Control Layer来请求。
ü Media Sink:类似于Directshow中的Render Filter,用于最后视频显示、写文件、向网络上发送数据等。
注意:如果应用程序不用控制层(Control Layer)、不用media Session,而是将pipeline组件作为独立的对象,就不能访问受保护的内容。
四、控制层(Control Layer):管理整个数据流(端到端),控制管道(Pipeline)中的工作过程。控制层(Control Layer)通常包括下列对象:
ü Media Session:管理Pipeline中的数据流
ü 拓扑Topology:应用程序中的管道(Pipeline)可能会有多个,拓扑用于描述管道(Pipeline)中的连接
ü 显示时钟(Presentaion clock):当数据显示(render)时,提供一个参考时钟
ü 源创建者(Source resolver):从URL或字节流中创建Media Source类型的Pipeline对象
ü 源序列管理者(Squencer Source):管理源列表,以及源之间的切换。可以整合多个源,让应用程序看起来像一个
五、版权保护层(Protected Media Path):提供版权保护。类似于DRM?该层一般不用。
大多数的Media Foundation应用会用到Platform、Pipeline、Control这三层中的API
========================================
以上内容,为个人原创,如转载,请告知作者!Sanford.sh@gmail.com