当前位置: 首页 > news >正文

QtAV for ubuntu16.04

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

下载ffmpeg
https://ffmpeg.org/download.html

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

更新
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 guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = untitled1
TEMPLATE = appSOURCES += main.cpp\playerwindow.cppHEADERS  += playerwindow.hINCLUDEPATH += $$PWD/includeLIBS += -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();
}

 参考:Qt第三方库QtAV--- ubuntu编译与运行_那时风起的博客-CSDN博客

相关文章:

QtAV for ubuntu16.04

下载ubuntu https://releases.ubuntu.com/16.04/ubuntu-16.04.7-desktop-amd64.iso 下载ffmpeg https://ffmpeg.org/download.html 下载QtAV https://github.com/wang-bin/QtAV/releases 更新 sudo apt update 安装库 sudo apt-get install libglu1-mesa-dev freeglut3-dev…...

MFC 文件读写包括字符串的结构体

试过CString char* 写入的都是地址 struct Param{int ID;int index;char val[128]; };vector<Param>ans; UINT count 17; ans.resize(count); FILE* fp; fopen_s(&fp,_T("my.txt"),_T("rb")); if(count ! fread(&ans[0],sizeof(Param),cou…...

在家构建您的迷你聊天Chat gpt

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 什么是指令遵循模型&#xff1f; 语言模型是机器学习模型&#xff0c;可以根据句子的前一个单词预测单词概率。如果我们向模型请求下一个单词&#xff0c;并将其递减地反馈给模型以请求更多单词&#xff…...

pytest自动化测试框架之断言

前言 断言是完整的测试用例中不可或缺的因素&#xff0c;用例只有加入断言&#xff0c;将实际结果与预期结果进行比对&#xff0c;才能判断它的通过与否。 unittest 框架提供了其特有的断言方式&#xff0c;如&#xff1a;assertEqual、assertTrue、assertIn等&#xff0c;py…...

C++模板的用法

目录 模板的概念 函数模板&#xff08;Function Templates&#xff09; 基本用法 函数模板的实例化 匹配原则 类模板&#xff08;Class Templates&#xff09; 模板的概念 C中的模板&#xff08;Templates&#xff09;实际上是一种泛型编程&#xff08;Generic Programm…...

ESP 32 蓝牙虚拟键盘链接笔记本电脑的键值问题

由于打算利用esp32 通过蓝牙链接电脑后实现一些特俗的键盘功能&#xff0c;所以就折腾了一下&#xff0c;折腾最耗费时间的却是键值问题&#xff0c;让一个20多年的老司机重新补充了知识 过程曲折就不说了&#xff0c;直接说结果。 我们通过网络搜索获取的键值和蓝牙模拟键盘传…...

128.【Maven】

Maven仓库 (一)、Maven 简介1.传统项目管理的缺点2.Maven是什么3.Maven的作用 (二)、Maven 的下载与安装1.下载与认识目录2.配置Maven的全局环境 (三)、Maven 的基础概念1.Maven 仓库(1).仓库分类 2. Maven 坐标3.Maven 本地仓库配置(1).改变默认的仓库地址(2).改变远程仓库地址…...

嵌入式虚拟仿真实验教学平台之串口发送数据

嵌入式虚拟仿真实验教学平台课程系列 串口发送数据实验 课程内容 本实验使用 STM32 的串口发送数据。开始仿真后,打开串口监视器&#xff0c;串口监视器会打印出要发送的数据。 课程目标 学习配置使用GPIO功能学习配置使用复用功能学习配置使用UART功能 硬件设计 本课程…...

Android Studio 屏幕适配

Android开发屏幕适配流程 首先studio中没有ScreenMatch这个插件的&#xff0c;下去现在这个插件 点击File->settings->Plugins->(搜索ScreenMatch插件)&#xff0c;点击下载&#xff0c;应用重启Studio即可&#xff0c;如下图 在values下 创建dimens.xml&#xff0c…...

【C++】C++11--- 线程库及详解lock_guard与unique_lock

目录 一、thread类的介绍二、线程函数参数三、 原子性操作库四、lock_guard与unique_lock4.1、mutex的种类4.2 lock_guard4.3 unique_lock 一、thread类的介绍 在C11之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;比如**windows和linux下各有自己…...

第二篇|研究数据哪里来——建筑业

数据是研究和产业发展的重要基石&#xff0c;然而无论是学者、企业还是研究机构往往都面临着“找数据难”的局面。本期将分享一些查找建筑相关的数据及资料的渠道。希望可以帮大家解决这一难题&#xff0c;有用求收藏求收藏求收藏~ 1.政府机构 可以查找国家、地方政府的建筑行…...

numpy ascontiguousarra 学习笔记

目录 numpy ascontiguousarra函数 转换命令&#xff1a; ascontiguousarray等价效果&#xff1a; ascontiguousarray学习笔记 ascontiguousarray函数将一个内存不连续存储的数组转换为内存连续存储的数组&#xff0c;使得运行速度更快。 在昇腾开发版上使用时&#xff0c;…...

【算法|双指针系列No.1】leetcode283. 移动零

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…...

PHP8定义字符串的方法-PHP8知识详解

字符串&#xff0c;顾名思义&#xff0c;就是将一堆字符串联在一起。字符串简单的定义方法是使用英文单引号&#xff08; &#xff09;或英文双引号&#xff08;" "&#xff09;包含字符。另外&#xff0c;还可以使用定界符定义字符串。本文还介绍了字符串的连接符。…...

分享21年电赛F题-智能送药小车-做题记录以及经验分享

这里写目录标题 前言一、赛题分析1、车型选择2、巡线1、OpenMv循迹2、灰度循迹 3、装载药品4、识别数字5、LED指示6、双车通信7、转向方案1、开环转向2、位置环速度环闭环串级转向3、MPU6050转向 二、调试经验分享1、循迹2、识别数字3、转向4、双车通信5、逻辑处理6、心态问题 …...

字符串统计-C语言/Java

描述 计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 &#xff0c;包括 0 和 127 )&#xff0c;换行表示结束符&#xff0c;不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次。数据范围&#xff1a; 1≤n≤500 例如&#xff0c;对于字符串 ab…...

Styled-components,另一种css in js的方案

介绍 Styled-components是一种流行的CSS-in-JS库&#xff0c;它为React和React Native应用程序提供了一种优雅的方式来管理组件的样式。它的设计理念是将CSS样式与组件逻辑紧密绑定在一起&#xff0c;从而使样式在组件层级中作用更加清晰和可维护 使用 安装Styled-components…...

nginx部署以及反向代理多域名实现HTTPS访问

nginx部署以及反向代理多域名实现 1.nginx部署 1.1 编写nginx部署文件 docker-compose.yml version: 3 services: nginx:restart: always image: nginx:1.20container_name: nginx-mainports:- 80:80- 443:443volumes: # 基础配置- /opt/nginx_main/nginx-info/nginx.conf:/…...

24届近5年东华大学自动化考研院校分析

今天给大家带来的是东华大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、东华大学 学校简介 东华大学&#xff08;Donghua University&#xff09;&#xff0c;地处上海市&#xff0c;是教育部直属全国重点大学&#xff0c;国家“双一流”、“211工程”建设高校…...

nacos伪集群启动成功,但是服务注册不上的问题

项目场景&#xff1a; nacos 伪集群启动成功&#xff0c;但是服务未注册上的问题&#xff1a; 问题描述 在学习nacos中&#xff0c;我买了一台阿里云服务器&#xff0c;在其上部署了nginx及三个nacos 端口分别是 8848 8868 8888 我按照正常的流程 解压nacos修改application.p…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...