Gstreamer appsrc 流式传输 OpenGL 帧缓冲区

Gstreamer appsrc to stream OpenGL framebuffer

我正在尝试通过 hlssink 使用 GStreamer-1.0 从我的 OSX 应用流式传输 OpenGL 帧缓冲区。我的管道是 appsrc->decodebin->videoconvert->x264enc->mpegtsmux->hlssink。问题是,提要是这样显示的,至少有 10 秒的延迟。

如果你看到图片,那是我桌面的包装图片。我刚开始学习 GStreamer,对 encoding/muxing 部分不太了解。我注意到的另一件事是,即使没有编码和多路复用部分 i.e.,appsrc->videoconvert->osxsink,提要也是这样显示的。

可能是什么问题?如何从帧缓冲区获取清晰的提要?

我应该如何解决这个问题,以便在 实时 或至少 最小延迟 下进行流式传输?

我应该使用 tcpserversink 而不是 hlssink 来减少延迟吗?

我正在将 GStreamer 与我的 OSX 应用程序集成,后者为 appsrc 生成源缓冲区。我的最终目标是通过 http / tcp 流式传输实时提要。

我已经为此工作了两个星期,很有可能我遗漏了一些非常基本的东西,所以请随时发表您的意见。如果有人需要更多信息或源代码,请告诉我。

编辑:

这是我为 appsrc 设置的上限。

caps = gst_caps_new_simple ("video/x-raw",
                            "width", G_TYPE_INT, 1280,
                            "height", G_TYPE_INT, 800,
                            "format", G_TYPE_STRING, "RGB16", NULL);

输入的数据类型是来自帧缓冲区的原始数据。这是 mac 的屏幕投射应用程序。

如果我进行实时屏幕投射,hlssink 是否是正确的选择?我应该试试 tcpserversink 吗?

对于延迟,请考虑对 x264enc 元素使用 tune=zerolatency 选项。

对于 appsrc,我们需要知道您将哪种数据输入管道以及您在那里设置的上限。很可能您没有将它们设置为相互匹配,因此 gstreamer 会误解数据表示。