Media Foundation——架构

终翔
2023-12-01

Media Foundationwindows7中的功能被大大增强,包括支持了更多的格式、支持采集、支持硬件编码器接口等,扩展了接口、增强了API等。本系列将逐一讲解。先介绍架构。

 

Media Foundation被分成几层:

 

一、基础层(Media Foundation Primitives:贯穿于整个Media Foundation中的基础对象。

 

二、平台层(Media Foundation Platform:提供工作队列、一不回调、事件发送、以及各种帮助对象。

ü         提供统一的异步回调API:诸如网络流操作、分析分拣、解码等操作都需要callback函数。

ü         提供统一的事件模型,所有对象利用这一个模型去发送事件通知:诸如异步回调函数结束、对象状态改变。

ü         Platform还提供工作队列,不同的线程中都可操作、共享工作队列,工作队列为其它线程执行异步操作提供了一种高效的方法。

 

三、管道(Pipeline:定义了所有处理Media Foundation数据管道中数据(Media Data)的对象。这项对象包括创建、操作、最终rendermedia source、编解码器、色彩变换,也都在这一层。

有三种类型Pipeline对象:

ü         Media SourceMedia Source从网络、文件等获取原始数据

ü         Media Foundation transforms(MFTs)

逻辑上类似于Directshow中的Transform filterencoderdecoderDSPs在此对象中实现,每个对象可以有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应用会用到PlatformPipelineControl这三层中的API

 

 

 

 

 

========================================

以上内容,为个人原创,如转载,请告知作者!Sanford.sh@gmail.com

 

 

 类似资料: