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

标签 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 和相应的 AM_MEDIA_TYPE mt;我用来获取 framepersecond 的格式类型为空。 (pbFormat 为 Null)。

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

此致,
朱利安

这是源代码:http://pastebin.com/jMdWejH9
这当然只是整个代码的一部分,但我认为这是主要部分,因为这里插入了所有过滤器。
请记住,这实际上在几天前有效!^^
第一部分是变量说明(据我所知所有重要变量,第二部分是调用的函数)

最佳答案

如果您在 DirectShow 中渲染文件,框架会使用系统中安装的编解码器/过滤器。如果您删除某些编解码器,它会需要另一个编解码器或中断,因为它无法呈现。要了解框架使用的过滤器,您可以尝试在 GraphEdit 或 GraphStudioNext 中呈现文件。 . (只需将文件放在这些程序之一上,然后查看过滤图)。我们使用编解码器包获得了最好的结果 ffdshow-tryoutsHaali Media Splitter对于我们的 player .

关于c++ - 编解码器更改导致 IMediaSeeking setPosition 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13346530/

相关文章:

C++ 重载 (+) 运算符

c++ - 为什么 ostream::write() 在 C++ 中需要 ‘const char_type*’ 而不是 ‘const void*’?

matlab - 在matlab中逐帧浏览电影

python - 如何使用 ffmpeg 和 python 向视频添加文本

c++ - undefined symbol (CLSID_CMPEG2EncoderVideoDS)

c++ - FFmpeg Windows directshow 过滤器

c++ - CSource 过滤器上的 SetMediaTime 使输出 AVI 变得毫无意义 - 知道为什么吗?

C++ 如何从字符串流中取出值并将它们放入 vector 中,以便我可以单独访问它们?

c++ - 保证复制省略的行为是否取决于用户定义的复制构造函数的存在?

android - VideoView裁剪成正方形