在直接显示过滤器中根据大小和时间条件保存媒体流

时间:2011-12-01 15:14:37

标签: directshow mp4

我只是有一个简单的过滤器图表,它从rtsp源[通常是h264和mp4]获取媒体流并使用mp4 muxer将它们保存到文件...

RtspSourceFilter ---> MP4 Muxer ---> File Writer.

一切正常。但我有约束[现在的新要求]。我必须根据两个标准编写文件:它们的大小和持续时间......假设用户可以定义如下规则:

if duration > 1 hour or size > 1 gb then write stream to new file

在我的图表中,为了这个,

  

我必须根据条件停止我的图表并创建并开始新的图表   一个新文件名...

这很糟糕,因为在任何文件中我都必须重新连接我的源并可能丢失一些数据......

处理它的最佳方法是什么?

我的解决方案:[但不满意]

我有源代码RtspSourceFilter和MP4Muxer [开源],所以忘记了FileWriter ... MP4 Muxer成为Muxer的作家...所以在内部停止并在必要时写入然后创建新文件...一些缓冲没有松开数据...

   RTSP Source Filter ---> New MP4 Writer [ a writer with mp4 muxer in it]

但是这引入了不必要的复杂性......现在我通过新的MP4 Writer成为MUX操作的维护者......由于我没有时间真正理解Mux的作用,我必须修改 - 破解它以表现我想要的东西。比喻:我有车,我将从它制造一架直升飞机...这将是非常难看和不信任的直升机...可能我的新MP4过滤器[代码]将是如此...... [泥球大球]

1 个答案:

答案 0 :(得分:1)

听起来GMFBridge可能对您有用。它允许您创建一个源图和多个接收器图。然后,当满足约束时,将源图桥接到新的接收器图。

如果您将桥接器置于缓冲(非丢弃)模式,则不应丢失任何样本。

但是,您必须调查此解决方案是否适合您。请查看示例应用程序以获得快速概述。