linux下使用qt+mpv调用GPU硬件解码

linux下GPU硬件解码接口,常用的有vdpau和vaapi。

mpv是基于mplayer开发的一个播放器。此外,mpv还提供了函数库libmpv,通过使用libmpv可以编写一个简单的播放器。

基于qt+libmpv的demo,官方例子代码如下:https://github.com/mpv-player/mpv-examples/tree/master/libmpv/qt

但是这个默认调用的是软件解码,我们需要基于这个demo稍作修改,就可以让libmpv调用GPU硬件解码VDPAU/VAAPI,下面详细介绍如何操作。

下载demo源码

源码下载

https://github.com/mpv-player/mpv-examples/archive/refs/heads/master.zip

把这个源码下载下来,这个里面有我们需要的qt+libmpv代码。

开发环境搭建

bash 复制代码
sudo apt install libmpv-dev

执行上述命令,安装libmpv-dev开发环境。

编译运行demo

把之前下载的mpv-examples解压缩,然后打开qt-creator,【文件】-》【打开文件或项目】,选择文件 ~/dev/mpv/mpv-examples-master/libmpv/qt/qtexample.pro,就可以将工程打开。

然后就是qt-creator的编译,运行,运行之后,会出现2个窗口,一个log 窗口,一个主窗口,在主窗口中,选择【File】->【Open】,然后选择一个视频,运行结果如下。
出现视频图像,结果运行成功。但是这里默认使用的是软件解码,如果要运行硬件解码,还需要添加几行代码。

添加硬件解码显示代码

在原来代码qtexample.cpp, 87行后面,添加上如下2行代码,表示硬件解码使用vaapi,视频显示使用vaapi。

c 复制代码
    mpv_set_option_string(mpv, "hwdec", "vaapi");
    mpv_set_option_string(mpv, "vo", "vaapi");

添加完的代码如下:

c 复制代码
    // Enable default bindings, because we're lazy. Normally, a player using
    // mpv as backend would implement its own key bindings.
    mpv_set_option_string(mpv, "input-default-bindings", "yes");

    // Enable keyboard input on the X11 window. For the messy details, see
    // --input-vo-keyboard on the manpage.
    mpv_set_option_string(mpv, "input-vo-keyboard", "yes");

    mpv_set_option_string(mpv, "hwdec", "vaapi");
    mpv_set_option_string(mpv, "vo", "vaapi");

然后再重新编译,运行,就调用vaapi解码+vaapi显示了。

如果要使用vdpau解码和vdpau显示,只需要把上面的vaapi改称vdpau即可。

c 复制代码
    mpv_set_option_string(mpv, "hwdec", "vdpau");
    mpv_set_option_string(mpv, "vo", "vdpau");

错误处理

假如运行出错,mpv log window 会有错误打印,根据错误打印可以排查具体问题。常见问题,可能是vdpau或者vaapi驱动没有安装。

相关推荐
酷爱码19 分钟前
在 Linux 中修改 Apache HTTP Server(httpd)默认端口的完整指南
linux·http·apache
jiunian_cn22 分钟前
【Linux】Linux权限
linux·服务器·mysql
betazhou44 分钟前
有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件
linux·数据库·mysql·oracle·mariadb
烟雨书信1 小时前
Linux中MySQL的逻辑备份与恢复
linux·运维·mysql
wkj0011 小时前
QuaggaJS 配置参数详解
java·linux·服务器·javascript·quaggajs
藥瓿亭2 小时前
K8S认证|CKS题库+答案| 5.日志审计
linux·运维·docker·云原生·容器·kubernetes·cka
coder_lorraine2 小时前
【Linux系列】Linux用户大揭秘:从“公寓住户”到“社区管理员”的奇幻之旅
linux
藥瓿锻3 小时前
2024 CKA题库+详尽解析| 15、备份还原Etcd
linux·运维·数据库·docker·容器·kubernetes·cka
bbsh20993 小时前
WebFuture:Ubuntu 系统上在线安装.NET Core 8 的步骤
linux·ubuntu·.netcore·webfuture
ZZZKKKRTSAE3 小时前
快速上手Linux全局搜索正则表达式(grep)
linux·服务器·正则表达式