【发布时间】:2016-07-17 08:50:33
【问题描述】:
我正在使用 Media Foundation 播放视频,我需要对其进行实时编辑,因此我需要知道何时准备好呈现帧,但回调不提供这样的消息。
我唯一的想法是检查帧速率,然后将计时器设置为略低于该帧速率,并使用 GetPosition 检查我在上次调用计时器时所处的位置,但必须有比这更好的方法.
谢谢!
马特
【问题讨论】:
我正在使用 Media Foundation 播放视频,我需要对其进行实时编辑,因此我需要知道何时准备好呈现帧,但回调不提供这样的消息。
我唯一的想法是检查帧速率,然后将计时器设置为略低于该帧速率,并使用 GetPosition 检查我在上次调用计时器时所处的位置,但必须有比这更好的方法.
谢谢!
马特
【问题讨论】:
为什么不能在拓扑中注入自己的 IMFStreamSink 实例,在 IMFStreamSink::ProcessSample 的实现中进行编辑并将编辑后的内容传递到您当前使用的任何输出节点?
此外,如果您使用 EVR,您可以创建自定义演示者 - 请参阅 MSDN 上的 this 文章。
【讨论】:
我找到了一个简单的解决方案。设置会话的播放速度,然后从会话创建演示时钟。设置一个计时器,并检查演示时钟。当时间流逝等于播放速度的一个刻度时,将呈现一个新帧。
【讨论】: