我对DirectShow和分离器产生了奇怪的效果。
我无法跟踪它,所以也许有人可以帮忙吗?

在我的应用程序中,我从电影中提取了几帧。
我通过DirectShow的IMediaDet接口(interface)执行此操作。
(顺便说一句:它是XP SP3,DirectShow 9.0)。

只要不涉及媒体分割器,一切都可以正常工作
(mp4,mkv,flv等都是这种情况)。
关于编解码器,我使用K-Lite发行版。
一段时间以来,有两个分离器:LAV和Haali。
自从一段时间以来,Gabest拆分器已被删除。
但是只有激活了后者,一切都可以正常工作!

OK-效果:

关于IMediaDet.GetBitmapBits:
使用分割器的某些(大多数)媒体总是提取第一帧。
在其他带有分离器的媒体上,这种效果仅在我
之前使用过get_StreamLength。 (尽管GetBitmapBits应该切换
回到文档BitmapGrab模式)。
如前所述-只要不涉及分割器,一切都可以正常工作(mpg,wmv等)。

有人经历过类似的效果吗?

错误可能在哪里:在DShow中,在拆分器中,在我的代码中?

任何帮助表示赞赏... :-)

最佳答案

您的假设不太正确。 IMediaDet::GetBitmapBits在内部构建过滤器图,并尝试将播放导航到感兴趣的位置。然后开始流式传输,以将有效图像传输到其Sample Grabber过滤器“BitBucket”。

分离器是单独的过滤器还是与源组合都没有关系。重要的部分是图形的搜索能力,即使拍摄快照,错误的过滤器也可能成为障碍。这是您正在描述的症状。

例如,内部图可能是这样的:

那里有一个专用的多路复用器,快照是从正确的位置拍摄的。

10-04 12:06