Windows Media Foundation学习笔记1——MF核心概念

该笔记参考书籍《Developing Microsift Media Foundataion Application》,因此有不少是从该书中摘录的,如有侵权,不胜惶恐!

MF核心概念:component(组件),这里的组件类似于directshow的filter,即针对某一特定功能封装成一个component,该特定功能可以是解码,编码,渲染等等,通过把这些component组合,形成pipeline,就可以完成多媒体应用程序所需的各种功能,跟directshow链接filter一样,保持filter功能的独立性同时又提供灵活多变的组合功能。其实OpenGL也有pipeline一说,通过一道道工序完成最后屏幕中所想要输出的图形图像。

一个完整的文件播放pipeline,如下图所示(从《Developing Microsift Media Foundataion Application》书中复制而来):

小的矩形框,例如“Audio decoder”、“Video decoder”即为component组件,整个的chain链路形成一个pipeline,完成文件播放功能。该链路可以切成3个部分:文件源、数据解码、渲染,在dshow里面则分别对应source filter,transform filter,render filter,但在MF里面有专门的术语,以下一一描述:

1. MF sources:对应图中的File source,源头的意思,用来产生数据以给后面组件处理,这里的数据可以是来自本地文件(如上图),也可以是来自网络。还应该注意的是该File source其实还做了音视频数据分离的工作,以分别针对后续组件(音频解码和视频解码)。

2. Media Foundation transforms (MFTs):  对应图中的Audio decoder和Video decoder,用来“转换”(transforms),解码嘛,很明显。

3. MF sinks:对应图中的Audio render和Video render,sink字面解释"渗透"、“下沉”,该组件可以用来做最终数据的渲染,也可以用来把数据发送至网络另一端,例如视频通话中把本地视频编码并在MF sinks中打包码流发送给网络另一端。

而以上三种类型component的连接,则是基于它们各自的输入输出类型,例如假设Video decoder的输入是h.264码流,输出是yuv图像,则它上游的file source的输出最起码能支持h.264码流输出,否则这两个component就连接不成功;同样video decoder的下游video render的输入类型也得是支持yuv图像输入的。可能以上描述不够严谨,但大致就是这个意思,到具体代码的时候再详加分析。

接下来要描述的是组件之间的数据传递,在MF中是以Media Sample来描述传递的数据,Media sample中还包括数据的属性(不仅仅是raw data)。DShow也是用的IMediaSample来传递数据,很和谐啊。

最后描述的是MF的调试工具,乖乖,名字是“topoedit”,骚年,DShow的是“graphedit”!windows sdk里面还有topoedit源码,不错哟,可以研究下。

谈谈感受,看完该章感觉和DShow结构模型类似,只是换了些说法,还没体会到MF的精髓啊!待续。。。

时间: 2024-08-04 11:48:16

Windows Media Foundation学习笔记1——MF核心概念的相关文章

Windows Media Foundation学习笔记3——媒体播放

跳过第二章对工具TopoEdit的介绍,直接进行媒体播放的学习. 媒体播放这章,介绍了个文件播放的例子,想起当初学习dshow的时候,一开始也是个文件播放例子,不过那个例子比较简单,没多少代码,nnd,而这个demo彻底瞎了,就一个简单的文件播放就这么多代码,哎. 这章的第一要义是说MF广泛使用COM技术但又不是真正的COM接口,也就是MF混合了COM和正常的对象,使用COM的话很明显得初始化COM. 以下按照播放一个文件的流程,介绍使用到的MF相关概念: 1. 初始化COM,初始化MF.(特别

a new Webcam Api Tutorial in C++ for Windows(Windows Media Foundation)--WMF

Sample source code: http://pan.baidu.com/s/1o60VAEA Foword from: http://www.dreamincode.net/forums/topic/347938-a-new-webcam-api-tutorial-in-c-for-windows/page__st__0%26 Well, A long time ago I introduced a Webcam Tutorial. It was for Video For Windo

Windows phone 8 学习笔记(1) 触控输入(转)

Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此在输入方式上引入一套全新的触控操作方式,我们需要重新定义相关的事件和方法.触控覆盖了Windows phone 8绝大部分用户的输入,如何处理输入呢,微软从SL和XNA两个方面提供了多种选择,并支持多点触控,下面我们看看具体的实现方式. 一.触控输入的处理方式 Silverlight 1)操作事件    用于触控操作是一个过程性的,因此通过三个事件Manipul

Windows phone 8 学习笔记(2) 数据文件操作(转)

Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式. 快速导航:一.分析各类数据文件存储方式二.安装文件夹三.本地文件夹(独立存储空间)四.媒体库操作五.本地数据库 一.分析各类数据文件存储方式 1)安装文件夹 安装文件夹即应用安装以后的磁盘根文件夹,它提供只读的访问权限.它在手机中对应的路径为" C:\Data\Programs\{XXXXXXX

node.js在windows下的学习笔记(2)---简单熟悉一些命令

1.打开如下的安装 2.输入node -v,显示node的版本号 3.输入node --help.显示帮助命令 4.自己用一个文本编辑器编写一下代码,保存为text.js,然后在控制台输入node.exe  text.js的路径(直接把这个js文件拖到控制台自动显示路径),按下回车键 var http = require("http"); http.createServer(function(request, response) { response.writeHead(200, {&

node.js在windows下的学习笔记(1)---安装node.js

1.首先打开http://www.nodejs.org/ 2.选择DOWNLOADS,跳转到下面的画面,我的系统是windows7的32位.所以选择.msi的32bit版本. 3.下载后,得到一个5.43MB大小的安装包, 4.运行安装包 点击next 打个勾,点击next 选择安装目录 最后,安装成功啦 node.js在windows下的学习笔记(1)---安装node.js,布布扣,bubuko.com

Foundation 学习笔记

笔记内容 学习笔记-段玉磊 Stanford course Foundation and Attributed Strings Dynamic binding id 是一个指向任何未知对象的指针,(the consept of dynamic binding) 静态类型化:id 不会发生警告 而NSString *s 会发生警告! Nerver use iD ,因为id只是指针,很危险!! 强制转换需要保护! id保护机制 Introspection 内省机制 ,也就是说通过指定id是什么类型

黑马程序员——Foundation学习笔记(NSSet和NSMutableSet)

==========android培训.ios培训.java培训.期待与您交流========== 一.NSSet: NSSet NSSet里面存储的元素没有顺序,NSArray中的元素有顺序. NSSet *s = [NSSet set]; // 创建一个空的Set,永远是空,不可变. NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",nil]; NSString *str = [s2 anyObject]; //

Windows Phone开发学习笔记(1)---------自定义弹框

Windows Phone开发学习笔记(1) ---------自定义弹框 在WP中自定义弹框是可以通过Popup类实现的. Popup的语法为: [ContentPropertyAttribute("Child")] [LocalizabilityAttribute(LocalizationCategory.None)] public class Popup : FrameworkElement, IAddChild; 这是Popup使用的小列子 Popup codePopup =