0

我一直在检测音频和视频设备并构建捕获图,但在最后一个过滤器中我无法同时渲染它们。

            DsDevice dev = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice)[0];
            hr = m_FilterGraph.AddSourceFilterForMoniker(dev.Mon, null, dev.Name, out capFilter);
            Marshal.ThrowExceptionForHR( hr );

            DsDevice audioDv = DsDevice.GetDevicesOfCat(FilterCategory.AudioInputDevice)[0];
            hr = m_FilterGraph.AddSourceFilterForMoniker(audioDv.Mon, null, audioDv.Name, out audioFilter);
            Marshal.ThrowExceptionForHR(hr);

            asfWriter = ConfigAsf(capGraph, szOutputFileName);

            hr = capGraph.RenderStream(null, MediaType.Audio, audioFilter, null, asfWriter);
            Marshal.ThrowExceptionForHR(hr);
            hr = capGraph.RenderStream(null, MediaType.Video, capFilter, null, asfWriter);
            Marshal.ThrowExceptionForHR( hr );

这是我尝试的一段代码,我应该选择其他 MediaType 吗?

4

1 回答 1

2

我是 C++ directshow 开发人员,我对 DirectShow.net 不熟悉,因此无法评论您的代码。

但我有很多 DShow 经验...

要将视频和音频媒体流写入文件,您需要一个 mux 过滤器。

从您的源过滤器中,视频和音频引脚都应连接到多路复用器(多路复用器的缩写)过滤器。从那里,mux 过滤器的(单针)输出将连接到File Writer 过滤器

Mux 过滤器取决于使用的媒体类型。您不能将两个流都连接到您的 mux 过滤器,这表明它不支持一种(或两种)媒体类型。

在这种情况下,请进行一些测试 - 例如仅将视频流渲染到磁盘,然后仅渲染音频磁盘。至少其中一个不起作用 - 这是有问题的媒体类型。

您可以尝试在谷歌上搜索替代多路复用器过滤器,编写您自己的过滤器,或者更改源流的媒体类型。

希望这至少有一些帮助!

于 2010-11-14T22:45:23.433 回答