如何测量Gstreamer中的过滤器处理时间?

如何测量Gstreamer中的过滤器处理时间?,gstreamer,Gstreamer,假设我有这样的管道: videotestsrc->x264enc->filesink 我想测量每帧的h264编码时间。 但由于我将来可能会更改编解码器,我不希望它是x264enc特定的。 (可能是nvenc、vaapi等) 我看到很少有人通过创建自定义过滤器来实现这一点,例如: 但是考虑到Gstreamer是为实时应用程序而优化的,我认为可能有更好的方法来实现这一点。 是否有任何内置功能用于测量每个过滤器的持续时间?编码器通常在实际编码之前将多个帧排队进行分析。因此,您无法在此处轻松测量。@F

假设我有这样的管道:
videotestsrc->x264enc->filesink

我想测量每帧的h264编码时间。
但由于我将来可能会更改编解码器,我不希望它是x264enc特定的。
(可能是nvenc、vaapi等)

我看到很少有人通过创建自定义过滤器来实现这一点,例如:

但是考虑到Gstreamer是为实时应用程序而优化的,我认为可能有更好的方法来实现这一点。

是否有任何内置功能用于测量每个过滤器的持续时间?

编码器通常在实际编码之前将多个帧排队进行分析。因此,您无法在此处轻松测量。@Florianwoch感谢您的评论。你是对的。但我注意到,当使用零延迟tune&ultrafast预设的基线配置文件(仅包含I&P帧)进行编码时,编码器通常在帧之后输出数据。我不确定是否可以用Gstreamer完成,但如果您看到Nvidia Video Codec SDK示例,它们仅通过使用编码前后函数调用之间的时间差来测量编码延迟。在某些情况下,您可以。仍然是一个编码器的效率,它喜欢做一个良好的率失真前瞻。无论如何,你仍然可以做到。查看
GstPadProbe
。当缓冲区以这种方式通过焊盘时,可以设置回调。“如果你愿意,你可以在那里进行测量。”Florianwoch说得很好,因为效率和性能之间的权衡是不可避免的,我的编码器不会做任何前瞻性的工作。无论如何,
GstPadProbe
确实是我一直在寻找的东西。再次感谢你。