QtAV for ubuntu16.04

这篇具有很好参考价值的文章主要介绍了QtAV for ubuntu16.04。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

下载ubuntu

https://releases.ubuntu.com/16.04/ubuntu-16.04.7-desktop-amd64.iso

下载ffmpeg

https://ffmpeg.org/download.html

ffmpeg-6.0.tar.xz

下载QtAV

https://github.com/wang-bin/QtAV/releases

QtAV-1.12.0.zip

更新

sudo apt update

安装库

sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev

sudo apt-get install libavutil-dev libavcodec-dev libavformat-dev libswscale-dev

sudo apt-get install libopenal-dev libpulse-dev libva-dev libxv-dev libass-dev libegl1-mesa-dev

编译ffmpeg
./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg
make
sudo make install 

ffmepg可不编译

安装qt4

sudo apt install qt4-default

编译QtAV

cd QtAV-1.12.0
mkdir build
cd build
qmake ..
make

用例

untitled1.pro

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled1
TEMPLATE = app


SOURCES += main.cpp\
    playerwindow.cpp

HEADERS  += playerwindow.h


INCLUDEPATH += $$PWD/include

LIBS += -L$$PWD/lib_linux_x86_64/ -Wl,-rpath=$$PWD/lib_linux_x86_64/ -lQtAV -lQtAVWidgets

playerwindow.h 

#ifndef PLAYERWINDOW_H
#define PLAYERWINDOW_H

#include <QWidget>
#include <QtAV/VideoOutput.h>
#include <QtAV/AVPlayer.h>

QT_BEGIN_NAMESPACE
class QSlider;
class QPushButton;
QT_END_NAMESPACE
class PlayerWindow : public QWidget
{
    Q_OBJECT
public:
    explicit PlayerWindow(QWidget *parent = 0);
public Q_SLOTS:
    void openMedia();
    void seekBySlider(int value);
    void seekBySlider();
    void playPause();
private Q_SLOTS:
    void updateSlider(qint64 value);
    void updateSlider();
    void updateSliderUnit();

private:
    QtAV::VideoOutput *m_vo;
    QtAV::AVPlayer *m_player;
    QSlider *m_slider;
    QPushButton *m_openBtn;
    QPushButton *m_playBtn;
    QPushButton *m_stopBtn;
    int m_unit;
};

#endif // PLAYERWINDOW_H

playerwindow.cpp 

#include "playerwindow.h"
#include <QPushButton>
#include <QSlider>
#include <QLayout>
#include <QMessageBox>
#include <QFileDialog>

using namespace QtAV;

PlayerWindow::PlayerWindow(QWidget *parent) : QWidget(parent)
{
    m_unit = 1000;
    setWindowTitle(QString::fromLatin1("QtAV simple player example"));
    m_player = new AVPlayer(this);
    QVBoxLayout *vl = new QVBoxLayout();
    setLayout(vl);
    m_vo = new VideoOutput(this);
    if (!m_vo->widget()) {
        QMessageBox::warning(0, QString::fromLatin1("QtAV error"), tr("Can not create video renderer"));
        return;
    }
    m_player->setRenderer(m_vo);
    vl->addWidget(m_vo->widget());
    m_slider = new QSlider();
    m_slider->setOrientation(Qt::Horizontal);
    connect(m_slider, SIGNAL(sliderMoved(int)), SLOT(seekBySlider(int)));
    connect(m_slider, SIGNAL(sliderPressed()), SLOT(seekBySlider()));
    connect(m_player, SIGNAL(positionChanged(qint64)), SLOT(updateSlider(qint64)));
    connect(m_player, SIGNAL(started()), SLOT(updateSlider()));
    connect(m_player, SIGNAL(notifyIntervalChanged()), SLOT(updateSliderUnit()));

    vl->addWidget(m_slider);
    QHBoxLayout *hb = new QHBoxLayout();
    vl->addLayout(hb);
    m_openBtn = new QPushButton(tr("Open"));
    m_playBtn = new QPushButton(tr("Play/Pause"));
    m_stopBtn = new QPushButton(tr("Stop"));
    hb->addWidget(m_openBtn);
    hb->addWidget(m_playBtn);
    hb->addWidget(m_stopBtn);
    connect(m_openBtn, SIGNAL(clicked()), SLOT(openMedia()));
    connect(m_playBtn, SIGNAL(clicked()), SLOT(playPause()));
    connect(m_stopBtn, SIGNAL(clicked()), m_player, SLOT(stop()));
}

void PlayerWindow::openMedia()
{
    QString file = QFileDialog::getOpenFileName(0, tr("Open a video"));
    if (file.isEmpty())
        return;
    m_player->play(file);
}

void PlayerWindow::seekBySlider(int value)
{
    if (!m_player->isPlaying())
        return;
    m_player->seek(qint64(value*m_unit));
}

