0

我正在制作一个 Directshow 应用程序来捕获 MP4 视频。我使用下图来做到这一点。

Input Stream --> MJPEG Decompressor --> x264vfw H.264/MPEG-4 AVC Codec --> GDCL Mpeg-4 Multiplexor --> File Writer

在我的directshow应用程序中,我创建了所需的过滤器并将它们连接到图形上,最后我使用pin作为捕获进行文件写入操作和redder流。我的那部分代码如下。

GUID guid;
guid = MEDIASUBTYPE_x264;

hr = gcap.pBuilder->SetOutputFileName(&guid, gcap.wszCaptureFile,
                                      &g_mp4mux, &gcap.pSink);



hr = gcap.pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,
                                     &MEDIATYPE_Interleaved,
                                     gcap.pVCap, pVcompFilter, NULL);
if(hr != NOERROR)
{
    hr = gcap.pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,
                                        &MEDIATYPE_Video,
                                        gcap.pVCap, pVcompFilter, NULL);
    if(hr != NOERROR)
    {
        ErrMsg(TEXT("Cannot render video capture stream"));
        TearDownGraph();
        return FALSE;
    }
}

在上面的代码

g_mp4muxGDCL MPEG-4 Muliplexrer 文件管理器

PVcompFilterx264vfw H.264/MPEG-4 AVC codec过滤器

当我运行上面的代码时,我得到 HR = E_INVALIDARG

不知道上面的代码有什么问题。请帮忙。谢谢。

4

1 回答 1

1

RenderStream在内部执行许多步骤,并且如果在序列期间发生任何错误,错误将被转发回去而不提供详细信息。因此,E_INVALIADRG您所拥有的只是,您不知道这是您的电话或内部的错误论点。

对于初学者,请检查您的参数(您可能NULL在第 3 和第 4 个参数中传递 s),然后如果没有帮助,请将 RenderStream 替换为直接图形构建调用,例如 IGraphBuilder::Connect 以了解有关该错误的更多信息。

还要提及您的交叉发布:在 msdn.microsoft.com

于 2012-05-16T05:53:23.620 回答