《在线视频播放系统的设计与实现(共54页).doc》由会员分享,可在线阅读,更多相关《在线视频播放系统的设计与实现(共54页).doc(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 题 目 在线视频播放系统的设计与实现 学生姓名 崔媛媛 学号 所在学院 物理与电信工程学院 专业班级 电子1202 指导教师 李菊叶 完成地点 物电学院计算机信息处理分室 2016 年 6 月 5 日专心-专注-专业毕业论文设计任务书院(系) 物电学院 专业班级 电子信息工程 学生姓名 崔媛媛 一、毕业论文设计题目 在线视频播放系统的设计与实现 二、毕业论文设计工作自 2016 年 3 月 10 日 起至 2016 年 6 月 20 日止三、毕业论文设计进行地点: 物电学院计算机信息处理分室 四、毕业论文设计的内容要求:随着网络的普及,在线播放器也日益普及起来。本设
2、计要求学生利用Visual C+为开发工具,使用DirectShow SDK技术开发一个功能齐全的视频播放器,要求能够对硬盘或存储设备上的多媒体文件进行播放,及在回放或显示过程中,用户可以控制回放的动作和显示特性等相关功能。 五、 毕业论文设计应收集资料及参考文献: 1徐孝凯,张纪勇.C+面向对象程序设计:VC+6.0运行环境M.天津大学出版社2009. 2汪晓平,钟军.VC+网络通信协议分析与应用实现M.北京:人民邮电出版社,2003. 3王艳平,张越.Windows网络与通信程序设计M.北京:人民邮电出版社,2006. 4 Andrew S.Tanenbau.计算机网络(第四版)M.北京:
3、清华大学出版社,2004. 5谢希仁.计算机网络(第五版)M.北京:电子工业出版社,2012. 6朱桂英.张元亮 Visual C+网络编程开发与实践M.清华大学出版社.2013. 六、 毕业论文设计的进度安排: 3月2日3月29日:查阅资料,完成初步设计方案和开题报告。 4月1日4月26日:根据视频播放系统的工作原理,给出设计方案,及软件流程图。 4月29日5月24:并在软件环境下进行运行调试,进一步完善系统功能,整理资料; 5月27日6月7日:撰写、修改毕业设计论文。 6月10日6月15日:打印论文准备并完成答辩。 指导教师签名 系(教研室)主任签名 专业负责人签名 批准日期 在线视频播放
4、系统的实现与设计崔媛媛(陕西理工学院物理与电信工程学院电子信息工程专业,2012级2班,陕西 汉中 )指导教师:李菊叶摘要本设计在Visual C+环境下,利用MFC程序设计方法。并利用DirectShow的播放器核心技术,重点实现了播放、暂停、停止 、声音控制、进度控制、抓取视频帧、播放模式控制、全屏等功能。通过对系统的需求分析、设计、实现,完成了多媒体播放器系统,各项功能使用正常,并给出了实现关键代码。DirectShow是基于COM组件,它是二进制级别的(不受限于编程语言和操作系统),具有很好的兼容性和移植性。关键字Visual C+;MFC;DirectShow;播放器The desi
5、gn and implement of online video broadcast systemCui Yuanyuan(Grade12,Class02,Major electronics and information engineering,School of Physics and Telecommunication Engineering,Shaanxi University of Technology,Hanzhong ,Shaanxi)Tutor:Li JuyeAbstract:This design uses MFC program design methods Under V
6、isual C+ environment. At the same time,uses DirectShow player core technology. Focus to achieve the play, pause, stop, sound control, schedule control, grab video frames, playback mode control, full screen and other functions.Through the system requirements analysis, design, implementation, complete
7、d a media player system, various functions normal use, and gives the realization key code.DirectShow is based on the COM component, it is a binary level (not limited to programming languages and operating systems), has good compatibility and portability. Keywords: Visual C+ ;MFC;DirectShow;Player目录1
8、.引言随着社会的发展,信息技术越来越发达,在线视频播放器在未来社会应用也会越来越普遍。Microsoft的Windows操作系统作为全球最主流、最常用的操作系统,掌握在它上面的多媒体开发技术显得越来越需要,相对于其他多媒体开发技术,掌握它本身提供的DirectX多媒体开发包显得更为适合。DirectShow是微软提供的多媒体开发包DirectX中的一部分,它是建立在DirectDraw和DirectSound基础之上。 Microsoft给DirectShow程序员提供了一套开发多媒体标准的、统一的、高效的API接口,这些接口使得多媒体数据的回放变得简单,剥离了应用程序和硬件底层的差异性。而D
9、irectShow是基于COM组件的开发包,COM是基于二进制代码级的协议(与编程语言无关的协议),对使用DirectShow开发的软件以后的移植和兼容问题提供了良好的解决方案。 DirectShow使用智能连接开发多媒体应用程序,大大简化了开发人员工作量,同时开发人员亦可开发自定义的滤波器。使得基于DirectShow的应用程序可以充分满足不同用户的需求。在未来几年中,DirectShow技术的发展前景将是非常广阔的。1.1背景 当今信息技术越来越发达,社会越来越信息化、智能化,多媒体在未来社会应用越来越广泛。Microsoft的Windows操作系统作为全球最主流、最常用的操作系统,掌握在
10、它上面的多媒体开发技术显得越来越需要,相对于其他多媒体开发技术,掌握它本身提供的DirectX多媒体开发包显得更为适合。1.2 研究目的 DirectShow是微软提供的多媒体开发包DirectX中的一部分,它是建立在DirectDraw和DirectSound基础之上。 Microsoft给DirectShow程序员提供了一套开发多媒体标准的、统一的、高效的API接口,这些接口使得多媒体数据的回放变得简单,剥离了应用程序和硬件底层的差异性。而DirectShow是基于COM组件的开发包,COM是基于二进制代码级的协议(与编程语言无关的协议),对使用DirectShow开发的软件以后的移植和兼
11、容问题提供了良好的解决方案。 DirectShow使用智能连接开发多媒体应用程序,大大简化了开发人员工作量,同时开发人员亦可开发自定义的滤波器。使得基于DirectShow的应用程序可以充分满足不同用户的需求。在未来几年中DirectShow技术的发展前景将是非常广阔的。1.3 开发环境及语言本文中视频播放系统使用C+语言及Directshow SDK技术,使用visual c+ 2010软件在directshow的开发环境下进行视频播放器的开发。1.3.1 VC+2010平台Microsoft ,(简称Visual C+、MSVC、VC+或VC)C+语言开发工具,一个,能够提供编辑C语言,C
12、+以及C+/CLI系列。VC+整合便利的除错工具,尤其是整合、三维的动画DirectX API,Microsoft .NET框架1。Microsoft Visual C+是微软公司推行开发的Win32环境程序、面向对象且可视化的集成化可编程系统。其主要优点如下:(1)程序框架能够自动生成(2)便于灵活类管理(3)代码编写与界面的设计可集成相互操作(4)可开发各种程序(5)支持各个数据库的接口、OLE2、WinSock网络和3D控制界面1.3.2 MFC概述MFC(Microsoft Foundation Classes)是微软公司所提供的类型库(class libraries),以C+类的方式
13、封装了Windows的API,且含有应用程序的框架,来减少程序开发者的工作量。MFC中的关键技术:(1)MFC程序的初始化过程建立一个MFC窗口:从CWinApp派生应用程序类,然后建立应用程序对象(theApp)。(2)动态创建运行的时候创建指定的类的对象。比如视对象、框架的窗口对象等等,比如文档对象需由文档模版类对象进行动态的创建。 (3)串行化尽管程序中有着各种数据,串行化机制也如流水般按照顺序储存置于单一文件里,并且也能按照顺序取出,成为不同对象的数据。 (4)消息映射和传递MFC把SDK编程中对消息的产生、传递、到过程函数中响应的过程封装起来,形成消息映射宏、消息映射表和消息响应函数
14、体系,更加直观和便于操作2。 2. DirectShow介绍2.1 DirectShow系统DirectShow是新一代基于COM的流媒体处理的开发包,是微软公司在ActiveMovie和Video for Windows的基础上推出的,与DirectX开发包共同发布。Directshow为多媒体的回放和捕捉提供了有力强大的支持。应用DirectShow,能方便地在支持WDM中捕获数据,且后期进行一些相应处理乃至储存到文件里。这样在多媒体的数据库管理系统里多媒体的数据存取就会更加方便。它的架构如图1所示。图中央即是DirectShow系统,虚线下面是Ring 0特权级硬件设备,虚线上面是Rin
15、g 3特权级的应用层。DirectShow系统处于应用层。它用Filter Graph模型来管理整体数据流的处理。参与数据的处理的各功能模块称做Filter;各个Filter在Filter Graph中按相应顺序连成一条“流水线”协调工作3。事件Directshow文件系统RenderingFilters命令文件系统因特网VFW采集设备内核流架构WDM采集MPEG2硬件解码器ACM/VCM编解码器显卡DirectDraw应用程序 Filter Graph ManagerSourceFiltersTransformFilters声卡DirectSound图2.1 DirectShow架构2.2
16、DirectShow技术2.2.1 过滤器过滤器是DirectShow 的基本组成单元。DirectShow把数字媒体的处理(播放、捕获和格式转换)划分为一些独立的步骤,过滤器就是完成一个或多个步骤的COM 对象。DirectShow提供了一组标准的过滤器供应用程序使用,程序开发者也可以创建自定义的过滤器来扩充Directshow的功能,但必须是以COM形式建立的4。按照功能来分,Filter大致分为3类:Source Filter、Transform Filter和Rendering Filter。所有能生成流的DS filter都可以认为是Source filter。这个流可以源自硬盘上的
17、文件,也可以是实时设备,如话筒,摄像头,或是DC。如果这个流是源自磁盘,那么它可以是预先记录的WAV, AVI或是Windows Media文件。相应的,如果源是一个实时设备,那么它可以是Window兼容的所有外设。DS是紧密绑定在WDM上,所有的安装后的多媒体设备的WDM驱动都自动可作为DS的源filter。因此,例如,安装了驱动的摄像头可以立即成为DS的源filter。将实时设备转换成DS流的源filter又可以称作捕捉源filter。第12章详细描述了源filter的设计实现。Transform Filter是DS着墨最多的工作。转换filter从其它filter(可能是源filter)
18、接收一个输入流,对流执行某些操作后,将流传输给下一个filter。几乎所有能相像得到的对音视频流的操作都可以在转换filter中实现。一个转换filter可以解析流的数据,编码它(可能将WAV数据转换成MP3格式)或解码它,或对一个视频序列添加一个文字层。DS包含有大量的转换filter,如编码或解码各种各样的音视频格式。 转换filter同样还可以给流创建一个多通管道,意思是一个输入流可以复制到一个或多个输出pin上。而有些转换filter可以将多个输入流混合成一个流。渲染filter将DS流转换成某种形式的输出。如基本的渲染filter可以将流写到文件。而其它的渲染filter可以将音频流
19、发送到扬声器,或将视频流发送到桌面上的窗口。DirectShow中的Direct反映的是:使用DirectDraw和DirectSound的渲染filter支持将它的流高效传输给显卡和声卡的技术。这个能力意味着DS的渲染filter能进行快速且无关用户-内核模式的传输。(对于OS来说,这个处理意味着将数据从用户层传输到内核层)。一个filter graph可以有多个渲染filter。如使用一个多通管道将一路视频流送到一个渲染filter以生成文件,另一路则将它送到另一个渲染filter以用于显示。从而可以实现监视视频的同时写文件。简单来说,Source Filter主要负责获取数据,数据源可以
20、是文件、因特网计算机里的采集卡(WDM驱动的或VFW驱动的)数字摄像机等,然后将数据往下传输;Transform Filter主要负责数据的格式转换,例如数据流分离、合成,解码、编码等,然后将数据继续往下传输;Rendering Filter主要负责数据的最终去向将数据送给显卡、声卡进行多媒体的演示,或者输出到文件进行存储。2.2.2 COM组件Directshow是基于COM的流媒体处理的开发包。COM是一种跨应用和语言共享的二进制代码的方法,它是一个开放的组件标准,具有很强的扩展与扩充能力5。优点如下:(1) 可以方便的将应用系统扩展至网络环境;(2) 可以将系统中的组件用新的代替掉,以方
21、便随时进行系统的升级和定制;(3) 可以在多个应用系统中多次利用同一个组件;(4) COM组件与语言和平台无关。 2.2.3针脚Pin过滤器能和一个或者多个过滤器相连,连接接口是COM形式,叫引脚。过滤器用引脚在各过滤器之间传输各种数据。每个引脚都是从IPin这个COM对象派生出来的。每个引脚都是过滤器私有的对象,过滤器能动态地创建引脚、销毁引脚、自由地控制引脚的生存时间。引脚可分为两种类型:输出引脚和输入引脚。相连的两个引脚须是不同类型的,即输入引脚只能和输出引脚相连,并且连接方向常是由输出引脚指向输入引脚的。Filter一般由一个或多个Pin组成,Filter之间通过Pin相互连接,构成一
22、条顺序的链路。Filter的分类亦可根据Filter包含的输入Pin或者输出Pin的数量进行。过滤器间的连接,实质上就是连接双方的媒体类型媒体协商的过程。连接大致的过程为:若调用连接函数的时候已指定完整的媒体类型,那么用此媒体类型进行连接,是否成功都要结束连接进程;如不完全指定或没有指定媒体的类型,就进行下面的枚举过程:枚举欲连接的输入引脚上的所有的媒体类型,逐一使用此媒体类型和输出引脚进行连接(如连接函数提供不完全媒体类型,就要先把每个枚举出的媒体类型和它进行匹配检查),若输出引脚也接受此媒体类型,那么引脚间的连接就成功了;如果输出引脚对全部输入引脚上所枚举的媒体类型均不支持,那么就枚举输出
23、引脚上的全部媒体类型,且逐一利用这些媒体类型和输入引脚来进行连接,如果输入引脚接受其中的一种媒体类型,那么引脚间的连接就成功了;如果对输出引脚上的全部媒体类型输入引脚均不支持,则这两个引脚间的连接过程宣告失败。如图2所示,仅含有输出Pin,没有输入Pin的Filter为Source Filter;既有输入Pin又有输出Pin的Filter为Transform Filter;仅有输入Pin,没有输出Pin的Filter为Rendering Filter。源过滤器输出引脚输入引脚转换过滤器输出引脚输入引脚提交过滤器图2.2 Filter通过Pin连接2.2.4 Filter Graph在Direc
24、tShow中,一个播放程序必需实例化一个或多个过滤器,并把它们连接起来。这样数据才能从一个过滤器到达另一个,经过它们的处理,直到表现过滤器。所有这些过滤器和它们之间的连接被称为过滤器图(Filter Graph)。2.2.5 Filter Graph ManagerFilter Graph Manager 过滤器链表管理器为DirectShow结构的核心,是在过滤器链表中管理各过滤器的COM对象。主要有以下的功能:1 协调Filter之间的状态改变: Graph中的Filter的状态改变应该一致,因此,应用程序并将状态改变的命令直接发给Filter,而是将相应的状态改变的命令发送给Filter
25、 graph Manager,由manager 将命令分发给Graph中每一个Filter。2 建立参考时钟: Graph中的Filter均采用同一个时钟参考时钟(reference clock),来确保所有数据流的同步,音频帧或视频帧应被提交的时间(presentation time)是利用参考时钟确定的。Filter graph Manager 应该选择一个可参考的时钟,可选择声卡上的时钟,亦可选系统时钟。3 将Graph的消息返回于应用程序:Graph管理器用事件机制把Graph中发生的事件通知给应用程序,此机制和Windows 的消息循环机制类似。4 提供方法构建Filter Grap
26、h :Graph 管理器给应用程序提供将Filter 添加进Graph的方法,断开Filter连接的方法,连接Filter的方法。但是,Graph管理器没有提供如何将数据从一个Filter发送到另一个Filter的方法,这个工作是由Filter在内部通过Pin来独立完成的。2.2.6 Filter Graph中的数据流动当用户要创建自定义的过滤器时,需了解媒体数据是如何在过滤器图表中传输的。为了在过滤器图标中传送媒体数据,Directshow过滤器需支持传输协议。连接的过滤器须支持相同的传输相同传输协议,否则不能交换媒体数据。绝大多数的Directshow过滤器会把媒体的数据保存于主存储器里,
27、且通过Pin把数据提交给其他的过滤器,这种传输被称作局部的存储器传输。但并不是所有的过滤器均用局部的存储器传输,例如有的过滤器用硬件传送媒体的数据,而引脚只是来提交所控制的信息。Directshow给局部的存储器传输定义了两种机制,分别是推模式和拉模式:在推模式里,将源过滤器生成数据提交给下级过滤器。下级过滤器被动地接受数据,完成数据处理之后再传送给下级过滤器。在拉模式里,源过滤器和分析过滤器相连。分析过滤器向源过滤器请求数据之后,源过滤器则传送数据来响应请求。2.3 Directshow事件交互DirectShow应该有一种机制,能够让应用程序与Filter Graph Manager之间实
28、现交互控制。常见事件有:EC_COMPLETE,表示Filter Graph中所有的数据都已经回放完毕;EC_ERRORABORT,表示Filter Graph运行时出错;EC_DEVICE_LOST,表示热插拔设备脱离系统;EC_REPAINT,表示视频窗口要求重画当前图像帧。事件处理机制:Filter Graph Manager上有3种接口和事件的通知有关,即IMediaEventSink,IMediaEvent和IMediaEventEx.IMediaEventSink:用在Filter内部,其接口方法Notify用于向Filter Graph Manager发送事件的通知;IMedia
29、Event:应用程序就利用它的接口方法处理Filter Graph Manager发出来的事件;IMediaEventEx:IMediaEvent接口扩展,支持当Filter Graph Manager 发出事件时,用窗口消息的方式来通知应用程序。事件处理大致的过程如下:一.Filter Graph中的Filter发出事件后,接收者是Filter Graph Manager;二.Filter Graph Manager对一些特殊事件拥有默认处理的方法。接到事件之后,或按照默认的方法进行直接处理,或放至事件队列,等候上层应用程序的处理;三.应用程序获知Filter Graph Manager有事
30、件发出后,则可使用IMediaEventEx接口方法到事件队列里读取事件,之后依据事件的类型作相应的处理.那么,应用程序是怎么知道Filter Graph Manager的事件队列里有事件在等待处理?有两种办法:一种是Filter Graph Manager通过发送指定的窗口消息来通知应用程序,另一种通过事件来同步对象。一种:/自定义一个消息,然后调用IMediaEventEx:SetNotifyWindow将其设置给Filter Graph Manager#define WM_GRAPHNOTIFY (WM_APP+100)IMediaEventEx *pEvent=NULL;hr=pGra
31、ph-QueryInterface(IID_IMediaEventEx,(void*)&pEvent);hr=pEvent-SetNotifyWindow(DAHWND)m_hwnd,WM_GRAPHNOTIFY,0);/定义消息映射ON_MESSAGE(WM_GRAPHNOTIFY,OnGraphNotify)/在消息响应函数中获取Filter Graph的事件通知,并作出相应处理,void CNotifyWnd:OnGraphNotify(WPARAM inWParam,LPARAM inLParam)if(pEvent)LONG eventCode=0,eventParam1=0,eve
32、ntParam2=0;while(SUCCEEDED(pEvent-GetEvent(&eventCode,&eventParam1,eventParam2);switch(eventCode)case EC_COMPLETE:break;case EC_USERABORT:break;case EC_ERRORABORT:break;default:break;第二种在Filter Graph Manager在内部创建了一个事件同步对象,它在事件队列中有尚未处理的事件时,状态标记为有效,而当应用程序不断调用接口方法取空事件状态复位。我们可以通过IMediaEvent:GetEventHand
33、le来得到这个事件同步对象的句柄。HANDLE hEvent;long evCode,param1,param2;BOOLEAN bDone=FALSE;HRESULT hr=S_OK;hr=pEvent-GetEventHandle(OAEVENT*)&hEvent);while(!bDone)if(WAIT_OBJECT_0=WaitForSingleObject(hEvent,100)while(hr=pEvent-GetEvent(&evCode,¶m1,¶m2,0),SUCCEEDED(hr)printf(Event code:%#04xn Params:%d,%dn
34、,evCode,param1,param2);hr=pEvent-FreeEventParams(evCode,param1,param2);bDone=(EC_COMPLETE=evCode);2.4 基于DirectShow的应用程序开发基于DirectShow的应用程序开发一般过程如图所示:应用程序滤波图标管理器应用程序滤波图标管理器应用程序滤波图标管理器方法调用事件图2.3 基于DirectShow的应用程序开发过程第一阶段,创建一个Filter Graph Manager组件。第二阶段,根据实际的应用,创建一条完整的Filter链路。第三阶段,调用Filter Graph Manag
35、er上(或直接在某个Filter上)的各个接口方法进行控制,并且完成Filter Graph Manager与应用程序的事件交互。2.5播放媒体文件DirectShow提供了大量的Filter用以支持最基本的应用。根据实际需要,也可以定制一个自己的Filter。它的最基本应用为回放媒体文件。如下图是一个AVI文件的回放链路。默认的音频装置硬盘文件源AVI splitterAVI 解压处理视频输出显卡声卡图2.4 本地AVI格式文件回放的链路其中,箭头的方向即是数据的方向。Filter Source属于Source Filters,它用来管理硬盘里指定播放的文件,并依据AVI Splitter要
36、求提供相应数据。AVI Splitter与AVI解压处理属于Transform Filters,其中,AVI Splitter负责向Filter Source索取数据,并将取得的音频和视频进行分离,然后分别从各自的输出pin输出:AVI 解压处理负责视频的解码。Video Renderer和默认的音频装置负责同步播放声音6。3.多媒体播放器的设计3.1系统功能设计3.1.1媒体文件添加系统的输入数据来源于用户打开读取媒体文件,包含打开单个媒体文件和文件夹两个选择。3.1.2媒体文件存储和显示系统得到输入数据后,对它们进行存储和显示,为后续播放、控制操作奠定基础。3.1.3媒体文件播放及控制已知
37、媒体文件存储信息的基础上,执行源滤波器-分解滤波器-音/视频解码滤波器-音/视频播放滤波器-数据输出(音视频设备)流程以及对整个过程的控制。3.2系统结构设计此软件的整体结构设计如下图所示:视频播放器媒体文件功能播播放器基本功能全屏功能截图功能声音控制功能播放进度控制功能播放暂停停止图3.1 系统整体结构3.3 播放器滤波器链表结构设计视频解码转换滤波器视频播放滤波器源过滤器分解过滤器缓冲区音频解码转换滤波器音频播放滤波器图3.2播放器的滤波器链表结构3.4播放视频文件的流程CoCreateInstance(,pGraph)pGraph-QueryInterface(,pMediaContro
38、l)pGraph-QueryInterface(,pMediaEvent)pGraph-RenderFile(xxx.mkv)pMediaControl-Run()pMediaEvent-WaitForCompletion()CoUninitialize()CoInitialize()图3.3 播放视频文件的流程 流程图中关键函数的作用如下所示。CoInitialize():初始化COM运行环境;CoCreateInstance(,pGraph):用指定的类标识符创建一个Com对象。在该播放器中类标识符为“CLSID_FilterGraph”,用于创建IGraphBuilder。pGraph-
39、QueryInterface(,pMediaControl):通过QueryInterface()查询某个组件是否支持某个特定的接口。在这里查询IMediaControl接口。pGraph-QueryInterface(,pMediaEvent):同上。在这里查询IMediaEvent接口。pGraph-RenderFile(xxx.mkv):为指定的文件智能的构建一个Filter Graph。pMediaControl-Run():开始运行Filter Graph中所有的Filter。pMediaEvent-WaitForCompletion():等待Filter Graph处理完所有数据。
40、CoUninitialize():释放CoInitialize()初始化的COM运行环境7。3.5 Directshow智能连接3.5.1智能连接概述智能连接是滤波器链表管理器用以构建滤波器链表的机制,它包含了一系列选择滤波器和将其添加到链表中去的算法。本软件即采用此方法构建供数据流传输的滤波器链表。3.5.2智能连接的实现智能连接的基本方法为试连接,它首先用内存中的Filter试连接,若不成功,则对当前的Filter Graph中还没有完全连接的Filter进行试连接。如果不行,再从系统Filter里选取匹配的、最合适的Filter进行试连,直到连接成功。若找不到合适的Filter,则失败返
41、回。所以只要Filter Graph中有不同类型的、可接受同一媒体类型的Filter,则采用智能连接,每个Filter都可连在正确的位置。为什么在智能连接中不同类型的Filter会连在各自的位置上呢?因为这些Filter能接受的媒体类型不同。从源Filter出来的数据流只带有编码格式信息,其他信息都是未知的,所以音视频解码Filter和处理Filter都不能用,只能使用分离Filter匹配这种媒体类型,所以只会试连接分离Filter。而从分离Filter出来的数据分为音、视频两路,每路的数据流都加上了音频或者视频的信息,但没有标明这是何种音频或视频的信息,所以可以被音视频解码器Filter接受,但不能被音视频处理Filter接受。而从音视频解码Filter出来的数据流带上了具体格式的音视频媒体类型的信息,所以能被音视频处理Filter接受,最后发送到提交过滤器8。4.视频播放器的开发4.1开发环境的配置选择Microsoft Direct