我使用的是微软的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()
不起作用,我需要做进一步的调查。