编解码器更改导致IMediaSeeking失败setPosition

时间:2012-11-12 15:29:10

标签: c++ video directshow video-codecs

我很乐意改进我的C ++程序,我通过directshow阅读视频。现在我也试着写一些也很好用的视频 然后寻找合适的编解码器(想到vob / ogg)...
然而,突然今天视频显示得非常慢 现在我卸载了之前安装的任何其他编解码器,视频根本无法播放 原因似乎是CComQIPtr< IMediaSeeking, &IID_IMediaSeeking > pSeeking( pGraph );hr = pSeeking->SetPositions( &Startzeit, AM_SEEKING_AbsolutePositioning,NULL, AM_SEEKING_NoPositioning );给出了错误,当时不支持SetPosition ...随时可以实际执行。
同时hr=pSeeking->GetDuration(&duration)返回0并且我用来获取framepersecond的相应AM_MEDIA_TYPE mt;具有空格式类型。 (pbFormat是Null)。

我是否无意中安装/卸载了重要的东西? 你听说过类似的问题了吗? 正如我所说的那样,几天前相同的视频和源代码工作正常(我现在通过更改来评论) 我想给你更多的源代码,但它有点长,但如果你认为它会有所帮助,我当然会添加它。

问候,
朱利安

以下是源代码:http://pastebin.com/jMdWejH9
它当然只是整个代码的一部分,但我认为这是主要部分,因为这里插入了所有过滤器 请记住,这实际上有效,直到前几天!^^
第一部分是变量deklaration(所有重要的变量就像我所知道的那样,第二部分是被调用的函数)

1 个答案:

答案 0 :(得分:1)

如果在DirectShow中呈现文件,框架将使用系统中安装的编解码器/过滤器。如果你删除一些编解码器,它需要另一个或中断,因为它无法呈现。要了解框架使用的过滤器,您可以尝试在GraphEdit或GraphStudioNext中呈现文件。 (只需将文件放在其中一个程序中,然后查看filtergraph)。我们使用编解码器包ffdshow-tryouts获得了最佳效果,Haali Media Splitter获得了player