问题描述
从 github 获取当前媒体基础样本(MF_Protectedplayback,但可能是其他样本之一)。
CPlayer::HandleEvent()
{
case MEEndOfPresentation:
CHECK_HR(hr = OnPresentationEnded(pEvent));
// ADV_SW: Loop.
{
static DWORD dbg_count = 0;
dbg_count++;
char title[100];
sprintf_s(title,"Loop: %d",dbg_count);
SetwindowTextA(m_hwndEvent,title);
}
Play();
break;
}
此外,在 CPlayer::StartPlayback 中
...修改为第二个播放从头开始
// Start from beginning
PROPVARIANT varStart = { 0 };
InitPropVariantFromInt64(0,&varStart);
hr = m_pSession->Start(&GUID_NULL,&varStart);
当我播放示例文件 http://advance-software.com/misc/ad.mp4(下载并在本地运行)
前 5 个循环效果很好,然后在第 6 个循环开始中断。
有人知道这是怎么回事吗?
提前致谢, 史蒂夫。
解决方法
看来你必须打电话
m_pSession->Stop();
循环时在 Start() 之前以确保稳定性。
如果要求确保 API 稳健性,这不会在内部发生,但这是 Media Foundation 的黑暗艺术:)