视频压缩不适用于实时捕捉

时间:2013-07-20 05:19:21

标签: c# video directshow directshow.net

以下是我的过滤器图表。我想在filtergraph中插入“ffdshow视频编码器”编码器,但我无法这样做。enter image description here

以下是我在获取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();
    }

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

1 个答案:

答案 0 :(得分:0)

ICaptureGraphBuilder::SetOutputFileName不是设置图表的API的好选择。它可以很好地处理简单的图形,但是它会在没有良好描述的情况下将错误转发给您,并且每当您很难理解错误时,错误实际发生的阶段。

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

使用IGraphBuilder::AddFilterIGraphBuilder::ConnectIFileSinkiFilter::SetFileName来可靠地配置管道。