论文部分内容阅读
摘要:在IP网络基础之上,应用DirecShow这种流媒体处理开发包搭建框架,进行音/视频相关数据的回放、解码、网络传输、编码、采集的处理方案设计,最后实现时采用VC++编程软件进行操作。基于DirecShow的音/视频传输系统为远距离视频监控、诊断故障、技术支援等计算机系统,给予利用音/视频开展实时沟通、交流的可能。
关键词:DirecShow;音/视频传输系统;设计;实现
在远距离视频监控、诊断故障、技术支援等计算机系统之中,利用音/视频传输系统开展实时沟通、交流是其中较为关键的功能。音/视频传输系统为关键设备或系统的维护修理、诊断故障给予远距离技术保障,同时为获得“实时”帮助的效果提供了较为关键的策略。为实现现场、实时音/视频沟通、交流的功能,需要先保证音/视频相关数据得以有效的远距离传输,因为基于DirecShow的音/视频传输系统的基础在于IP网络,所以音/视频相关数据的传输也是利用卫星通信的TP网络,且在Windows这个平台之上得以实现。
一、基于DirecShow的音/视频传输系统方案设计
1.选择DirecShow架构
我们从程序开发应用的视角来说,利用卫星通信的TP网络,达到音/视频相关数据远距离传输必须从总体上考量数据的网络接收、数据采集、数据编/解码、数据回放与传输的方案,进而将数据传输的效率与质量有效提升,与此同时还应当尽量降低系统开发投入的成本与难度。所以第一件要做的就是选择一个适宜的开发平台。一般来说有以下三种开发平台可以选择:
①直接利用Windows中API函数,这种平台虽然有着较大的灵活性,然而却具有开发难度高,需要较长开发时间的缺点。
②直接应用成熟的如NetMeeting等满足本系统需求的组件。这种开发平台虽然没有多大的灵活性,却具有开发难度低,不需要过多的开发时间的优势。
③选择介于第一种与第二种开发平台之间的开发方式,结合拟开发的音/视频传输系统特点进行二次开发,这种开发平台难度与第一种开发方式相比较有很大程度的降低,却有着比第二种开发方式更大的灵活性。权衡比较之后,最终选择在DirecShow框架体系之上进行音/视频传输系统的设计开发。
DirecShow的构成由一组ComponentobjectModel(简称COM)对象组成的。它是DirectX中较为关键的构成部分,是Microsoft在VideoforWindows与ActiveMovie的基础上,为简化在Windows平台上进行流媒体系统的开发而提供的一个体系构架。总的来说,DirecShow有下面几个方面的特点:第一,可以对音/视频数据流进行快速处理;第二,可以实现音/视频的同步播放;第三,具有开放性及模块快的体系结构。
2.采集和播放音频与视频相关数据
确定好开发平台之后,就可以大幅度降低实现音/视频相关数据采集、音/视频相关数据播放功能的难度。DirecShow中的Filter可以对早期VideoforWindows视频采集卡与WindowsDriverModel驱动模型都给予技术支持。现今WindowsDriverModel是最常用于视频数据采集的驱动模型,在DirecShow体系架构中SourceFilter是采集设备的集中表现,系统设计开发人员仅需要通过DirecShow所提供的接口函数找到系统中已经安装的且适合需要的SourceFilter,之后利用SourceFilter上面的Pin来连接就能构成FilterGraph,系统研发工作者无须担心音频采集设备或终端用户设备上安装的是何种类型的采集设备,数据的采集均可以应用此法。
播放音/视频频通过Windows操作系统又或者是DirecShow中已有的RenderingFilter,音频利用DirecSounddevice进行播放,VideoMixingRenderer9则用于视频的播放,利用VideoMixingRenderer9进行视频的播放不但可以获得更多有用的功能,并且还可以确保视频播放时更可靠、稳定。
3.编码器与解码器的确定
因为在流量方面,无论是音频还是视频都比较大。为了确保音/视频传输的效率,在进行网络传输之前往往需要将所采集到的数据进行压缩,而网络终端为可以顺利播放接收到的数据还需要先进行解压缩。通过比较编码率、解码率、编码速度、解码速度、数据编/解码质量损失等方面,我们最终选择了XvidEncoder作为视频的编码器,解码器则选择了XvidDecoder。本系统中音频与视频数据分别单独传输。
4.网络发送器与网络接收器的设计
网络发送器与网络接收器为自行组织开发。DirectShow提供了功能各异的众多基类,开发者只需选择合适的基类进行派生,重载相应的虚函数,将网络传输功能封装到派生类中即可。为减少网络传输的时间延迟,采用UDP协议进行传输。
5.FilterGraphManager管理类的设计
下图现本系统主要类之间关系的UML模型图。
二、编程实现
根据上面的分析与设计,编程工作主要集中在网络发送Filter类、网络接收Filter类和FilterGraph管理类的实现上。采用VC++6.0作为开发工具,首先安装DirectX9.0SDK,然后启动VC++6.0,进行开发环境的配置,打开DirectX9.0SDK安装目录中DirectShow部分的baseclasses项目,编译后会生成Strmbasd.lib(debug版本,如果是Retail版本生成的是Strmbase.lib)库文件,当开发Filter类时,会使用这个库文件。关闭这个工程,新建一个MFC项目,进一步开发,相关源代码略。
三、结束语
实时音频与视频传输子系统用途广泛,可以作为装备远程故障诊断、远程技术支援等系统的一个组成部分,尤其适合对野外执行任务的机器设备的故障诊断与修理等提供远程技术支持,我们可以进一步研究,开发出更有效、优质的系统。
参考文献
[1]侯俊杰.深入浅出MFC[M].武汉:华中科技大学出版社,2001.
[2]AnthonyJones.Windows网络编程技术[M].北京:机械工业出版社,2003.
关键词:DirecShow;音/视频传输系统;设计;实现
在远距离视频监控、诊断故障、技术支援等计算机系统之中,利用音/视频传输系统开展实时沟通、交流是其中较为关键的功能。音/视频传输系统为关键设备或系统的维护修理、诊断故障给予远距离技术保障,同时为获得“实时”帮助的效果提供了较为关键的策略。为实现现场、实时音/视频沟通、交流的功能,需要先保证音/视频相关数据得以有效的远距离传输,因为基于DirecShow的音/视频传输系统的基础在于IP网络,所以音/视频相关数据的传输也是利用卫星通信的TP网络,且在Windows这个平台之上得以实现。
一、基于DirecShow的音/视频传输系统方案设计
1.选择DirecShow架构
我们从程序开发应用的视角来说,利用卫星通信的TP网络,达到音/视频相关数据远距离传输必须从总体上考量数据的网络接收、数据采集、数据编/解码、数据回放与传输的方案,进而将数据传输的效率与质量有效提升,与此同时还应当尽量降低系统开发投入的成本与难度。所以第一件要做的就是选择一个适宜的开发平台。一般来说有以下三种开发平台可以选择:
①直接利用Windows中API函数,这种平台虽然有着较大的灵活性,然而却具有开发难度高,需要较长开发时间的缺点。
②直接应用成熟的如NetMeeting等满足本系统需求的组件。这种开发平台虽然没有多大的灵活性,却具有开发难度低,不需要过多的开发时间的优势。
③选择介于第一种与第二种开发平台之间的开发方式,结合拟开发的音/视频传输系统特点进行二次开发,这种开发平台难度与第一种开发方式相比较有很大程度的降低,却有着比第二种开发方式更大的灵活性。权衡比较之后,最终选择在DirecShow框架体系之上进行音/视频传输系统的设计开发。
DirecShow的构成由一组ComponentobjectModel(简称COM)对象组成的。它是DirectX中较为关键的构成部分,是Microsoft在VideoforWindows与ActiveMovie的基础上,为简化在Windows平台上进行流媒体系统的开发而提供的一个体系构架。总的来说,DirecShow有下面几个方面的特点:第一,可以对音/视频数据流进行快速处理;第二,可以实现音/视频的同步播放;第三,具有开放性及模块快的体系结构。
2.采集和播放音频与视频相关数据
确定好开发平台之后,就可以大幅度降低实现音/视频相关数据采集、音/视频相关数据播放功能的难度。DirecShow中的Filter可以对早期VideoforWindows视频采集卡与WindowsDriverModel驱动模型都给予技术支持。现今WindowsDriverModel是最常用于视频数据采集的驱动模型,在DirecShow体系架构中SourceFilter是采集设备的集中表现,系统设计开发人员仅需要通过DirecShow所提供的接口函数找到系统中已经安装的且适合需要的SourceFilter,之后利用SourceFilter上面的Pin来连接就能构成FilterGraph,系统研发工作者无须担心音频采集设备或终端用户设备上安装的是何种类型的采集设备,数据的采集均可以应用此法。
播放音/视频频通过Windows操作系统又或者是DirecShow中已有的RenderingFilter,音频利用DirecSounddevice进行播放,VideoMixingRenderer9则用于视频的播放,利用VideoMixingRenderer9进行视频的播放不但可以获得更多有用的功能,并且还可以确保视频播放时更可靠、稳定。
3.编码器与解码器的确定
因为在流量方面,无论是音频还是视频都比较大。为了确保音/视频传输的效率,在进行网络传输之前往往需要将所采集到的数据进行压缩,而网络终端为可以顺利播放接收到的数据还需要先进行解压缩。通过比较编码率、解码率、编码速度、解码速度、数据编/解码质量损失等方面,我们最终选择了XvidEncoder作为视频的编码器,解码器则选择了XvidDecoder。本系统中音频与视频数据分别单独传输。
4.网络发送器与网络接收器的设计
网络发送器与网络接收器为自行组织开发。DirectShow提供了功能各异的众多基类,开发者只需选择合适的基类进行派生,重载相应的虚函数,将网络传输功能封装到派生类中即可。为减少网络传输的时间延迟,采用UDP协议进行传输。
5.FilterGraphManager管理类的设计
下图现本系统主要类之间关系的UML模型图。
二、编程实现
根据上面的分析与设计,编程工作主要集中在网络发送Filter类、网络接收Filter类和FilterGraph管理类的实现上。采用VC++6.0作为开发工具,首先安装DirectX9.0SDK,然后启动VC++6.0,进行开发环境的配置,打开DirectX9.0SDK安装目录中DirectShow部分的baseclasses项目,编译后会生成Strmbasd.lib(debug版本,如果是Retail版本生成的是Strmbase.lib)库文件,当开发Filter类时,会使用这个库文件。关闭这个工程,新建一个MFC项目,进一步开发,相关源代码略。
三、结束语
实时音频与视频传输子系统用途广泛,可以作为装备远程故障诊断、远程技术支援等系统的一个组成部分,尤其适合对野外执行任务的机器设备的故障诊断与修理等提供远程技术支持,我们可以进一步研究,开发出更有效、优质的系统。
参考文献
[1]侯俊杰.深入浅出MFC[M].武汉:华中科技大学出版社,2001.
[2]AnthonyJones.Windows网络编程技术[M].北京:机械工业出版社,2003.