void PlayerWindow::seekBySlider()
{
    seekBySlider(m_slider->value());
}

void PlayerWindow::playPause()
{
    if (!m_player->isPlaying()) {
        m_player->play();
        return;
    }
    m_player->pause(!m_player->isPaused());
}

void PlayerWindow::updateSlider(qint64 value)
{
    m_slider->setRange(0, int(m_player->duration()/m_unit));
    m_slider->setValue(int(value/m_unit));
}

void PlayerWindow::updateSlider()
{
    updateSlider(m_player->position());
}

void PlayerWindow::updateSliderUnit()
{
    m_unit = m_player->notifyInterval();
    updateSlider();
}

main.cpp 

#include <QApplication>
#include "playerwindow.h"
#include <QtAVWidgets/global.h>

int main(int argc, char *argv[])
{
    QtAV::Widgets::registerRenderers();
    QApplication a(argc, argv);
    PlayerWindow player;
    player.show();
    player.resize(800, 600);
    return a.exec();
}

QtAV for ubuntu16.04,qt

关于demo也可以用example目录里的,这里不用QtCreator,而是直接在终端里编译;

mkdir build && cd build && qmake ../player.pro即可

首次编译会失败,生成lib_linux_文件夹,将QtAV的库拷贝到lib_linux_文件夹内

然后正常编译即可

安装显卡

ubuntu16.04安装nvidia驱动_氺月洞天的博客-CSDN博客

硬解码

按下图,用QtAV自带的Player打开视频,手动选中解码为CUDA是没办法启用硬解码的

QtAV for ubuntu16.04,qt

可以通过命令启动

./Player -vd "cuda;vaapi;vda;dxva;cedarv;ffmpeg" -f rtsp://admin:xx@xx

QtAV for ubuntu16.04,qt

命令行说明

命令行

player [-ao null] [-vo qt|gl|d2d|gdi|xv] [-vd "dxva[;cuda[;vaapi[;vda[;ffmpeg]]]]"] [--ffmpeg-log] [-f url|path|pipe:]

关闭音频 -ao null
选择渲染引擎用 -vo 选项。选项值可为qt, gl(默认), d2d, gdi, xv
选择解码器使用 -vd选项。可以是 dxva, cuda, vaapi, ffmpeg, 多个解码器用 ; 分隔表示解码器优先级。比如: 
player -vd "dxva;cuda;ffmpeg" filename
表示优先使用dxva解码,若无法解码则选择cuda硬解,再不行则使用ffmpeg软解。 
快捷键
双击: 全屏切换
Ctrl+O: 打开文件
空格: 暂停/播放
A: 切换比例
F: fullscreen on/off
T: 窗口置顶切换
N: 播放下一帧并暂停。按空格恢复持续播放
O: OSD
P: 重放
Q/ESC: 退出
S: 停止
R: 旋转90度
M: 切换静音
Up / Down: 音量 + / -
Ctrl+Up/Down: 速度 + / -
-> / <-: 前进/后退
Ctrl+滚轮: 缩放画面
可以拖动文件到播放器显示区进行播放 
更多信息请看wiki: https://github.com/wang-bin/QtAV/wiki/_pages

linux下项目打包

参考:使用linuxdeployqt在linux下进行Qt打包发布(超详细)_百里杨的博客-CSDN博客

 下载地址

Releases · probonopd/linuxdeployqt · GitHub

 QtAV for ubuntu16.04,qt

修改名称

mv linuxdeployqt-6-x86_64.AppImage linuxdeployqt


添加可执行权限

sudo chmod 777 linuxdeployqt


移到/usr/local/bin目录

sudo mv linuxdeployqt /usr/local/bin


测试是否安装成功

linuxdeployqt --version 

cz@ubuntu:~/图片/QtAV-1.12.0/examples/player/out/bin$ linuxdeployqt --version
linuxdeployqt  (commit 8428c59), build 47 built on 2023-04-23 17:29:33 UTC
cz@ubuntu:~/图片/QtAV-1.12.0/examples/player/out/bin$ 

 QtAV项目Player的项目树状结构如下:

.
├── lib
│   ├── libcommon.a
│   ├── libcommon.prl
│   ├── libQtAV.prl
│   ├── libQtAV.so
│   ├── libQtAV.so.1
│   ├── libQtAV.so.1.12
│   ├── libQtAV.so.1.12.0
│   ├── libQtAVWidgets.prl
│   ├── libQtAVWidgets.so
│   ├── libQtAVWidgets.so.1
│   ├── libQtAVWidgets.so.1.12
│   └── libQtAVWidgets.so.1.12.0
└── Player

执行命令

linuxdeployqt Player -appimage

