前言
基于之前的实验测试工作,录屏最好解决方式是用设备缓存的方法关掉gpu加速录制。这种方法还有有不能避免的问题就是不能同时输出hdmi,必须重启wayland服务。与开始的设计不服,另外寻找解决方案。前期录屏方案
与qmlglsink元件类似从opengl缓存中去读数据,与gldownload元件组合使用。按道理应该能像glupload+qmlglsink元件一样工作。用opengl缓存数据作为源然后生成视频文件。其中qt quick的qml技术正式将所有控件统一渲染到opengl中,所以有两个Item同时作为opengl源刷新时会卡。参考之前的几篇blogs。
qmlglsrc需要数据源是GL的内存,qml渲染好的opengl数据可能不在GL内存中,所以流生成的视频文件始终为0,没有数据。多次实验后无效,考虑其他解决方法。
qmlglsrc元件的srcpads:
Pad Templates:
SRC template: ‘src‘
Availability: Always
Capabilities:
video/x-raw(memory:GLMemory)
format: RGBA
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
texture-target: 2D
这种方法开始在开发板上由于gst公共库lib的断言判断不予许物理地址的内存映射两次,修改gst公共库libXXX后,这种方案可行。
通过以上方法录屏可以在appsink中提取Buffer修改后在push-buffer到appsrc,达到修改图像的效果。
原文:https://www.cnblogs.com/wuya178/p/14541317.html