我有如下拓扑,它适用于所有视频序列帧:
源 - >视频解码器MFT->自定义视频编辑MFT->视频编码器MFT->自定义接收器MFT
但是如果我在"自定义视频编辑MFT"之后插入一个Tee节点?连接到增强型视频渲染器(EVR),然后应用程序不会为视频序列的所有帧运行。
我试图用mftrace找出原因,但它并没有多大帮助。如果自定义MFT花费太长时间,是否有可能由任何节点跳帧?我很感激,如果有一些提示可以调试这个问题或任何猜测。
仅供参考,此问题仅在我尝试使用UHD(3840x2160)分辨率视频时观察到。它适用于HD(1920x1080)分辨率。
答案 0 :(得分:2)
最后通过关闭MF_SESSION_QUALITY_MANAGER来解决问题,如下所示,它可以避免丢帧:
CComPtr<IMFAttributes> attrib;
MFCreateAttributes(&attrib, 1);
attrib->SetGUID(MF_SESSION_QUALITY_MANAGER, GUID_NULL);
hr = MFCreateMediaSession(attrib, &_mediaSession);
答案 1 :(得分:1)
您是否尝试在T恤节点上设置MF_TOPONODE_PRIMARYOUTPUT。
您的输出编码器应该是主输出,而渲染器输出则是第二个。
此外,对您的接收器使用MF_TOPONODE_RATELESS,因为默认情况下不是。
请勿使用MF_TOPONODE_DISCARDABLE,因为您不想这样做。
如果您的问题仍然存在,我可以创建一个T恤节点转换来检查发生了什么。但就目前而言,它还不确定T型节点是否存在问题。也许是媒体会议......