《最新多媒体处理技术相关知识教学课件.ppt》由会员分享,可在线阅读,更多相关《最新多媒体处理技术相关知识教学课件.ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、多媒体处理技术相关知识多媒体处理技术相关知识多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院主要内容主要内容 数字图像的原始文件格式数字图像的原始文件格式 图像浏览工具图像浏览工具YUVView 文件读取文件读取 视频解码流程视频解码流程 基于基于DirectShow的多媒体编程的多媒体编程多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学
2、与工程学院多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学
3、院信息科学与工程学院 yuv文件读取文件读取fileId = fopen(fileName, r);subSampleMat = 1, 1; 1, 1;% read Y componentbuf = fread(fileId, width * height, uchar);imgYuv(:, :, 1) = reshape(buf, width, height).; % reshape% read U componentbuf = fread(fileId, width / 2 * height / 2, uchar);imgYuv(:, :, 2) = kron(reshape(buf, w
4、idth / 2, height / 2)., subSampleMat); % read V componentbuf = fread(fileId, width / 2 * height / 2, uchar);imgYuv(:, :, 3) = kron(reshape(buf, width / 2, height / 2)., subSampleMat); % reshape and upsample% convert YUV to RGBimgRgb = reshape(convertYuvToRgb(reshape(imgYuv, height * width, 3), heigh
5、t, width, 3);fclose(fileId);imshow(imgRgb);多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院dmdmdmdmNM位移矢量位移矢量前一帧中的前一帧中的最佳匹配子块最佳匹配子块前一帧中的前一帧中的搜索区域搜索区域当前帧中当前帧中的子块的子块运动估计中的块匹配方法运动估计中的块匹配方法搜索范围搜索范围SR:SR=(M+2dm)(N+2dm)两个重要问题:两个重要问题:1. 匹配准则匹配准则2. 搜索方法搜索方法多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技
6、术相关知识信息科学与工程学院信息科学与工程学院块匹配准则块匹配准则(1)归一化相关函数)归一化相关函数NCCF (Normalized Cross-Correction Function) (1)(2)平均均方误差函数)平均均方误差函数MSD (Mean Square Difference) (2)(3)平均绝对差函数)平均绝对差函数MAD (Mean Absolute Difference) (3)通常使用求和绝对差通常使用求和绝对差SAD(Sum of Absolut Difference)代替代替MAD,即,即( , )( , )SAD i jMNMAD i j1100111111222
7、20000(, )(,)( , )(, ) (,)MNkksmnMNMNkkNsmnmnfm n fNmi njNCCF i jfm nfk mi nj 112001( ,)(, )(,)MNkksmnMSD i ffm nfNmi njMN 11001( ,)( , )(,)MNkksmnMAD i ffm nfNmi njMN 多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院搜索方法:搜索方法:1. 全搜索全搜索2. 二维对数法二维对数法3. 三步法三步法4. 共轭方向法共轭方向法5. 正交搜索法正交搜索法多媒体通信
8、技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院i-6 i-5 i-4 i-3 i-2 i-1 i i+1 i+2 i+3 i+4 i+5 i+6j+6j+5 j+4 j+3j+2 j+1 jj-1j-2 j-3j-4j-5 j-6 三步法(三步法(TSS)多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院dmdmdmdmNM当前帧中当前帧中的子块的子块位移矢量位移矢量前一帧中的前一帧中的搜索区域搜索区域(i,j)前一帧中的最前一帧中的最佳匹配子块佳匹配子块多
9、媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院视频解码流程视频解码流程视频文件视频文件(mpg/mov)相应解码器相应解码器YUV-RGB电视编码电视编码显显示示器器电电视视机机多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院 DirectShow是微软公司提供的一套在是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,平台上进行流媒体处理的开发包,与与DirectX开发包一起发布。为多媒体流的开发包一起发布。为多媒体流的捕捉和回放提
10、供了强有力的支持。捕捉和回放提供了强有力的支持。DirectShow的设计初衷就是尽量让多媒体的设计初衷就是尽量让多媒体的应用开发得到简化,使程序员从复杂的数的应用开发得到简化,使程序员从复杂的数据传输、硬件差异、流同步等工作中解放出据传输、硬件差异、流同步等工作中解放出来。来。基于基于DirectShow的多媒体编程的多媒体编程多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院DirectShow系统框图系统框图多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科
11、学与工程学院DirectShow原理原理 Filter概述概述 Filter Graph 媒体类型媒体类型 数据传送数据传送 状态转换状态转换 速率调整速率调整 事件通知事件通知 音视频同步音视频同步 对硬件的支持对硬件的支持多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院Filter概述概述Directshow是基于模块化的,每个功能是基于模块化的,每个功能模块都采取模块都采取COM组件方式,称为组件方式,称为Filter。Directshow提供了一系列的标准的模块可提供了一系列的标准的模块可用于应用开发,开发者也可
12、以开发自己的用于应用开发,开发者也可以开发自己的功能功能Filter来扩展来扩展Directshow的应用。的应用。Filter一般是有一个或多个一般是有一个或多个Pin组成,组成,Filter之间通过之间通过Pin相互连接。相互连接。DirectShow使用使用Filter Grpah来管理来管理Filter。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院Filter的类型的类型源过滤器(源过滤器(Source Filter)分割过滤器(分割过滤器(Splitter Filter)解码过滤器(解码过滤器(Decode
13、r Filter)渲染过滤器(渲染过滤器(Renderer Filter)过滤器的这些分类并不是绝对的,例如过滤器的这些分类并不是绝对的,例如一个一个ASF读过滤器(读过滤器(ASF Reader Filter)既)既是一个源过滤器又是一个分割过滤器。是一个源过滤器又是一个分割过滤器。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院下面我们用一个例子来说明如何采取下面我们用一个例子来说明如何采取Filter来播放一个来播放一个AVI的视频文件。的视频文件。1) 首先从一个文件中读取首先从一个文件中读取AVI数据,形成字节
14、流。数据,形成字节流。(这个工作由源(这个工作由源Filter完成)完成)2) 检查检查AVI数据流的头格式,然后通过数据流的头格式,然后通过AVI分割分割Filter将视频流和音频流分开。将视频流和音频流分开。3) 解码视频流,根据压缩格式的不同,选取不同的解码视频流,根据压缩格式的不同,选取不同的decoder filters 。4) 通过通过Renderer Filter重画视频图像。重画视频图像。5) 音频流送到声卡进行播放,一般采用缺省的音频流送到声卡进行播放,一般采用缺省的 DirectSound DeviceFilter。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相
15、关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院Filter GraphAVI格式媒体的格式媒体的Filter Graph多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院Filter Graph建立建立在在DirectShow中,中,Filter Graph是由是由接口对象接口对象IGraphBuilder实现的,可以调实现的,可以调用用Win32 API函数函数CoCreateInstance()建立一个实体。建立一个实体。Filter Graph实体建立之实体建立之后不包含任何的后不包含任何的Filt
16、er,因此不具有任何,因此不具有任何实际用途。需要连接合适的实际用途。需要连接合适的Filter来完成来完成FilterGraph的构建。的构建。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院1)RenderFileIGraphBuilder提供了多种智能完成提供了多种智能完成FilterGraph构建的方法。构建的方法。最简单的是使用接口方法最简单的是使用接口方法IGraphBuilder:RenderFile。HRESULT RenderFile(LPCWSTR lpwstrFile, LPCWSTR lpwstr
17、PlayList);2)Render这个接口方法从一个输出这个接口方法从一个输出Pin开始,自动构建剩余的开始,自动构建剩余的FilterGraph。这个方法自动添加必要的。这个方法自动添加必要的Filter,直到添加到一,直到添加到一个个Render Filter为止。为止。3)ConnectDriect这个方法尝试将两个这个方法尝试将两个Filter直接相连,如果不成功,直接返回。直接相连,如果不成功,直接返回。不作其他处理。这个接口方法一般用作两个不作其他处理。这个接口方法一般用作两个Pin之间的协商检查,之间的协商检查,而不直接用于两个而不直接用于两个Filter的连接。的连接。多媒体
18、通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院4)Connect这个接口方法是这个接口方法是ConnectDirect接口方法的延伸和扩展。同接口方法的延伸和扩展。同样是连接两个样是连接两个Filter,但是与,但是与ConnectDirect方法不同的是,方法不同的是,这个接口方法首先尝试这个接口方法首先尝试ConnectDirect方法连接两个方法连接两个Filter,如果不能直接连接,则尝试使用中间如果不能直接连接,则尝试使用中间Filter连接。连接。5)AddFilter这个接口方法将指定的这个接口方法将指定的Fi
19、lter加入到加入到Filter Graph中,但这中,但这个新加入的个新加入的Filter并不会和并不会和Filter Graph中的其他中的其他Filter形成连形成连接。接。6) 手动构建手动构建Filter Graph手工构建手工构建Filter Graph的基础在于对于媒体文件所需要的的基础在于对于媒体文件所需要的Filter有着相当深入清晰地了解的基础上。否则,手工构架的有着相当深入清晰地了解的基础上。否则,手工构架的FilterGraph将存在可靠性、健壮性等问题。将存在可靠性、健壮性等问题。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信
20、息科学与工程学院信息科学与工程学院智能连接智能连接RenderFile、Render与与Connect这三种方法这三种方法都有自动的功能。在都有自动的功能。在DirectShow中,这种自动中,这种自动机制称为智能连接。机制称为智能连接。为什么在智能连接中不同类型的为什么在智能连接中不同类型的Filter会连在各自的位置上呢?会连在各自的位置上呢?这是因为这些这是因为这些Filter能接受的媒体类型不同。一般来讲,从源能接受的媒体类型不同。一般来讲,从源Filter出来的数据流,只简单的带有属于哪种编码格式信息,其它信息都出来的数据流,只简单的带有属于哪种编码格式信息,其它信息都是未知的,所以
21、音是未知的,所以音/视频解码视频解码Filter不能用,音不能用,音/视频渲染视频渲染Filter也不能也不能用,只有分离用,只有分离Filter可能匹配这种媒体类型,所以只会试连分离可能匹配这种媒体类型,所以只会试连分离Filter。而从分离。而从分离Filter出来的数据分为音、视频两路,每路的数据出来的数据分为音、视频两路,每路的数据流都加上了是音频还是视频的信息,但没有标明这是何种音频或何流都加上了是音频还是视频的信息,但没有标明这是何种音频或何种视频的信息,所以可以被音种视频的信息,所以可以被音/视频解码器视频解码器Filter接受,但不会被音接受,但不会被音/视频渲染视频渲染Fil
22、ter接受。而从解码接受。而从解码Filter出来的数据流带上了是何种格出来的数据流带上了是何种格式的音式的音/视频媒体类型的信息,所以能被音视频媒体类型的信息,所以能被音/视频渲染视频渲染Filter接受。接受。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院媒体类型媒体类型Filter总是要处理一定格式的数据流。总是要处理一定格式的数据流。DirectShow便是用媒体类型来描述特定便是用媒体类型来描述特定的数据流。媒体类型实际上是的数据流。媒体类型实际上是DirectShow定义的一个数据结构。当两定义的一个数据结
23、构。当两个个Filter连接的时候,他们会就采用哪一连接的时候,他们会就采用哪一种媒体类型达成一致的协议。媒体类型主种媒体类型达成一致的协议。媒体类型主要用三部分来描述:要用三部分来描述:majortype、subtype和和formattype。这三部分各自用。这三部分各自用一个一个GUID来标示。来标示。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院majortype:定性地描述媒体类型,如指定这是一个视频:定性地描述媒体类型,如指定这是一个视频(MEDIATYPE_Video)、音频、音频(MEDIATYPE_A
24、udio)或者字或者字节流节流(MEDIATYPE_Stream)等。等。subtype:辅助说明:辅助说明majortype,指明具体是哪种格式,指明具体是哪种格式,例如例如majortype是视频,是视频,subtype可以进一步指明是可以进一步指明是UYVY、YUY2、RGB24或或RGB32等;若等;若majortype是音频,是音频,subtype可以进一步指明是可以进一步指明是PCM格式还是格式还是AC3格式等。格式等。formattype:指定了一种进一步描述格式细节的数据结构:指定了一种进一步描述格式细节的数据结构类型,格式细节描述的内容主要包括视频图像的大小、帧率,类型,格式
25、细节描述的内容主要包括视频图像的大小、帧率,或音频的采样频率、量化精度等参数。或音频的采样频率、量化精度等参数。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院数据传送数据传送多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院 Filter通过通过pin的连接来传递数据,数据流是从一个的连接来传递数据,数据流是从一个Filter的输出的输出pin流向相连的流向相连的Filter的输入的输入pin。输出。输出pin常用的传递数据的方式是调用常用的传递数
26、据的方式是调用输入输入pin上的上的IMemInputPin:Receive方法。方法。 在在Directshow中用来进行内存分配任务的是内存分配器中用来进行内存分配任务的是内存分配器(allocator),这是一个,这是一个COM对象。当两个对象。当两个pin连接的时候,必须有一个连接的时候,必须有一个pin提供一个提供一个allocator。Directshow定义了一系列函数来确定由哪个定义了一系列函数来确定由哪个pin提供提供allocator,以及,以及buffer的数量和大小。的数量和大小。 在数据流开始之前,在数据流开始之前,allocator会创建一个内存池,在开始发送数会创
27、建一个内存池,在开始发送数据流以后,源据流以后,源Filter就会将数据填充到内存池中一个空闲的就会将数据填充到内存池中一个空闲的buffer中,然中,然后传递给下面的后传递给下面的Filter。但是,源。但是,源Filter并不是直接将内存并不是直接将内存buffer的指针直的指针直接传递给下游的接传递给下游的Filter,而是通过一个,而是通过一个media samples的的COM对象,这对象,这个个sample是是allocator创建的用来管理内存创建的用来管理内存buffer。 当一个当一个Filter正在使用正在使用buffer,它就会保持一个,它就会保持一个sample的引用计
28、的引用计数,数,allocator通过通过sample的引用计数用来确定是否可以重新使用一个的引用计数用来确定是否可以重新使用一个buffer。这样就防止了。这样就防止了buffer的使用冲突,当所有的的使用冲突,当所有的Filter都释放了对都释放了对sample的引用,的引用,sample才返回到才返回到allocator的内存池,供重新使用。的内存池,供重新使用。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院状态转换状态转换 Filter Graph在任何时候只有三种状态:运行、暂停、在任何时候只有三种状态:运行
29、、暂停、停止。其中暂停可以理解为数据就绪状态,是为了快速切换停止。其中暂停可以理解为数据就绪状态,是为了快速切换到运行状态而设计的。作为一种中间状态,暂停也是停止与到运行状态而设计的。作为一种中间状态,暂停也是停止与运行之间切换所必经的一种状态。运行之间切换所必经的一种状态。 对对Filter Graph状态的控制也就集中在三种状态之间状态的控制也就集中在三种状态之间的切换。在的切换。在IGraphBuilder上申请上申请IMediaControl接口。获接口。获得这个接口后,就可以使用其接口方法:得这个接口后,就可以使用其接口方法:IMediaControl:Run();IMediaCon
30、trol:Pause();IMediaControl:Stop();IMediaControl: GetState( LONG msTimeout, OAFilterState *pfs);多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院速率调整速率调整 媒体文件播放时的当前位置和停止位置相对于开始位置媒体文件播放时的当前位置和停止位置相对于开始位置都是不变的。调用都是不变的。调用IMediaSeeking接口的接口的SetRate方法可以改变方法可以改变播放的速率。当应用程序执行了播放的速率。当应用程序执行了IMedi
31、aSeeking:SetRate后,后,Filter Graph Manager的内部响应如下:的内部响应如下:1)调用)调用IMediaSeeking:GetCurrentPosition得到当前播放得到当前播放位置位置2)如果当前)如果当前Filter Graph处于暂停或运行状态,则调用处于暂停或运行状态,则调用Stop3)调用)调用IMediaSeeking:SetPosition将步骤将步骤(1)中取得的当中取得的当前位置重新设置一下前位置重新设置一下4)调用)调用IMediaSeeking:SetRate设置新的播放速率设置新的播放速率5)如果先前)如果先前Filter Graph
32、的状态为暂停或运行,则恢复这个的状态为暂停或运行,则恢复这个暂停暂停 利用利用IMediaSeeking接口的接口的GetCurrentPosition和和SetPosition可以实现媒体的随机定位。可以实现媒体的随机定位。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院事件通知事件通知 DirectShow有一种机制,能够让应用程序与有一种机制,能够让应用程序与Filter Graph Manager之间实现交互控制。这个机制就是事件之间实现交互控制。这个机制就是事件通知通知(Event Notification),
33、即当,即当Filter状态转换、运行时状态转换、运行时遇到错误或要求重绘视频窗口时,都会发出一个特定的事遇到错误或要求重绘视频窗口时,都会发出一个特定的事件,由件,由Filter Graph Manager处理或者转发给应用程序,处理或者转发给应用程序,应用程序可以接受事件,并根据事件类型作出相应的处理。应用程序可以接受事件,并根据事件类型作出相应的处理。 应用程序调用应用程序调用IMediaEvent:GetEvent方法来接收方法来接收数据。这个方法会被阻断直到从一个队列中得到一个事件数据。这个方法会被阻断直到从一个队列中得到一个事件或者超过时限。因为事件通知和消息循环都是异步的,所或者超
34、过时限。因为事件通知和消息循环都是异步的,所以在应用程序对消息作出响应时,队列中有可能包含多个以在应用程序对消息作出响应时,队列中有可能包含多个事件消息。因此,在事件处理代码中,应不停地的调用事件消息。因此,在事件处理代码中,应不停地的调用GetEvent方法,直至返回失败码,即消息队列已为空。方法,直至返回失败码,即消息队列已为空。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院音视频同步音视频同步 DirectShow的解决方案就是为的解决方案就是为Filter Graph选择一个公共的参考时钟,并且要求传送到选择一
35、个公共的参考时钟,并且要求传送到Render Filter的每个的每个Sample打上时间戳;打上时间戳;Video Render和和Audio Render根据根据Sample的时间戳以的时间戳以及参考时钟当前的参考时间,来正确安排及参考时钟当前的参考时间,来正确安排Sample的播放时机。如果的播放时机。如果Sample到底的时间晚了,则马到底的时间晚了,则马上播放这个上播放这个Sample或丢弃该或丢弃该Sample,然后发生,然后发生消息要求加快消息要求加快Sample的传送;如果的传送;如果Sample到达到达的时间早了,则的时间早了,则Render Filter等待,直到等待,直到
36、Sample时间戳的开始时间再开始播放,并发生消息要求减时间戳的开始时间再开始播放,并发生消息要求减慢慢Sample的发送。的发送。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院硬件支持硬件支持 为了提高系统的稳定性,为了提高系统的稳定性,Windows操作系统对硬件操作系统对硬件操作进行了隔离;应用程序一般不能直接访问硬件。操作进行了隔离;应用程序一般不能直接访问硬件。DirectShow?Filter工作在用户模式(工作在用户模式(User mode,操作,操作系统特权级别为系统特权级别为Ring 3),而硬件工作
37、在内核模式),而硬件工作在内核模式(Kernel mode,操作系统特权级别为,操作系统特权级别为Ring 0),那么它),那么它们之间怎么协同工作呢?们之间怎么协同工作呢? DirectShow解决的方法是,为这些硬件设计包装解决的方法是,为这些硬件设计包装Filter。这种。这种Filter能够工作在用户模式下,外观、控制方能够工作在用户模式下,外观、控制方法跟普通法跟普通Filter一样,而包装一样,而包装Filter内部完成与硬件驱动程内部完成与硬件驱动程序的交互。这样的设计,使得编写序的交互。这样的设计,使得编写DirectShow应用程序应用程序的开发人员,从为支持硬件而需做出的特
38、殊处理中解脱出的开发人员,从为支持硬件而需做出的特殊处理中解脱出来。来。多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院 硬件的包装硬件的包装Filter多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院#include #include #pragma comment(lib, strmbasd.lib)/ 包含库文件和头文件包含库文件和头文件.IGraphBuilder *pGraph = NULL;IMediaControl *pControl
39、 = NULL;IMediaEvent *pEvent = NULL;/ 接口变量初始化接口变量初始化HRESULT hr = CoInitialize(NULL); / 初始化初始化COM库库.hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void*)&pGraph); / 创建创建Filter Graph Manage实例实例.hr = pGraph-QueryInterface(IID_IMediaControl, (void*)&pControl);hr
40、= pGraph-QueryInterface(IID_IMediaEvent, (void*)&pEvent);hr = pGraph-RenderFile(L“xxxxxxxx.avi, NULL); / 构建构建Filter Graph.hr = pControl-Run(); / 播放媒体文件播放媒体文件.long evCode;pEvent-WaitForCompletion(INFINITE, &evCode);/ 等待播放结束等待播放结束pControl-Release();pEvent-Release();pControl-Release();CoUninitialize();
41、 / 释放接口指针并关闭释放接口指针并关闭COM库库多媒体通信技术:附录多媒体通信技术:附录-多媒体处理技术相关知识多媒体处理技术相关知识信息科学与工程学院信息科学与工程学院DirectShow提供高质量的多媒体数据提供高质量的多媒体数据流的捕获和回放功能,广泛支持多种媒体格流的捕获和回放功能,广泛支持多种媒体格式,同时式,同时DirectShow对对VFW 具有良好的兼具有良好的兼容性,并具有其无法比拟的优势,支持视频容性,并具有其无法比拟的优势,支持视频与音频在捕获和播放中的完全同步。与音频在捕获和播放中的完全同步。DirectShow的设计初衷就是尽量让多媒体的设计初衷就是尽量让多媒体的应用开发得到简化,使程序员从复杂的数的应用开发得到简化,使程序员从复杂的数据传输、硬件差异、流同步等工作中解放出据传输、硬件差异、流同步等工作中解放出来。来。