• 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代码。

    开发环境搭建

    sudo apt install libmpv-dev
    
    • 1

    执行上述命令,安装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。

        mpv_set_option_string(mpv, "hwdec", "vaapi");
        mpv_set_option_string(mpv, "vo", "vaapi");
    
    • 1
    • 2

    添加完的代码如下:

        // 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");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    然后再重新编译,运行,就调用vaapi解码+vaapi显示了。
    如果要使用vdpau解码和vdpau显示,只需要把上面的vaapi改称vdpau即可。

        mpv_set_option_string(mpv, "hwdec", "vdpau");
        mpv_set_option_string(mpv, "vo", "vdpau");
    
    • 1
    • 2

    错误处理

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

  • 相关阅读:
    从原理和源码理解Vue3的响应式机制
    如何通过日志恢复被删除的数据
    fpga nvme 寄存器
    支配树🌴学习笔记
    【基础知识】什么是系统工程
    针对FTP的SSRF攻击
    证书模式支付宝支付接口demo 沙箱
    mysql基于ssm的自习室座位管理系统 毕业设计源码221118
    Tableau数据可视化与仪表盘搭建
    虚拟列表本质以及解决方式
  • 原文地址:https://blog.csdn.net/snail_hunan/article/details/137977047