news 2026/6/10 4:23:57

在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/6/10 0:34:10

Conda server搭建私有源:Miniconda-Python3.9企业级包管理方案

Conda Server 搭建私有源:Miniconda-Python3.9 企业级包管理实战 在现代 AI 工程与数据科学实践中,一个看似不起眼却频繁引发“生产事故”的问题浮出水面——环境不一致。你是否经历过这样的场景:同事的代码在本地运行完美,但一到…

作者头像 李华
网站建设 2026/6/9 19:48:36

求靠谱性价比高的降AI率工具推荐,经实测,这款谁用谁夸!

写论文的宝子们谁懂啊!初稿用AI辅助了下...结果维普AIGC检测率直接飙到97%,查重率也高达35%,导师一眼就看出问题,让我重改就算了,还警告说再这样可能影响答辩。为了降AI率和查重率,我前前后后试了四五款工具…

作者头像 李华
网站建设 2026/6/9 19:46:44

如何在Miniconda环境中配置PyTorch并启用CUDA加速

如何在Miniconda环境中配置PyTorch并启用CUDA加速 在深度学习项目开发中,一个常见却令人头疼的问题是:为什么同样的代码,在同事的机器上跑得飞快,而在你的环境里却慢如蜗牛,甚至报错“CUDA not available”&#xff1…

作者头像 李华
网站建设 2026/6/9 19:48:56

小脚丫FPGA项目入门

购买了一个小脚丫FPGA,型号为MX02-C,具备2000多个逻辑门,入门可用。 这款FPGA的好处是可以直接使用在线网页变成和仿真,不需要额外下载软件(一般来说FPGA软件可太大了)一、打开网页 官方网页为:…

作者头像 李华
网站建设 2026/6/9 9:07:48

GitHub Discussions社区互动:Miniconda-Python3.9建立用户交流区

构建可持续演进的开发协作生态:Miniconda-Python3.9 与 GitHub Discussions 的融合实践 在科研团队和工程小组中,你是否经历过这样的场景?一位同事兴奋地分享他刚训练成功的深度学习模型,你满怀期待地拉下代码、安装依赖&#xff…

作者头像 李华
网站建设 2026/6/9 20:06:24

什么是碰一碰发视频系统?能帮助门店链接智能芯片nfc做宣传

碰一碰发视频系统是一套基于 NFC 近场通信的门店营销工具,顾客用支持 NFC 的手机轻触门店的 NFC 立牌 / 桌贴 / 标签,即可一键打开带 POI 定位、文案与热门 BGM 的短视频模板,快速发布到抖音 / 小红书 / 大众点评等平台,实现线下触…

作者头像 李华