【发布时间】:2021-01-05 13:48:27
【问题描述】:
我在录制屏幕时遇到问题。我可以使用 gstreamer 中的 ximagesrc 插件轻松使用 Nvidia jetson tx2 录制屏幕,但没有 x11,它使用 eglfs_kms_egldevice 集成来运行我无法捕获的 qt 窗口。我尝试使用 ffmpeg 捕获 fb0,但它能够捕获控制台,而不是在其上运行的 qt 应用程序窗口。
【问题讨论】:
标签: qt gstreamer-1.0
我在录制屏幕时遇到问题。我可以使用 gstreamer 中的 ximagesrc 插件轻松使用 Nvidia jetson tx2 录制屏幕,但没有 x11,它使用 eglfs_kms_egldevice 集成来运行我无法捕获的 qt 窗口。我尝试使用 ffmpeg 捕获 fb0,但它能够捕获控制台,而不是在其上运行的 qt 应用程序窗口。
【问题讨论】:
标签: qt gstreamer-1.0
是的,eglfs 不写信给/dev/fb0,因此从那里捕获将显示 Qt 应用程序“背后”的任何内容。 eglfs 使用 GPU,所以通过 /dev/dri/card0 和朋友来代替。根据我的研究,您有三个选择:
从 DRI/DRM/KMS 管道捕获。 ffmpeg 有 kmsgrab 输入设备来做到这一点。最简单的解决方案是ffmpeg -f kmsgrab -i - -vf 'hwdownload,format=bgr0' output.mp4。很遗憾,内容可能是乱码。
将 Qt 重定向到帧缓冲区。事实证明这会做:./my_app -platform linuxfb:fb=/dev/fb0。然后您可以使用更人性化的 ffmpeg -f fbdev -i /dev/fb0 output.mp4 来录制屏幕。不幸的是,这不会渲染任何使用 GPU 的功能,例如某些效果、动画和其他多媒体。
最后,您可以让应用使用 VNC 平台 (-platform vnc),在另一台设备上使用 VNC 客户端,并在那里记录会话。回到 Qt 4.8,您甚至可以同时指定 VNC 和 another driver。不幸的是,我不认为那是 possible any more,所以如果您出于某种原因仍需要本地显示,这不是一个很好的解决方案。
这么几个解决方案,没有一个是理想的。
【讨论】: