DirectShow记录问题 - fps

时间:2011-05-30 06:47:52

标签: video directshow video-capture directshow.net

我只是创建一个简单的图表来记录来自源过滤器的视频:

SourceFilter ---> Muxer ---> FileWriter

我可以将来自SourceFilter的视频保存到我的本地磁盘。

But when i try to play the recorded video, it play in "slow motion" :-).

确定存在fps(帧persecond)问题。我该如何解决?任何想法?

PS:

要检查我的SourceFilter是否提供righ fps,我只需创建另一个图表:

SourceFilter ---> Video Decoder ---> Video Renderer

它以正确的速度(fps)播放

更多详情:

SourceFilter(*.mp4 file format) ---> Avi Mux Filter ---> File writer Filter

此记录但错误的fps。

当我尝试使用gdcl MP4 Mux(can see it here )时,我成功地获得了正确的fps。

SourceFilter(*.mp4 file format) ---> GDCL MPEG 4 Mux Filter ---> File writer Filter

另一种情况

SourceFilter( *.h264 file format) ---> Avi Mux Filter ---> File writer Filter
SourceFilter( *.h264 file format) ---> GDCL MPEG 4 Mux Filter---> File writer Filter

它记录了文件无法播放

实际上我不想解码任何东西......只需将原始编码的视频帧(mp4,h264)写入文件。我也可能不需要同步音频和视频...为什么需要Mux?

我理想的过滤器应该是这样的:

SourceFilter(whatever format) ---> File writer

2 个答案:

答案 0 :(得分:3)

拉尔夫的评论可能是正确的。 AVI文件格式没有每帧时间戳,只有平均帧速率。因此,当帧到达时,多路复用器必须决定是将该帧放置在下一个“时隙”中,还是插入“丢帧”标记并将帧放入后面的时隙中。如果源过滤器的时间戳与媒体类型的帧速率不匹配,那么您将获得此效果。

您可以将视频基本流保存到文件中,但使用转储过滤器示例,而不是文件编写器。文件写入器具有特殊协议,允许多路复用器随机访问文件(使用时间戳作为文件偏移)。您只想将数据保存为流,而转储示例就是这样做。

答案 1 :(得分:1)

在我的情况下,我确实有一个没有正确设置AvgTimePerFrame的Source过滤器。在我修复了它(它是我自己的源过滤器)之后,AVI也接受了从上游收到的任何内容。