Linux 开发Qt视频播放器遇到的坑

Ubuntu下编译程序提示缺失decoder

错误信息提示

Warning: "No decoder available for type 'video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)3, profile=(string)high, codec_data=(buffer)0164001effe100196764001eacd940c037b0110000030001000003003c0f162d9601000668ebe2cb22c0, max-input-size=(int)36046, width=(int)768, height=(int)432, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, parsed=(boolean)true'."

也就是说缺失视频解码器,造成只有视频播放界面,不能正常播放视频的情况

解决方案

先更新一下源,再安装gstreamer流媒体框架即可

sudo apt-get update
sudo apt-get install gstreamer1.0-libav

最后成功播放视频

scp命令出错

错误信息提示

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
即警告:远程主机标识已更改!

解决方案

移除连接使用的ip地址即可

ssh-keygen -R ipaddr

再次重新执行scp命令即可

嵌入式Qt平台运行可执行文件报错

错误信息提示

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'

解决方案

vi /etc/profile

# 文件末尾写入两句话
export XDG_RUNTIME_DIR=/usr/lib/
export RUNLEVEL=3

#使能环境变量
source /etc/profile

#最后重新运行可执行文件

找不到.so动态库

错误信息及分析

error while loading shared libraries: libpulse.so.0: cannot open shared object file: No such file or directory

提示找不到libpulse.so.0动态库,不妨用ldd命令查看一下少了哪些动态库
如何使用在开发板上使用ldd命令详见 Arm开发板上使用ldd命令

ldd 可执行文件

在这里插入图片描述
可以看到 libpulse.so.0 => not found 这行报错信息

解决方案

使用scp命令将libpulse.so.0 这个库复制到 /usr/lib 目录下即可

棘手的问题

动态库缺失的问题解决之后,运行我的Qt视频播放器,结果提示

defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer"

提示找不到"org.qt-project.qt.mediaplayer"这样一个服务

运行结果就是lcd屏幕上出现的只有播放器的框架和背景,但是没有声音和画面

查阅的一些解决方案

解决QT no service found for – org.qt-project.qt.mediaplayer问题

总结一下:QT的MultiMedia依赖于Gstreamer,所以要交叉编译Gstreamer

然后再将MultiMedia添加进QT配置,接着交叉编译QT,编译好之后的QT的plugins目录下要有文中提到的库文件

交叉编译Gstreamer的方法,码一下 Qt5.9.7交叉编译gstreamer

结果

交叉编译Gstreamer本体已经成功,详见个人博客 arm-linux交叉编译Gstreamer

但是添加Gstreamer进QT配置,再重新编译QT失败,未能生成相关媒体库

QT官方给的一些说明如下

在这里插入图片描述
也就是说要有Qt Multimedia,还需要交叉编译Gstreamer的其他版本,如base good bad ugly,否则光有本体base还是没用

后续等有空再研究如何编译完整的Gstreamer吧,应该能解决这个问题

报错问题

错误信息

xilinx-video amba_pl:xlnx_vipp: dma_alloc_coherent of size 0 failed

大概意思就是分配内存失败了,尚不清楚这是什么信息。应该是没找到相关媒体和设备。
因为在后续的v4l2编程中也遇到过类似报错,排查错误原因就在于找不到相关设备,导致分配0内存

写在最后

仅仅做个记录,有空再解决吧,QT播放视频有其他的方案

猜你喜欢

转载自blog.csdn.net/qq_41873311/article/details/124726279