如何在 Media Foundation 中使用异步方法?

问题描述 投票:0回答:1

我正在尝试使用 IMFMediaSession 进行简单的视频播放。文档指出它的大多数方法都是异步的,当它们完成时我将通过 IMFAsyncCallback 收到通知。但尚不清楚发出多个异步调用时会发生什么。例如,我调用 IMFMediaSession::SetTopology 后,可以立即调用 IMFMediaSession::Start 还是必须等待 MESessionTopologySet 事件?

再举一个例子,“如何执行清理”中的示例代码在 IMFRateControl::SetRate 之后立即调用 IMFMediaSession::Start,而不等待 MESessionRateChanged 事件,这仅在异步请求严格按 FIFO 顺序完成时才有效。是这样吗?

c++ windows winapi ms-media-foundation
1个回答
0
投票

...发出多个异步调用时会发生什么。例如,我拨打

IMFMediaSession::SetTopology
后,我可以立即拨打
IMFMediaSession::Start
吗...

您无法启动未解析(=尚未创建)的拓扑,可以吗?

异步的想法是(1)不阻塞调用者的调用(2)将较大的任务分成较小的工作项,根据需要串行和/或并行执行。

在大多数情况下,您应该作为异步处理程序进行调用并捕获完成。实现不会立即执行您的请求:它们会在内部将工作项发布到工作队列上,可能有多个工作项要做,然后最终在完成时您会收到通知。但有时您可以立即连续进行几个调用,因为它们只是在内部排队以顺序执行。在您的速率更改示例中,更改的速率不会阻止拓扑启动/停止。但未解决的拓扑将是一个障碍。

© www.soinside.com 2019 - 2024. All rights reserved.