首页 > 解决方案 > 媒体基金会:第 6 次循环视频不稳定

问题描述

从 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 次开始分解。

有谁知道怎么回事?

在此先感谢史蒂夫。

标签: loopsms-media-foundation

解决方案


看来你必须打电话

m_pSession->停止();

循环时在 Start() 之前,以确保稳定性。

令人惊讶的是,如果需要确保 API 的稳健性,这不会在内部发生,但这就是 Media Foundation 的黑暗艺术 :)


推荐阅读