我构建了一个 DirectShow Video 渲染器来捕获具有VIDEOINFOHEADER2
as 视频格式的帧(这对于内置的抓取器是不可能的)。该类派生自CBaseVideoRenderer
并实现所需的基本方法。CheckMediaType
和SetMediaType
被称为,以及OnStartStreaming
。然而DoRenderSample
永远不会被调用,因为流立即结束。有趣的是,在我的图中,音频是由 DirectSound 渲染器渲染的,即有数据。
我应该补充一点,我的图表有一个“实时源”,即 BDA DVB-S。如果我添加一个 EVR 而不是我的渲染器,一切正常,即播放声音和视频。
这里有什么问题?渲染器从实时源接收数据是否有特殊要求?
更新 1:我应该补充一点,如果我在 GraphEdit 中运行我的图表,它也会播放声音,但会发出一条错误消息(仅限我的渲染器,而不是 EVR):“图表无法更改状态。至少其中一个操作中涉及的引脚已连接。(返回代码:0x80040204)“我认为这是问题的一部分,但不幸的是我不明白它的含义或我应该在我的代码中更改什么。
更新 2:根据要求,我的图表的 ROT 条目(点击放大):