我目前在GStreamer上遇到了一个小问题,下面是更多的细节:
配置:
英特尔i7-6700 LTS
plugin
我从一个视频源接收到一个UDP流,这个流以RAW UYVY格式发送。下面是我的命令行来解码它:
gst-launch-1.0 -v udpsrc port="1234" caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:2, depth=(string)8, width=(string)1920, height=(string)1080, colorimetry=(string)BT709-2, payload=(int)96, ssrc=(uint)1188110121, timestamp-offset=(uint)4137478200, seqnum-offset=(uint)7257, a-framerate=(string)25" ! rtpvrawdepay ! decodebin ! queue ! videoconvert ! xvimagesink
正如我们在下面的屏幕截图中看到的那样,对于这种任务来说,CPU负载(右)太高了,我们可以看到GPU负载(左)几乎为零。

为了克服这个问题,我想使用VAAPI图形加速,就像我在前面的一个使用H264的项目中所做的那样,下面的命令行如下所示:
gst-launch-1.0 -v udpsrc port=1234 caps= "application/x-rtp, media\=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)640028, payload=(int)96, ssrc=(uint)2665415388, timestamp-offset=(uint)3571350145, seqnum-offset=(uint)18095, a-framerate=(string)25" ! rtph264depay ! queue ! vaapih264dec low-latency=1 ! autovideosink
上面的行工作得很好,而且CPU几乎没有负载。因此,我调整了这个命令行,将其与RAW流一起使用,下面是命令:
gst-launch-1.0 -v udpsrc port="1234" caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:2, depth=(string)8, width=(string)1920, height=(string)1080, colorimetry=(string)BT709-2, payload=(int)96, ssrc=(uint)1188110121, timestamp-offset=(uint)4137478200, seqnum-offset=(uint)7257, a-framerate=(string)25" ! rtpvrawdepay ! vaapidecodebin ! videoconvert ! xvimagesink
它与开始时的行相同,但我用vaapidecodebin更改了元素vaapidecodebin,就像用vaapih264dec代替avdec_h264来处理H264流一样。不幸的是,它不起作用,我最后得到了这个错误:
WARNING: wrong pipeline: unable to connect rtpvrawdepay0 to vaapidecodebin0
我怎么能解决这个问题?你有什么办法解决这个问题吗?
发布于 2020-02-19 10:57:38
你到底想在这里加速什么?CPU负载可能是由于videoconvert,因为这是在软件中运行,以便将UYVY转换为您的渲染器支持的格式(希望这是另一种YUV格式,而不是RGB格式),或者是将未压缩数据从CPU内存传输到GPU内存。
请注意,传输未压缩的图像数据比压缩H.264视频的数据速率高得多。
如果您认为videoconvert是昂贵的部分,您可能希望尝试使用OpenGL来转换和显示:.. ! glupload ! glcolorconvert ! glimagesink。
也许vaapipostproc可以帮助您进行颜色转换,如果您不想走OpenGL路线。
https://stackoverflow.com/questions/60297675
复制相似问题