- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在播放视频以使用 DirectShow 获取一些屏幕。
我通过调用 IMediaControl->Run
、IVMRWindowlessControl->GetCurrentImage
和 IMediaSeeking->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_COMPLETE
。 Step 6: Handle Graph Events在 MSDN 上对此进行了详细解释。
关于c++ - 使用 IMediaSeeking 检测视频结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8976172/
我正在播放视频以使用 DirectShow 获取一些屏幕。 我通过调用 IMediaControl->Run、IVMRWindowlessControl->GetCurrentImage 和 IMed
我很高兴改进我的 C++ 程序,我通过 directshow 阅读视频。现在我也试着写视频,效果也很好。 然后是寻找合适的编解码器(考虑了 vob/ogg)... 但是,今天突然间视频显示的很慢。 现
我是一名优秀的程序员,十分优秀!