0

以下是我的过滤器图。我正在尝试在过滤器图中插入“ffdshow 视频编码器”编码器,但我无法这样做。在此处输入图像描述

以下是我在生成 filtergraph 后尝试连接 Compressor 的代码:

public void setFileName(string pFileName)
    {
        int hr;
        IBaseFilter _infinitePinTeeFilter = null;
        graph.FindFilterByName("Infinite Pin Tee Filter", out _infinitePinTeeFilter); 

        mediaControl.Stop();
        hr = captureGraphBuilder.SetOutputFileName(MediaSubType.Avi, pFileName, out mux, out sink);
        checkHR(hr, "Can't set SetOutputFile");
        hr = captureGraphBuilder.RenderStream(null, MediaType.Video, _infinitePinTeeFilter, _videoCompressor, mux);
        checkHR(hr, "Can't Render Output File");
        mediaControl.Run();
    }

任何帮助将不胜感激......谢谢。

4

1 回答 1

0

ICaptureGraphBuilder::SetOutputFileName不是设置图表的 API 的好选择。对于简单的图表,它可以很好地完成这项工作,但是因为它会在没有很好的描述和错误实际发生的阶段将错误转发给您,因此每次您很难理解出了什么问题。

问题可能是由于视频压缩器输出的媒体类型上缺少帧速率信息引起的,但是作为您在屏幕截图上的构建阶段,您甚至还没有此媒体类型可用,您无法进行故障排除并获得此信息信息。

使用IGraphBuilder::AddFilter, IGraphBuilder::Connect,IFileSinkiFilter::SetFileName来可靠地配置管道。

于 2013-07-20T10:23:41.317 回答