【问题标题】:Gstreamer video latency first imageGstreamer 视频延迟第一张图片
【发布时间】:2022-02-02 07:06:40
【问题描述】:

我采用了 gstreamer link 的示例 4 并适应从相机接收视频流 rtsp。我添加了这些更改:

  g_object_set(data->pipeline,"latency",0,NULL);
  g_object_set(data->pipeline,"autovideosink", NULL);
  g_object_set (data->pipeline, "ring-buffer-max-size", (guint64) 1024 * 50, NULL);

在文件 tutorial-4.c 中的函数 gst_native_set_uri 以减少视频延迟。 我的问题是,当我按下开始按钮时,第一次观看视频流时我必须等待 2-3 秒。有办法减少这个时间吗?

谢谢

【问题讨论】:

  • 我在您提供的链接中看不到任何文件 tutorial-4.c(似乎是 java 代码)。可能您的问题是您将属性设置为管道而不是其插件。 latency 是 rtpjitterbuffer 或 rtspsrc 的属性。 autovideosink 是一个插件,不知道有没有这样的插件。
  • 你试过这个吗?请考虑到我已经花了一些时间来帮助您,因为您已公开寻求帮助,因此欢迎提供任何反馈。

标签: video gstreamer rtsp latency gstreamer-1.0


【解决方案1】:

您可以尝试在 app_function 之前添加这个回调函数:

static void source_setup (GstElement *pipeline, GstElement *source, void* unused_data) {
    gchar* source_path = gst_object_get_path_string(GST_OBJECT_CAST(source));
    if (!strcmp(source_path, "/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstRTSPSrc:source")) {
        g_object_set(GST_OBJECT_CAST(source), "latency", 0, NULL);
    }
    g_free(source_path);
}

并且在 app_function 中,在创建管道之后添加:

g_signal_connect (data->pipeline, "source-setup", G_CALLBACK (source_setup), NULL);

创建源时,如果路径匹配 playbin0/uridecodebin0/rtspsrc0,则此回调会将其延迟设置为 0,这对于您的情况应该没问题。不过,这可能会针对更复杂的情况进行改进。未使用 java 测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多