我在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。
我会帮您解释图片:
灰色线表示时间。假设相机每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
。
如何在一个管道中两次控制帧速率?还有其他解决方案吗?
答案 0 :(得分:0)
使用set_property
设置/修改元素的属性。元素句柄可以使用[gst_element_factory_make][1]
获得。
rate = gst_element_factory_make("videorate","vrate")
g_object_set("rate","property-name","property-value")
当管道正在播放时,您可以根据需要设置/修改值。