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

在Arm架构的ubuntu中,使用qt qmediaplayer播放视频报错Warning: “No decoder available for type ‘video/mpeg...

1、前言

在一次Qt项目开发过程中,Arm架构的ubuntu环境下,使用qt qmediaplayer播放视频报错Warning: "No decoder available for type 'video/mpeg..,经过长时间的排查,最终找到问题所在,最终解决问题。

2、现象

在Qt中使用qmediaplayer播放MP4,avi,mkv等视频时,视频无法播放并出现类似如下报错

Warning: "No decoder available for type 'video/x-h264, stream-format=(string)avc, alignment=(string)au, codec_data=(buffer)0164002affe1001a6764002aac2c6a81e0089f966e0202028000000300800000194201000468ee3cb0, level=(string)4.2, profile=(string)high'."

Warning: "No decoder available for type 'audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)48000, channels=(int)2, parsed=(boolean)true'."

使用系统自带的Video播放器,也无法播放视频

3、问题原因与解决方法

①没有安装gstreamer1.0-libav

Qt 5.12 的 QMediaPlayer 在 Linux/ARM 上依赖 GStreamer,而当前系统的 GStreamer 没有可用的 MPEG-4 (video/mpeg, mpegversion=4) 解码器插件。

解决方法:

在终端中进行以下安装

# 更新软件源

sudo apt update

# 安装基础的GStreamer插件(ARM架构)

sudo apt install -y gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly

# 安装MP4/H.264解码关键插件

sudo apt install -y gstreamer1.0-libav gstreamer1.0-vaapi

# 安装Qt5与GStreamer的桥接组件

sudo apt install -y libqt5multimedia5-plugins qtmultimedia5-dev

注:以上安装完成后,基本可以解决90%的问题,记得最好将QtCreator重启一下

②安装以上插件后依旧无法播放

使用GStreamer命令行工具进行测试

这是为了绕过Qt,直接测试系统层的GStreamer能否播放。请将/path/to/your/video.mp4替换为您的视频文件绝对路径

gst-launch-1.0 playbin uri=file:///path/to/your/video.mp4
  • 如果报同样的插件错误:说明是系统层的GStreamer插件确实缺失或未正确安装。即使安装了gstreamer1.0-libav,也可能存在架构兼容性问题。可以尝试彻底重装:

sudo apt reinstall -y gstreamer1.0-libav
  • 如果成功播放:说明GStreamer已经安装了gstreamer1.0-libav,但是无法确保能够找到解码器MPEG-4 (video/mpeg, mpegversion=4) 解码器,可以通过一下命令验证是否能够找到解码器。

gst-inspect-1.0 avdec_mpeg4

正常应该看到类似:

Factory Details:
Rank primary
Long-name libav MPEG-4 decoder

如果能够看到,说明能够找到解码器,即可重新尝试qt播放视频

===================================================================

如果看不到类似打印,说明能识别 MPEG-4 流,但不能解码,这正是 QMediaPlayer 报No decoder available的原因

如输入以下命令后:

gst-inspect-1.0 avdec_mpeg4

出现以下结果:

No such element or plugin

接下来进行

第1步:确认 gst-inspect 用的是哪一套

which gst-inspect-1.0

正常系统应是:

/usr/bin/gst-inspect-1.0


第2步:确认 libav 插件真实存在

ls /usr/lib/aarch64-linux-gnu/gstreamer-1.0/ | grep libav

正常一定会看到:

libgstlibav.so

第3步:让 GStreamer“说实话”

GST_DEBUG=3 gst-inspect-1.0 avdec_mpeg4

如果你看到类似:

no such element skipping plugin ... libgstlibav.so

或根本没提 libgstlibav 说明插件根本没被扫描到

第四步:验证libgstlibav是否缺少库

ldd /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstlibav.so

如果出现以下打印,说明缺少FFmpeg 运行库

libavcodec.so.58 => not found
libavutil.so.56 => not found
libswresample.so.3 => not found

可以使用以下命令尝试补全

sudo apt install \ libavcodec58 \ libavutil56 \ libswresample3 \ libavformat58

补全后,使用以下命令删除gstreamer的注册文件后重新扫描插件

rm -f ~/.cache/gstreamer-1.0/registry.aarch64.bin
gst-inspect-1.0 avdec_mpeg4

如果出现以下打印,说明能够找到解码器,即可重新尝试qt播放视频

