1. DirectShow系统
DirectShow是Windows平台下的一个流媒体架构。代号Quartz。是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM的流媒体处理的开发包。提供高质量的捕获、回放多媒体流。当硬件支持的时候,DirectShow 使用DirectDraw和DirectSound,当硬件不支持时,DirectShow 使用GDI绘制视频,新的VMR使用D3D绘制视频。使用waveOut * multimedia APIs 播放音频。VISTA系统引入了一套新的SDK:Media Foundation,希望能在以后的Windows版本中逐步取代Dshow。
支持多种格式:ASF(Advanced Systems Format)、MPEG(Motion Picture Experts Group)、AVI(Audio-Video Interleaved)、MP3(MPEG Audio Layer-3)、WAV()等
支持从数字或模拟设备捕获视频、音频。
能自动侦测并使用视频和音频的硬件加速模块。
DirectShow SDK现在是Windows SDK的一部分,而不再属于DirectX SDK。
DirectShow 核心 DLL是Quarzt.dll。
DirectShow系统示意图:
从系统示意图中可以看到,DiretcShow通过Filter Graph Manager 与应用程序交互:接收应用程序的指令并将消息发送给应用程序。
2. 支持的压缩格式
Windows Media Video
ISO MPEG-4 video version 1.0
Microsoft MPEG-4 version 3
Sipro Labs ACELP*
Windows Media Audio*
MPEG Audio Layer-3 (MP3) (decompression only)
Digital Video (DV)
MPEG-1 (decompression only)
MJPEG
Cinepak
3. 支持的文件类型
Windows Media® Audio (WMA)
Windows Media® Video (WMV)
Advanced Systems Format (ASF)
Motion Picture Experts Group (MPEG)
Audio-Video Interleaved (AVI)
WAV
AIFF
AU
SND
MIDI
4. 开发环境配置
http://msdn.microsoft.com/en-us/library/dd377592(v=VS.85).aspx
4.1 VC包含文件 配置:
只需添加Windows SDK,并移动到顶端 :
D:/Develop SDK/Microsoft SDKs/Windows/v6.0/Include
4.2 VC库文件 配置:
只需添加Windows SDK,并移动到顶端:
D:/Develop SDK/Microsoft SDKs/Windows/v6.0/Lib(32位系统选/x86,64位系统选/x64)
4.3 旧版的库需做以下事:
<1> 编译DXSDK/Samples/C++/DirectShow/BaseClasses 项目,得到下面两个库文件:
DirectShow/BaseClasses/Debug/strmbasd.lib
DirectShow/BaseClasses/Release/strmbase.lib
<2> 包含文件配置:
添加DXSDK/Samples/C++/DirectShow/DirectShow/Common :
D:/Develop SDK/DXSDK/Samples/Multimedia/DirectShow/Common
添加DXSDK/Samples/C++/DirectShow/DirectShow/BaseClasses :
D:/Develop SDK/DXSDK/Samples/C++/DirectShow/DirectShow/BaseClasses
<3> 库文件配置:
添加DirectShow/BaseClasses/Debug :
D:/Develop SDK/DXSDK/Samples/C++/DirectShow/BaseClasses/Debug
添加DirectShow/BaseClasses/Release :
D:/Develop SDK/DXSDK/Samples/C++/DirectShow/BaseClasses/Release
4.4 代码配置
头文件 :#include <Dshow.h>
库文件 :#pragma comment( lib, "Strmiids.lib" )
#pragma comment( lib, "Quartz.lib" ) 如果需要调用AMGetErrorText 函数,需加载此库。