linuxdeployqt  (commit 8428c59), build 47 built on 2023-04-23 17:29:33 UTC
Not using FHS-like mode
app-binary: "/home/cz/视频/build/Player"
appDirPath: "/home/cz/视频/build"
relativeBinPath: "Player"
ERROR: Desktop file missing, creating a default one (you will probably want to edit it)
ERROR: Icon file missing, creating a default one (you will probably want to edit it)
qmakePath 3= ""
appimagetool, continuous build (commit 8bbf694), build <local dev build> built on 2020-12-31 11:48:33 UTC
Desktop file: /home/cz/视频/build/default.desktop
Categories entry not found in desktop file
.desktop file is missing a Categories= key

得到新的目录如下

QtAV for ubuntu16.04,qt

将lib和Player打包拷贝到另一个机器上

报错如下

relocation error: /libgcrypt.so.20: symbol gpgrt get syscall clamp, version GPG ERROR 1. not defined in file libgpg-error.so.o with link time reference

删除lib/libgcrypt.so.20后正常运行

其他

 参考:Qt第三方库QtAV--- ubuntu编译与运行_那时风起的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-632110.html

到了这里,关于QtAV for ubuntu16.04的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ubuntu16.04下标定Astra相机

    1.安装相机驱动 2.下载camere_calibration 3.进行标定 打开终端,输入 打开另一个终端,输入

    2024年02月07日
    浏览(32)
  • Ubuntu 16.04——Hadoop集群安装配置

    hadoop 集群安装配置分为两个部分,一个部分是 主节点(Master) 和 从节点(Slave) ,两个部分需要完成的配置有一定的不同;总的来说,Master 所需要做的会比 Slave 会多一些。下面会演示两个部分需要做的事情;由于各台主机情况会有所不同,所以在报错的时候也会有一些的

    2024年02月02日
    浏览(41)
  • Ubuntu安装腾讯会议——Ubuntu16.04/18.04/20.04/22.04

    通过以下教程可以快速的安装腾讯会议,本教程适用于Ubuntu16.04/18.04/20.04/22.04 进入腾讯会议下载官网下载腾讯会议Linux客户端 选择x86_64格式安装包下载 双击deb文件,点击install进行安装 安装成功,可以成功运行

    2024年02月12日
    浏览(58)
  • 在Ubuntu 16.04上如何添加交换空间

    介绍 在增加服务器的响应速度并防止应用程序出现内存不足错误的最简单方法之一是添加一些交换空间。在本指南中,我们将介绍如何向 Ubuntu 16.04 服务器添加交换文件。 交换空间 是硬盘上被指定为操作系统可以临时存储无法再放入 RAM 中的数据的区域。基本上,这使您能够

    2024年04月10日
    浏览(28)
  • ubuntu16.04搭建fabric1.4

    目录 一.电脑配置 二.新建虚拟机  三.按照相关工具  1.安装git 2.安装cURL 3.安装Docker 4.安装docker-compose 5.安装Golang  6.安装NVM和NPM  四.搭建fabric 总结 VMware Workstation 16 pro :16.2.3 build-19376536 Windows10 ubuntu16.04    Ubuntu 64位 的克隆:创建好ubuntu16.04之后,立刻克隆一份,防止安装失

    2024年02月01日
    浏览(30)
  • Ubuntu官方安装微信——Ubuntu16.04/18.04/20.04/22.04

    通过以下教程可以快速的安装官方版微信,本教程适用于Ubuntu16.04/18.04/20.04/22.04 进入微信下载官网下载微信Linux客户端 点击64位下载即可,如果不能下载,使用终端如下命令 双击deb文件,点击install进行安装 安装成功,可以在菜单中点击运行

    2024年02月08日
    浏览(36)
  • Ubuntu16.04搭建Fabric1.4环境

    为了提高下载速度,将ubuntu的源改成国内的源(推荐阿里云源和清华源) apt源保存在    /etc/apt/sources.list    / 代表根目录  /etc  这个文件夹几乎放置了系统的所有配置文件 这里我用的清华源,一开始试了几次阿里云源,但是每次更新后桌面都变成了空白,只剩下终端能用

    2024年04月13日
    浏览(25)
  • 三、Docker配置指定IP(Ubuntu 16.04)

    应用场景 为了局域网内用户方便访问docker实例中服务 Docker每次重启,IP地址不会消失 1. Docker网络模式概览 说明: bridge 桥接网络 默认网络类型,容器内不特殊指定,就用此类型。不特殊指定的话,分配的ip为172.17.0.x none 无指定网络 容器内不指定局域网ip host 主机网络 和主机

    2024年02月12日
    浏览(31)
  • Ubuntu16.04 切换系统python和gcc版本

    ubuntu16.04中的gcc版本及版本切换 或者

    2024年04月12日
    浏览(28)
  • ubuntu16.04下编译安装python3.10

    1、安装依赖库 sudo apt install libffi-dev sudo apt install libgdbm-dev 2、编译安装openssl(下载最新版本源码即可) 安装完成后,建立软连接(如果可以正常运行,不需要建立): sudo ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1 sudo ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1 3、编译

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包