我试图通过hlssink使用GStreamer-1.0从我的OSX App流式传输OpenGL帧缓冲。我的管道是
appsrc->decodebin->videoconvert->x264enc->mpegtsmux->hlssink
。问题是,Feed看起来像这样,至少有10秒的延迟。
如果你看到图片,我的桌面会有一张图片。我刚开始学习GStreamer并且对编码/复用部分不太了解。我注意到的另一件事是,即使没有编码和多路复用部分i.e.,appsrc->videoconvert->osxsink
,Feed也会像这样出现。
可能是什么问题?如何从帧缓冲区获得清晰的提要?
我应该如何解决此问题,以便在实时中流式传输,或者至少使用最小延迟?
我应该使用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吗?
答案 0 :(得分:1)
对于延迟,请考虑使用tune=zerolatency
元素的x264enc
选项。
对于appsrc,我们需要知道您输入管道的数据类型以及您在那里设置的上限。很可能你没有将它们设置为相互匹配,因此gstreamer会误解数据表示。