news 2026/7/6 1:34:47

QGC V5.0 gstreamer视频流在安卓端画面卡顿、冻结,硬件解码失败的问题解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QGC V5.0 gstreamer视频流在安卓端画面卡顿、冻结,硬件解码失败的问题解决方案

主要原因

1.低端设备CPU软件解码性能不足

2.硬件解码着色器未嵌入,导致硬件解码失败回退软解

3.gstreamer的gl上下文丢失导致画面冻结

解决方法

一、启用硬件解码

我使用的gstreamer版本是1.26.2,直接更改findgstreamer中的版本似乎会报错。

硬件解码器(MediaCodec/AMC)输出的视频帧是 GL_TEXTURE_EXTERNAL_OES 纹理,需要专用的 GLSL 着色器变体,使用 samplerExternalOES采样器。

GStreamer 上游提供两个着色器变体:

纹理类型采样器.qsb 文件解码方式
GL_TEXTURE_2Dsampler2DRGBA.frag.qsb软解
GL_TEXTURE_EXTERNAL_OESsamplerExternalOESRGBA.frag.qsb.external硬解(安卓)
运行时选择逻辑在 `gstqsg6material.cc:284-287`: ```cpp if (target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) frag_shader = ":/org/freedesktop/gstreamer/qml6/RGBA.frag.qsb.external"; else frag_shader = ":/org/freedesktop/gstreamer/qml6/RGBA.frag.qsb";

RGBA.frag.qsb.external` 由独立的 `add_custom_command` + `qsb-wrapper.py` 生成,若该脚本没被成功调用将导致qsb文件嵌入失败,进而导致无法使用硬件解码。

二、禁用零拷贝

我在使用gstreamer1.26.2时发现,在云卓g12运行硬件解码RTSP视频流时发现画面时不时就会冻结,毫无规律可言,正常解码时非常流程,解码高码率的三四路视频流都没问题,但就是会不时出现视频画面冻结的现象,哪怕我加了探测针,检测画面管道停止流动时就重启视频流仍然没用解决,探针始终判断视频在正常解码,然后我用adb查看了渲染端的日志发现:amcvideodec...gl_sync... Failed to render buffer渲染缓冲区失败

说明这根本不是解码问题,而是渲染问题,我丢给claude,它在网上搜索到了相关内容,

“这是一个已知的 GStreamer 缺陷,搜索结果验证了这一点。您的解码器是amcvideodec-omxqcomvideodecoderhevc(高通硬件 HEVC,走零拷贝 GL 路径)。该故障与gst-plugins-bad的 issue #1193 和 #1216 相符:在 RTSP 断连时,编解码器被停止,而 GL 线程仍处于释放缓冲区的过程中,on_frame_available回调被遗漏,导致SurfaceTexture↔ GL 同步卡死。由于该状态残留在 Android Surface/解码器的 GL 层中,因此重启管道也无法清除。上游官方推荐的规避方案是禁用零拷贝 GL 路径(强制解码器输出video/x-raw系统内存格式,让视频接收器(sink)正常上传纹理)——这样就能完全剔除有问题的gl_sync/SurfaceTexture 路径。”

最后测试结果就是测试多路视频流同时解码画面正常不卡顿且不再冻结。

最后

该问题据说是在GStreamer 1.7.1中出现的,且在2025年时gstreamer官方以及将该问题设置未已解决,但时至今日,gstreamer1.26.2中仍然能够复现,我不明白是为什么,更深层次的原因和更根本的解决方案我也不知道,后续我还会测试其他版本的gstreamer,若是实在不行我就换成FFMpeg再试试了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 1:33:03

144、结构化输出:JSON Mode、Function Calling、Grammars 三种方案对比

144、结构化输出:JSON Mode、Function Calling、Grammars 三种方案对比 从一次凌晨三点的事故说起 凌晨三点,生产告警炸了。用户上传的简历解析结果里,大模型返回的JSON字段skills变成了"Python, Java, Go"——一个字符串,而不是我们约定的数组。下游的数据库插…

作者头像 李华
网站建设 2026/7/6 1:30:51

Java Swing贪吃蛇游戏完整实现(MVC架构+MySQL排行榜+音效系统)

## 一、项目简介这是一个基于 **Java Swing** 开发的经典贪吃蛇游戏,采用 **MVC架构** 设计,支持三种难度选择、MySQL排行榜存储、音效系统和多线程优化。该项目适合Java初学者学习GUI开发、设计模式和数据库操作。## 二、功能特性- 🎮 **完整…

作者头像 李华
网站建设 2026/7/6 1:28:57

基于51单片机的超声波智能垃圾桶控制系统红外感应自动手动嵌入式143(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于51单片机的超声波智能垃圾桶控制系统红外感应自动手动嵌入式143(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 步进电机版本功能说明: LCD1602液晶显示当前垃圾满溢程度和当前电机状态超声波检测当前垃圾满溢…

作者头像 李华
网站建设 2026/7/6 1:27:34

LLaMA 2 / ChatGLM 等5款大模型位置编码对比:RoPE vs 绝对 vs 相对

LLaMA 2与ChatGLM等5款大模型位置编码技术深度解析:RoPE vs 绝对 vs 相对位置编码1. 位置编码:大语言模型的时空坐标系统当Transformer架构在2017年横空出世时,它带来了一种全新的序列建模范式——完全基于自注意力机制的并行计算架构。但这也…

作者头像 李华
网站建设 2026/7/6 1:26:44

大模型学习率

大模型的学习率(Learning Rate)是控制模型参数更新‌步长‌的核心超参数,直接决定训练能否收敛及最终性能 。 核心定义 ‌本质‌:在梯度下降优化中,梯度指出“往哪改”,学习率决定“改多少”。公式为&…

作者头像 李华