首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用GStreamer和VAAPi解决原始流回放问题

如何用GStreamer和VAAPi解决原始流回放问题
EN

Stack Overflow用户
提问于 2020-02-19 10:03:19
回答 1查看 785关注 0票数 1

我目前在GStreamer上遇到了一个小问题,下面是更多的细节:

配置:

英特尔i7-6700 LTS

  • GStreamer1.0

  • VAAPI

  • Intel HD Graphics 530

  • Ubuntu 18.04

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

我怎么能解决这个问题?你有什么办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 10:57:38

你到底想在这里加速什么?CPU负载可能是由于videoconvert,因为这是在软件中运行,以便将UYVY转换为您的渲染器支持的格式(希望这是另一种YUV格式,而不是RGB格式),或者是将未压缩数据从CPU内存传输到GPU内存。

请注意,传输未压缩的图像数据比压缩H.264视频的数据速率高得多。

如果您认为videoconvert是昂贵的部分,您可能希望尝试使用OpenGL来转换和显示:.. ! glupload ! glcolorconvert ! glimagesink

也许vaapipostproc可以帮助您进行颜色转换,如果您不想走OpenGL路线。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60297675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档