当前位置: 首页 > news >正文

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再试试了。

http://www.gsyq.cn/news/1643705.html

相关文章:

  • LLaMA 2 / ChatGLM 等5款大模型位置编码对比:RoPE vs 绝对 vs 相对
  • Codex 使用额度不够怎么办?Credits、ChatGPT Pro 应该怎么选(2026)
  • 2026年建筑动画行业观察
  • 【OpenHarmony/HarmonyOs 】数学学习报告页:本地统计卡片、正确率与隐私友好学习画像
  • 3步搞定FanControl:Windows风扇智能控制的终极指南
  • LTI 系统因果性与稳定性:从 2 个示例到 5 种常见系统类型的判断法则
  • 深度剖析OnmyojiAutoScript:现代化阴阳师自动化框架技术架构演进
  • 为什么博容安可SOS功能仅限中国大陆?海外留学生选购防身警报器避坑指南
  • 国内EMBA偏向哪些行业?2026综合实力TOP5榜单评测
  • 百度网盘怎么免费满速下载?2026超详细保姆级教程,支持批量下载
  • 【OpenHarmony/HarmonyOs 】每日学习目标系统:todayCount、连续学习与本地激励反馈
  • 【claude code实践】 如何让 Claude Code 理解你的项目结构
  • AI语音机器人好用吗?千创云呼凭什么让快递物流通知效率翻倍还省钱?
  • 终极指南:零成本将安卓设备改造为Armbian服务器系统
  • 官网别只在电脑上看好看:说说移动端这些容易翻车的地方
  • Halcon 标定板像素当量标定:单图法 vs 多图法,3种场景精度对比实测
  • 2026最新2款AI编程工具免费深度对比|中文开发平替权威实测合集
  • 基于STM32单片机的交通灯系统/智能红绿灯信号灯 单片机检测系统2143(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 我用开源栈复刻了一个“科研 Agent“:29 个技能、24 个 MCP 服务、一个有状态的内核——全都可复用
  • 编译优化技术与代码执行效率提升
  • 3种AI辅助英语学习工具对比:基于《True Height》原文的词汇提取与记忆效率评测
  • 2026年企业电话机器人值不值得投?从选型、成本到合规的全景式拆解
  • 大模型评测与AI产品质量保障:第21篇 传统基准测试实战(二):GSM8K、MATH 与 TruthfulQA
  • 存储器扩展设计:从1K×4到32K×16的3种位/字扩展方案全解析
  • 大数据在校实训项目一般做什么?
  • 企业 Agent 权限映射:角色不是简单复制组织架构
  • 28、<简单>歌德巴赫猜想
  • HTML的invokers实现命令式交互绑定
  • AI设计芯片从论文走进现实:开源平台、强化学习与9个月流片的背后
  • 深入理解Go语言内存模型与优化