Factory Details:
Long-name: libav MPEG-4 decoder
Klass: Decoder/Video
Description: Decode MPEG-4 video streams

=====================================================================

如果出现以下提示

(gst-plugin-scanner:155541): GStreamer-WARNING **: 09:56:26.267: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstchromaprint.so': /usr/lib/aarch64-linux-gnu/libgomp.so.1: cannot allocate memory in static TLS block

(gst-plugin-scanner:155541): GStreamer-WARNING **: 09:56:26.634: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstlibav.so': /usr/lib/aarch64-linux-gnu/libgomp.so.1: cannot allocate memory in static TLS block

No such element or plugin 'avdec_mpeg4'

则说明最终找到了问题原因:

libgomp.so.1: cannot allocate memory in static TLS block

并且它同时导致

  • libgstlibav.so加载失败

  • libgstchromaprint.so加载失败

  • avdec_mpeg4永远注册不了

👉这不是插件缺失,也不是 FFmpeg 不全,而是 ARM 平台上的“静态 TLS 槽位耗尽”问题。

解决方法:通过预加载 libgomp,有时可以“挤出” TLS 槽位:

export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1 ​ rm -f ~/.cache/gstreamer-1.0/registry.aarch64.bin gst-inspect-1.0 avdec_mpeg4

如果成功:

  • avdec_mpeg4会出现

  • 但这是 Hack

  • 不保证 Qt / 多线程场景长期稳定

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

相关文章:

  • Anaconda prompt启动慢:Miniconda-Python3.9无GUI更快响应
  • Markdown PlantUML类图生成:Miniconda-Python3.9绘制架构图
  • Miniconda-Python3.9 + PyTorch:最适合论文复现的技术组合
  • Pyenv versions查看已安装:Miniconda-Python3.9列出可用版本
  • python基于Vue的远程就医专家挂号预约系统 _4b2uo_django Flask pycharm项目
  • 2025-2026年这家环境监测与水质分析设备厂家实力“出圈” - 品牌推荐大师1
  • PyTorch安装分布式RPC:Miniconda-Python3.9支持跨节点通信
  • 2026最新实验台、通风柜、实验室装修、实验室规划设计厂家推荐:迅领实验室引领行业新标准 - 深度智识库
  • 2026游泳馆等美团自助核销接口教程,赶紧收藏起来
  • 衣物隐喻下的生命缝合:目前最先进的哲学理论《升命学说》,论“唯悟”作为世界的针线
  • 使用MATLAB的k-Wave工具箱进行超声CT成像
  • 游泳馆支持美团核销接口,小程序一键接入
  • 使用Miniconda管理多个PyTorch版本的正确姿势
  • 将Jupyter Notebook嵌入Miniconda-Python3.9环境的最佳实践
  • MBA必看!9个降AI率工具高效避坑指南
  • Docker Load加载镜像:Miniconda-Python3.9导入本地tar文件
  • CUDA零拷贝内存Zero-Copy:Miniconda-Python3.9减少数据传输延迟
  • Docker Volumes数据持久化:Miniconda-Python3.9保存模型权重
  • Anaconda下载缓慢解决办法:Miniconda-Python3.9提供精简安装包
  • 全域深耕效能决胜——2026年GEO优化服务商甄选指南 - 品牌推荐排行榜
  • PyTorch安装后import报错?Miniconda-Python3.9预检LD_LIBRARY_PATH
  • 渗透测试|某单位从敏感三要素泄露到接管管理员的漏洞挖掘之旅,黑客技术零基础入门到精通实战教程!
  • GitHub Discussions社区互动:Miniconda-Python3.9建立用户交流区
  • 如何选择汽车制造数字化服务商?关键指标与实战案例解析
  • 2026优质花岗岩四爪磨头品牌解析与推荐,故障率低、寿命长的花岗岩磨头选择指南 - 工业企业赋能社
  • 深耕打火机赛道,引领产业新升级——2025打火机生产线行业剖析及优质厂家推荐 - 品牌推荐大师1
  • CUDA安装检测脚本分享:Miniconda-Python3.9自带nvidia-smi集成
  • 成都交流直流充电桩生产厂家哪家口碑好?求直销厂家推荐 - 朴素的承诺
  • 通过AWS Transfer Family集成Active Directory实现安全SFTP文件访问
  • PyTorch安装TorchScript编译:Miniconda-Python3.9提升推理性能