论文部分内容阅读
摘 要:MPEG-2是目前应用最为广泛的数字音视频编码国际标准,大部分数字音视频节目是以MPEG-2的形式存在。DirectShow是目前windows操作系统上的优秀的多媒体开发编程接口。提出一个MPEG-2视频解码器在DirectShow中的实现方案。这一实现在多媒体应用中具有广泛的参考价值。
关键词:DirectShow;filter;MPEG-2;解码器
中图分类号:TP316.5 文献标识码:A
1 引言
微软公司提供的DirectX是用于创建PC游戏和多媒体应用程序的优秀工具。DirectX是一个用于开发游戏以及其它各类多媒体应用程序的底层API函数集,可以用来在windows操作平台上开发高性能图形、声音、输入、输出和网络游戏;它是一种基于COM的系统,既不属于驱动程序层,也不属于应用程序层。DirectX的主要设计目标是在提供某种设备独立性的同时获取高速度。作为Di-rectX的一个COM组成元素,DirectShow应用程序编程接口是一个windows平台上的流媒体架构,提供各种格式的高品质多媒体流的捕获、处理、传送和回放,如AVI,ASF,MPEG,MP3,MOV等。DirectShow集成了DirectX其他组件中的先进技术,能做到自动检测、使用视频和音频硬件加速设备;它不仅支持基于WDM驱动程序的硬件设备,也向上兼容Video for WindOWS(VFW)驱动程序的硬件设备。
为了实现MPEG-2视频解码器,可设计一个名为MPEG2 Decoder的Transform Filter,包含一个输入pin、一个输出pin,用于接收MPEG-2的视频流输入,解码后输出YUY2格式的图像帧序列。在微软提供的Filter测试工具GraphEdit中使用MPEG-2视频解码器构建的Filter Graph如图2所示:
图中xyys.vob文件为一个MPEG-2压缩的文件,其输出的数据流被MPEG-2 Splitter接收,并实现音视频分离;视频流由MPEG2 Decoder实现MPEG-2的视频解码,并送显示,音频流由ffdshow audio Decoder实现解码并送播放。
4 MPEG一2视频解码器的实现
4.1 filter的设计
设计一个MPEG-2视频解码器实际上就是在DirectShow中设计出一个能实现MPEG-2视频解码功能的filter,即图2中的MPEG2 Decoderfilter。
从Filter Graph的设计和功能定义上分析,MPEG2 Decoder filter是一个Transform filter。有一个输入pin(input)和一个输出pin(output)。由于Transform Filter是DirectShow中的一个应用框架,实现“输入->内部处理->输出”的功能;其中应用逻辑,即MPEG-2的视频解码部分可以与应用框架分离,以设计一个结构清晰、扩展性良好的Filter项目。
Filter框架是完成Filter功能的一个操作函数集,以完成输入和输出pin上的媒体类型检查,决定Sample内存大小的相关功能。数据的输入和处理完成后的输出由Filter框架实现,而实现MPEG一2的解压缩由应用逻辑实现。
4.2 filter的编码实现
4.2.1 Filter框架的实现
从DirectShow的基类CSource类继承得到filter,以实现一个独立的线程专门用于MPEG2的解码输出。同时可设计输入pin类(CMpeg2InputPin)和输出pin类(CMpeg20utPin)。在输入pin上需要实现媒体类型检查(CheekMediaType)、媒体数据的接收(Re-ceive)等相关功能。以媒体类型的检查为例:
4.2.2 MPEG-2解码的实现
MPEG-2源代码可以从开源网站下载(如:MPEG的官方网站,www.mpeg.org),下载后得到的MPEG2解码内核是C代码,而Filter的开发采用C ,为了高效实现C与C 的混合编程,可设计一个C 风格的应用程序控制类CM-pegDecode,将解码内核上可能被调用的C函数在这个类中封装。Filter框架就只需调用这个控制类,从而保持较为清晰的结构。
5 结论
MPEG压缩一直是多媒体应用领域中的热点研究问题,微软公司推出的DirectShow应用程序编程接口是一个基于windows平台的优秀流媒体架构。本文设计了一个实现MPEG-2解压缩的Transform filter,并在GraphEdit中得到了实现。同理还可以在DirectShow中实现其它解码器。这一实现在多媒体应用中具有广泛的参考价值。
关键词:DirectShow;filter;MPEG-2;解码器
中图分类号:TP316.5 文献标识码:A
1 引言
微软公司提供的DirectX是用于创建PC游戏和多媒体应用程序的优秀工具。DirectX是一个用于开发游戏以及其它各类多媒体应用程序的底层API函数集,可以用来在windows操作平台上开发高性能图形、声音、输入、输出和网络游戏;它是一种基于COM的系统,既不属于驱动程序层,也不属于应用程序层。DirectX的主要设计目标是在提供某种设备独立性的同时获取高速度。作为Di-rectX的一个COM组成元素,DirectShow应用程序编程接口是一个windows平台上的流媒体架构,提供各种格式的高品质多媒体流的捕获、处理、传送和回放,如AVI,ASF,MPEG,MP3,MOV等。DirectShow集成了DirectX其他组件中的先进技术,能做到自动检测、使用视频和音频硬件加速设备;它不仅支持基于WDM驱动程序的硬件设备,也向上兼容Video for WindOWS(VFW)驱动程序的硬件设备。
![](/img/pic.php?url=http://img1.qikan.com/qkimages/jszd/jszd200704/jszd20070423-2-l.jpg)
为了实现MPEG-2视频解码器,可设计一个名为MPEG2 Decoder的Transform Filter,包含一个输入pin、一个输出pin,用于接收MPEG-2的视频流输入,解码后输出YUY2格式的图像帧序列。在微软提供的Filter测试工具GraphEdit中使用MPEG-2视频解码器构建的Filter Graph如图2所示:
图中xyys.vob文件为一个MPEG-2压缩的文件,其输出的数据流被MPEG-2 Splitter接收,并实现音视频分离;视频流由MPEG2 Decoder实现MPEG-2的视频解码,并送显示,音频流由ffdshow audio Decoder实现解码并送播放。
4 MPEG一2视频解码器的实现
4.1 filter的设计
设计一个MPEG-2视频解码器实际上就是在DirectShow中设计出一个能实现MPEG-2视频解码功能的filter,即图2中的MPEG2 Decoderfilter。
从Filter Graph的设计和功能定义上分析,MPEG2 Decoder filter是一个Transform filter。有一个输入pin(input)和一个输出pin(output)。由于Transform Filter是DirectShow中的一个应用框架,实现“输入->内部处理->输出”的功能;其中应用逻辑,即MPEG-2的视频解码部分可以与应用框架分离,以设计一个结构清晰、扩展性良好的Filter项目。
Filter框架是完成Filter功能的一个操作函数集,以完成输入和输出pin上的媒体类型检查,决定Sample内存大小的相关功能。数据的输入和处理完成后的输出由Filter框架实现,而实现MPEG一2的解压缩由应用逻辑实现。
4.2 filter的编码实现
4.2.1 Filter框架的实现
从DirectShow的基类CSource类继承得到filter,以实现一个独立的线程专门用于MPEG2的解码输出。同时可设计输入pin类(CMpeg2InputPin)和输出pin类(CMpeg20utPin)。在输入pin上需要实现媒体类型检查(CheekMediaType)、媒体数据的接收(Re-ceive)等相关功能。以媒体类型的检查为例:
![](/img/pic.php?url=http://img1.qikan.com/qkimages/jszd/jszd200704/jszd20070423-4-l.jpg)
4.2.2 MPEG-2解码的实现
MPEG-2源代码可以从开源网站下载(如:MPEG的官方网站,www.mpeg.org),下载后得到的MPEG2解码内核是C代码,而Filter的开发采用C ,为了高效实现C与C 的混合编程,可设计一个C 风格的应用程序控制类CM-pegDecode,将解码内核上可能被调用的C函数在这个类中封装。Filter框架就只需调用这个控制类,从而保持较为清晰的结构。
5 结论
MPEG压缩一直是多媒体应用领域中的热点研究问题,微软公司推出的DirectShow应用程序编程接口是一个基于windows平台的优秀流媒体架构。本文设计了一个实现MPEG-2解压缩的Transform filter,并在GraphEdit中得到了实现。同理还可以在DirectShow中实现其它解码器。这一实现在多媒体应用中具有广泛的参考价值。