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



我使用的是微软的MediaEnginelayer DirectX示例类,该示例类在这里定义,并在Windows 10上的Win32桌面应用程序中进行了描述。

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

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

它自动开始播放,因为类在这里接收到CCD_ 1事件后调用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

有人能解释这种行为吗?

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

收到MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA后请致电MediaEnginePlayer::Play()为我解决此问题。您可以尝试一下。

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

最新更新