Gstreamer 缓冲区点

Gstreamer buffer pts

我有一个简单的 mjpeg 管道,我想访问接收器上的缓冲区以获得 pts 来计算延迟。

管道: souphttpsrc -> jpegparse -> imxvpudec -> imxipusink

最好的方法是什么?一些代码示例会很棒。 gstreamer 中的时间问题让我有些困惑。

我会在您要分析 PTS 的管道中添加一个身份元素:

souphttpsrc ! jpegparse ! identity ! imxvpudec ! imxipusink

然后连接到"handoff"信号:

static void pts_analysis_cb(GstElement *identity, 
                            GstBuffer *buffer,
                            gpointer user_data) {
   GstClockTime pts = GST_BUFFER_PTS(buffer);
   //analysis
}

g_signal_connect_data(identity, "handoff", 
                      G_CALLBACK(pts_analysis_cb), 
                      NULL, NULL, GConnectFlags());

如果您看到与 MJPEG 相关的延迟,尽管您可能只需要在尾部元素上设置 sync=false 或设置标志以在它落后时删除缓冲区。