2014-03-06 41 views
0

DirectShow.Net包含示例项目DxPlay,播放不带音频的视频。我需要修改这个项目才能播放音频。我已阅读我需要添加音频过滤器并连接到引脚,但我没有找到一种方法来做到这一点。DirectShow.Net播放带有音频的视频

下面是从设置过滤器了样本代码:

// Add the filters necessary to render the file. This function will 
// work with a number of different file types. 
IBaseFilter sourceFilter = null; 
hr = m_FilterGraph.AddSourceFilter(FileName, FileName, out sourceFilter); 
DsError.ThrowExceptionForHR(hr); 

// Get the SampleGrabber interface 
m_sampGrabber = (ISampleGrabber)new SampleGrabber(); 
IBaseFilter baseGrabFlt = (IBaseFilter)m_sampGrabber; 

// Configure the Sample Grabber 
ConfigureSampleGrabber(m_sampGrabber); 

// Add it to the filter 
hr = m_FilterGraph.AddFilter(baseGrabFlt, "Ds.NET Grabber"); 
DsError.ThrowExceptionForHR(hr); 

// Connect the pieces together, use the default renderer 
hr = icgb2.RenderStream(null, null, sourceFilter, baseGrabFlt, null); 
DsError.ThrowExceptionForHR(hr); 

可否请你提示我,我怎样才能使它播放音频?

+1

另一个额外的'RenderStream',MEDIATYPE_Audio'作为第二个参数('sourceFilter' /'null'为第三个,其余为'null's)? –

+0

@RomanR。,添加了icgb2.RenderStream(null,MediaType.Audio,sourceFilter,null,null) - 它工作。谢谢! – SiberianGuy

回答

3

如果您的视频渲染及音频不是,那么额外

icgb2.RenderStream(null, MediaType.Audio, sourceFilter, null, null) 

将呈现音频部分。

0

只需添加

icgb2.RenderStream(null, null, lavSplitter, null, null); 

如果有视频和音频,然后建立视频部分仍存在分路器的音频输出引脚之后。 RenderStream会自动找到并渲染,插入音频解码器和渲染器。

+0

对不起,我没有lavSplitter。这是我在玩代码时出现的一条额外的线。来自样本的真实代码是没有该行的那个。 – SiberianGuy

+0

然后罗马的路线是正确的路要走。 –