为什么 MediaFoundation 的 MediaEngine 可能会在第二次播放时播放视频而不是第一次播放?

问题描述

我在 Windows 10 上的 Win32 桌面应用程序中使用 Microsoft 的 MediaEnginePlayer DirectX 示例类 defined heredescribed here

在这样的音频文件调用 SetSource() 之后:

mePlayer->SetSource(L"c:\\auddio.opus");

它会自动开始播放,因为类在收到 MF_MEDIA_ENGINE_EVENT_CANPLAY 事件 here调用了 Play()。

但是如果有视频:

mePlayer->SetSource(L"c:\\video.mp4");  //Won't play

它不播放。要播放视频,我需要在调用 SetSource() 之前或之后显式调用 Play()。

//This will play
mePlayer->SetSource(L"c:\\video.mp4");
mePlayer->Play();

//And even this will play
mePlayer->Play();
mePlayer->SetSource(L"c:\\video.mp4");

但我不明白为什么会这样。以下是演示问题的示例:https://www.mediafire.com/file/6b61sxoou94d60r/Test.zip/file

谁能解释这种行为?

解决方法

我可以使用您的代码示例重现此问题。

在收到 MediaEnginePlayer::Play() 时致电 MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA 为我解决此问题。你可以试试。

关于为什么在收到 MediaEnginePlayer::Play() 时调用 MF_MEDIA_ENGINE_EVENT_CANPLAY 不起作用,我需要做进一步调查。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...