媒体基金会:第 6 次循环视频不稳定

Posted

技术标签:

【中文标题】媒体基金会:第 6 次循环视频不稳定【英文标题】:Media Foundation : Looping video unstable on 6th run 【发布时间】:2021-03-30 08:52:17 【问题描述】:

从 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 个循环开始分解。

有人知道怎么回事吗?

提前致谢, 史蒂夫。

【问题讨论】:

已测试 Win 10 Home / 64 Insider Preview。内部版本:21343.rs-prerelease.210320-1757 尝试与 MFPlayer2 示例相同,它可以正确循环,但是接口太基本,无法满足需要,因为拓扑隐藏在黑盒子内,需要修改它。 【参考方案1】:

看来你必须打电话

m_pSession->Stop();

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

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

【讨论】:

以上是关于媒体基金会:第 6 次循环视频不稳定的主要内容,如果未能解决你的问题,请参考以下文章

实时视频稳定 OpenCV

流媒体:RTMP 协议完全解析

一张自拍变6种风格漫画,视频也支持,全程稳定不“掉线”,这个AI不到一天狂揽1800赞...

媒体基金会音频/视频捕获到 MPEG4FileSink 产生不正确的持续时间

稳定排序和不稳定排序的区别和代表

安卓笔记一