GStreamer 预录

GStreamer pre-recording

我正在尝试实现预录 我使用20秒的共享内存作为循环缓冲区。 我使用共享内存作为循环缓冲区,在其中永久记录视频。 当事件发生时,我想将整个缓冲区写入文件,然后录制40秒的视频。

如何立即从共享内存中编码视频并写入文件,然后继续从内存中写入文件一段时间?

您可以要求 gstreamer 队列按如下方式进行预缓冲:

g_object_set (G_OBJECT (queue), "max-size-bytes", 0, NULL);
g_object_set (G_OBJECT (queue), "max-size-buffers", 0, NULL);
g_object_set (G_OBJECT (queue),
          "max-size-time", (guint64)threshold_time,
          NULL);
/* Drop old buffers when max-size-time is reached */
g_object_set (G_OBJECT (queue), "leaky", 2, NULL);

在队列的衬垫上安装回调:

gst_pad_add_probe(pad, GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BLOCK,
                   (GstPadProbeCallback) callback, NULL, NULL);

当您不想在回调中传递缓冲区时 return GST_PAD_PROBE_DROP,以及当您想要传递缓冲区时 return GST_PAD_PROBE_PASS

管道如下:

appsrc-- > queue --> encode --> mux --> filesink