gpt4 book ai didi

linux - 如何使用 GStreamer 和 VAAPi 解决 RAW 流播放问题

转载 作者:行者123 更新时间:2023-12-04 18:39:40 24 4
gpt4 key购买 nike

我目前在使用 GStreamer 时遇到了一个小问题,这里有更多详细信息:

配置:

  • 英特尔 i7-6700
  • 英特尔高清显卡 530
  • Ubuntu 18.04 LTS
  • GStreamer1.0
  • VAAPI 插件

  • 我收到了 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负载(左)几乎为零。

    CPU & GPU charge

    为了克服这个问题,我想使用 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
    它与开头的行相同,但我更改了元素 decodebin通过 vaapidecodebin因为我已经替换了 avdec_h264通过 vaapih264dec对于我的 H264溪流。不幸的是,它不起作用,我最终遇到了这个错误:
    WARNING: wrong pipeline: unable to connect rtpvrawdepay0 to vaapidecodebin0
    我该如何解决这个问题?你有解决这个问题的线索吗?

    最佳答案

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

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

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

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

    关于linux - 如何使用 GStreamer 和 VAAPi 解决 RAW 流播放问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60297675/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com