gpt4 book ai didi

c++ - 使用 IMediaSeeking 检测视频结束

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:57 27 4
gpt4 key购买 nike

我正在播放视频以使用 DirectShow 获取一些屏幕。

我通过调用 IMediaControl->RunIVMRWindowlessControl->GetCurrentImageIMediaSeeking->SetPositions 在循环中执行此操作。

问题是我无法检测到视频何时结束。 IMediaSeeking->SetPositions 始终返回相同的值 (S_FALSE)。 IMediaControl->Run 也始终返回 S_FALSE。在调用 IMediaControl->Run 以检查 EC_COMPLETE 之后,我还尝试了 IMediaEvent->GetEvent 而是返回(总是) EC_CLOCK_CHANGED

如何检测视频结束?谢谢

更新:做类似的事情

    long eventCode = 0;
LONG_PTR ptrParam1 = 0;
LONG_PTR ptrParam2 = 0;
long timeoutMs = INFINITE;

while (SUCCEEDED(pEvent->GetEvent(&eventCode, &ptrParam1, &ptrParam1, timeoutMs)))
{
if (eventCode == EC_COMPLETE)
{
break;
}

// Free the event data.
hr = pEvent->FreeEventParams(eventCode, ptrParam1, ptrParam1);
if (FAILED(hr))
{
break;
}
}

几个事件后阻塞:0x53 (EC_VMR_RENDERDEVICE_SET)、0x0D (EC_CLOCK_CHANGED)、0x0E (EC_PAUSED),下一次调用 GetEvent 被阻塞,视频在我的 IVideoWindow 中呈现(逐帧播放)

最佳答案

您应该执行 IMediaEvent->GetEvent,但请注意您将收到各种事件,而不仅仅是 EC_CLOCK_CHANGED。继续接收,您将获得 EC_COMPLETEStep 6: Handle Graph Events在 MSDN 上对此进行了详细解释。

关于c++ - 使用 IMediaSeeking 检测视频结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8976172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com