C# 视频压缩不适用于实时捕获

C# 视频压缩不适用于实时捕获,c#,video,directshow,directshow.net,C#,Video,Directshow,Directshow.net,下面是我的过滤图。我试图在filtergraph中插入“ffdshow视频编码器”编码器,但我无法这样做 以下是生成filtergraph后尝试连接压缩机的代码: public void setFileName(string pFileName) { int hr; IBaseFilter _infinitePinTeeFilter = null; graph.FindFilterByName("Infinite Pin Tee Filte

下面是我的过滤图。我试图在filtergraph中插入“ffdshow视频编码器”编码器,但我无法这样做

以下是生成filtergraph后尝试连接压缩机的代码:

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();
    }

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

ICaptureGraphBuilder::SetOutputFileName不是设置图形的好API选择。对于简单的图形来说,它做得很好,但是当它将错误转发给您时,如果没有很好的描述以及错误实际发生的阶段,那么每次您都很难理解哪里出了问题

该问题可能是由于视频压缩程序输出中缺少有关媒体类型的帧速率信息造成的,但由于屏幕截图上的构建阶段,您甚至还没有可用的媒体类型,因此无法进行故障排除并获取此信息


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

非常感谢。。如果能提供一些代码参考,那就太好了。此外,我是否可以在同一个图形中进行视频流、采样抓取和文件保存(带压缩)?您正在构建的拓扑结构可以完成并可以工作(特别是在捕获+预览+抓取+同时录制方面)。AVI Mux可能对媒体类型有自己的要求,视频压缩机也有自己的要求。当您执行批量操作
SetOutputFileName
/
RenderStream
以完成图形时,您看不到它在哪里失败。当你一个接一个地添加东西时,你可以看到这个。谢谢你!你总是帮助我!!