2

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

SourceFilter ---> Muxer ---> FileWriter

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

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

可以确定存在 fps(每秒帧数)问题。我该如何解决?有任何想法吗?

PS:

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

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

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

更多细节:

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

此记录但 fps 错误。

当我尝试 gdcl MP4 Mux(可以在这里看到)时,我成功获得了正确的 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
4

2 回答 2

3

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

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

于 2011-05-31T09:29:55.287 回答
1

在我的情况下,我确实有一个没有正确设置 AvgTimePerFrame 的源过滤器。在我修复它(这是我自己的源过滤器)之后,AVI 也与它从上游接收到的任何东西一起使用。

于 2012-06-01T12:36:16.310 回答