在DirectShow Encoder

时间:2015-11-25 11:44:57

标签: video encoding directshow h.264 directshow.net

我在播放视频时遇到了一些奇怪的行为,我使用DirectShow创建了视频 - 问题出在Windows 7上(W8 / W10工作正常)。

图表构建如下:

Source(Webcam) -> H264 Encoder -> MP4 Mux -> File Writer

所以我使用的是H264编码器,但由于某种原因,编码器会在编码器滤波器后删除所有关键帧(同步)。使用另一个较旧的H264编码器我可以看到它完美地设置了每20帧的关键帧(同步),并且来自该编码器的输出文件在所有操作系统上都能完美运行。

所以我怀疑问题在于编码器没有正确设置关键帧,因此无法正确搜索(但Windows 8和10可以弄清楚如何在没有正确的关键帧的情况下搜索文件,而不是Windows 7)

在Windows 7上使用VLC / WMP搜索文件时,文件会很奇怪(很长一段时间没有视频,灰色像素化视频超过10秒,突然停止播放视频......)

所以我的问题是,如何在DirectShow中的编码过滤器上设置关键帧的间隔?

编辑:我发现的另一个有趣的事情是,当我寻找时,在播放期间通过分析器滤波器(在解码器之后插入)可以看到这种奇怪的输出。 enter image description here

1 个答案:

答案 0 :(得分:2)

关于插入关键帧的决定是编码器。它可能具有定义GOP长度和关键帧最小频率的设置。它还可以在场景变化上插入关键帧。它还可能接受在特定点插入的外部请求。

通用方法是IAMVideoCompression::put_KeyFrameRate。同时我会说它是编码器特定的。您应该检查您正在使用的特定编码器的文档,以了解如何执行此操作。