(急急急)C# DirectShowLib-2005.dll摄像头录像没有声音
我从开源项目中下载了DirectShowLib-2005.dll和样例,参考样例写了个录像及录音软件,样例中录像例子没有录音功能,我自己参考其他源码添加了录音功能,但是,录制选项选择MediaSubType.Asf,可以正常录制WMV,但是却没有声音,我已经添加了视频和音频的IBaseFilter,却不知如何添加声音进录制的文件里,请高手指点。
我的代码如下:
ICaptureGraphBuilder2 theCapBuilder = null;
IBaseFilter capFilter = null;
IBaseFilter audFilter = null;
IBaseFilter asfWriter = null;
IFilterGraph2 m_FilterGraph = null;
theCapBuilder = new CaptureGraphBuilder2() as ICaptureGraphBuilder2;
m_FilterGraph = new FilterGraph() as IFilterGraph2;
object ppvResult = null;
Guid gUID = typeof(IBaseFilter).GUID;
videodev.Mon.BindToObject(null, null, ref gUID, out ppvResult);
capFilter = ppvResult as IBaseFilter;
gUID = typeof(IBaseFilter).GUID;
auddev.Mon.BindToObject(null, null, ref gUID, out ppvResult);
audFilter = ppvResult as IBaseFilter;
IBaseFilter audiocompress = null;
foreach (DsDevice device in DsDevice.GetDevicesOfCat(FilterCategory.AudioCompressorCategory))
{
if (device.Name.ToLower().IndexOf("wmaudio encoder dmo")!= -1)
{
device.Mon.BindToObject(null, null, ref gUID, out ppvResult);
break;
}
}
audiocompress = ppvResult as IBaseFilter;
//m_FilterGraph.AddSourceFilterForMoniker(videodev.Mon, null, videodev.Name, out capFilter);
//m_FilterGraph.AddSourceFilterForMoniker(auddev.Mon, null, auddev.Name, out audFilter);
IFileSinkFilter pTmpSink = null;
m_FilterGraph.AddFilter(capFilter, "Video Capture");
m_FilterGraph.AddFilter(audFilter, "Audio Capture");
m_FilterGraph.AddFilter(audiocompress, "Audio compressor filter");
theCapBuilder.SetFiltergraph(m_FilterGraph);
int hr = theCapBuilder.SetOutputFileName(MediaSubType.Asf, szOutputFileName, out asfWriter, out pTmpSink);
IConfigAsfWriter theConfig = asfWriter as IConfigAsfWriter;
Guid theGuid = new Guid(0x6E2A6955, 0x81DF, 0x4943, 0xBA, 0x50, 0x68, 0xA9, 0x86, 0xA7, 0x08, 0xF6);
theConfig.ConfigureFilterUsingProfileGuid(theGuid);
theCapBuilder.RenderStream(PinCategory.Capture, MediaType.Video, capFilter, null, asfWriter);
theCapBuilder.RenderStream(PinCategory.Capture, MediaType.Audio, audFilter, audiocompress, asfWriter);
Marshal.ReleaseComObject(theCapBuilder);
Marshal.ReleaseComObject(capFilter);
Marshal.ReleaseComObject(audFilter);
Marshal.ReleaseComObject(asfWriter);
m_mediaCtrl = m_FilterGraph as IMediaControl;
m_mediaCtrl.Run();