两次更改GStreamer管道中的帧速率

时间:2018-11-15 20:14:10

标签: gstreamer

我在GStreamer中制作管道时遇到问题。

我的管道如下所示:

gst-launch-1.0 videotestsrc is-live=true ! videorate ! video/x-raw,framerate=200/1 ! videorate max-rate=50 ! videoconvert ! x264enc bitrate=500000 byte-stream=true ! h264parse ! rtph264pay mtu=1400 ! udpsink host=127.0.0.1 port=5000 sync=false async=true

在这一点上,我正在优化应用程序的管道。因此,将有videotestsrc而不是管道中的appsrc,它从应用程序获取帧,并返回帧。每次appsrc要求输入帧时,应用程序都会返回一个。相机大约有50 FPS。

我会帮您解释图片:

enter image description here

灰色线表示时间。假设相机每20毫秒(50 FPS)发送帧(红点),appsrc每20毫秒发送一次询问,但始终要求1毫秒,直到相机产生新帧(蓝点)。这将产生19毫秒的延迟,我正尝试将其降低到最低水平。

我的想法是使用videorate ! video/x-raw,framerate=200/1,让信号源每5毫秒请求一次新帧,这意味着蓝点的速度比相机获取新帧的速度快4倍,这意味着4帧相等。在获得这些“最新”帧之后,我想(不进行编码)使用videorate max-rate=50将帧率限制回50 FPS。

问题是,我的管道在应用程序中不起作用;甚至不作为终端命令gst-launch-1.0

如何在一个管道中两次控制帧速率?还有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

使用set_property设置/修改元素的属性。元素句柄可以使用[gst_element_factory_make][1]获得。

rate = gst_element_factory_make("videorate","vrate")
g_object_set("rate","property-name","property-value")

当管道正在播放时,您可以根据需要设置/修改值。