news 2026/4/15 11:24:59

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在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 / 多线程场景长期稳定

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

Anaconda prompt启动慢:Miniconda-Python3.9无GUI更快响应

Miniconda-Python3.9:告别 Anaconda Prompt 启动延迟的轻量级实践 在数据科学与 AI 开发中,你是否曾经历过这样的场景:双击“Anaconda Prompt”,然后盯着黑窗口卡顿数秒甚至十几秒,才终于看到命令行光标闪烁&#xff1…

作者头像 李华
网站建设 2026/3/26 23:46:11

Docker Logs查看输出:Miniconda-Python3.9追踪启动信息

Docker Logs查看输出:Miniconda-Python3.9追踪启动信息 在AI与数据科学项目日益复杂的今天,一个常见的痛点是:代码在本地运行完美,但换到同事机器或生产环境却“无法复现”。这种“在我电脑上明明能跑”的尴尬,往往源于…

作者头像 李华
网站建设 2026/4/11 15:50:47

使用Miniconda-Python3.9快速启动GitHub上的PyTorch项目

使用 Miniconda-Python3.9 快速启动 GitHub 上的 PyTorch 项目 在深度学习项目开发中,最让人头疼的往往不是模型设计或训练调参,而是——“环境配不起来”。你是否经历过这样的场景:从 GitHub 克隆了一个热门 PyTorch 项目,兴冲冲…

作者头像 李华
网站建设 2026/3/27 13:53:12

Conda search查找包信息:Miniconda-Python3.9查询最新版本

Conda search查找包信息:Miniconda-Python3.9查询最新版本 在数据科学、AI研发和现代软件工程的日常实践中,一个看似简单却频繁出现的需求是:如何快速确认某个Python包在当前环境中是否存在可用版本?是否支持Python 3.9&#xff1…

作者头像 李华
网站建设 2026/4/13 3:08:25

GitHub Wiki文档编写:Miniconda-Python3.9生成技术知识库

GitHub Wiki文档编写:Miniconda-Python3.9生成技术知识库 在人工智能项目日益复杂的今天,一个常见的痛点是:“代码在我机器上能跑,为什么换台设备就报错?” 更令人头疼的是,新成员加入团队后,光…

作者头像 李华
网站建设 2026/4/8 6:19:24

PyTorch安装混合精度训练:Miniconda-Python3.9支持AMP模块

PyTorch混合精度训练环境搭建:基于Miniconda-Python3.9的实践指南 在深度学习模型日益庞大的今天,一个常见的困境是:哪怕只是稍微增加一点batch size,GPU显存立刻爆满;而为了复现论文结果,团队成员却总在抱…

作者头像 李华