我正在制作一个 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_mp4mux
是 GDCL MPEG-4 Muliplexrer
文件管理器
PVcompFilter
是x264vfw H.264/MPEG-4 AVC codec
过滤器
当我运行上面的代码时,我得到 HR = E_INVALIDARG
。
不知道上面的代码有什么问题。请帮忙。谢谢。