我有如下所示的拓扑结构,它适用于所有视频序列的帧:
源->视频解码器MFT ->自定义视频编辑MFT->视频编码器MFT->自定义Sink MFT
但是如果我在“自定义视频编辑MFT”之后插入一个Tee节点来连接到增强型视频渲染器(EVR),那么应用程序并不能运行于视频序列的所有帧。
我试着用mftrace找出原因,但没有多大帮助。如果自定义MFT花费太长时间,是否有任何节点跳过帧的可能性?如果有一些提示来调试这个问题,或者任意猜测的话,我很感激。
FYI,这个问题只在我尝试UHD (3840x2160)分辨率视频时观察到。它适用于HD (1920x1080)分辨率。
发布于 2016-01-12 17:25:05
最后,通过关闭MF_SESSION_QUALITY_MANAGER来解决这个问题,如下所示,它避免了可能的帧丢失:
CComPtr<IMFAttributes> attrib;
MFCreateAttributes(&attrib, 1);
attrib->SetGUID(MF_SESSION_QUALITY_MANAGER, GUID_NULL);
hr = MFCreateMediaSession(attrib, &_mediaSession);发布于 2015-12-23 19:49:52
您是否尝试在tee节点上设置MF_TOPONODE_PRIMARYOUTPUT。
您的输出编码器应该是主要输出,而渲染器输出应该是第二个。
另外,使用MF_TOPONODE_RATELESS作为您的接收器,因为在默认情况下,它不是。
不要使用MF_TOPONODE_DISCARDABLE,因为你不想使用。
如果您的问题仍然存在,我可以创建一个tee节点转换来检查发生了什么。但就目前而言,还不确定tee节点是否是问题所在。也许是媒体会议..。
https://stackoverflow.com/questions/34214238
复制相似问题