winapi - 如何从 hwndVideo 分离 IMFMediaSession / IMFTopologyNode?
问题描述
- 参考如何使用 Media Foundation 播放媒体文件。
- 我的主线程有一个父窗口。我通过 MFCreateVideoRendererActivate(HWND hwndVideo, IMFActivate** ppActivate) 在工作线程中创建了一个 EVR 子窗口作为视频播放器。但是现在的问题是,当父窗口退出时,子窗口会收到WM_DESTROY消息,触发CloseSession,而播放器有WaitForSingleObject等待关闭确认,可能会有几秒卡住。
- 所以我期待一个安全的Detach hwndVideo方法。所以在那之后,工作线程不依赖于窗口系统,也不影响主线程。
- 但是IMFTopologyNode或者IMFActivate / IMFMediaSink文档没有重置hwndVideo的接口方法,我尝试使用IMFTopology::RemoveNode移除MF_TOPOLOGY_OUTPUT_NODE节点,没有效果
解决方案
您可能可以WM_DESTROY
在父窗口中处理并隐藏和分离 ( SetParent
) 子项,以防止它们立即被破坏。然而,无论哪种方式,从工作线程创建窗口几乎总是一个坏主意,导致上述工件。如果您可以更改此行为,它将导致更可靠的设计。
推荐阅读
- git - 如何使用 Github 操作镜像 GitHub 存储库?
- python - 使用 seaborn 点图更改日期格式
- java - PatternSyntaxException:即使没有元字符悬空,元字符也悬空
- tensorflow - TFOD 中的平均精度和平均召回率都始终为 0,并且不显示边界框
- c++ - 47515.cpp:11:10:致命错误:jni.h:没有这样的文件或目录
- javascript - 如何正确渲染 Chartjs 与条形数据之间的巨大差异?
- java - 如何摆脱ConstraintValidatorContext的标题属性错误响应中的propertyPath - SpringBoot自定义验证
- java - 在 CardLayout 中重绘字符串
- hyperledger-fabric - 升级/修改 Fabcar Chainicode 时出错
- mysql - Mysql - 加入标签和值表,并将未引用的标签包括为空