QtAV视频播放器的介绍、编译以及简单使用
背景
简介
QtAV是基于Qt和FFmpeg的多媒体播放库。它可以帮助您以前所未有的精力编写播放器。
强大的功能
QtAV可以满足您的最大需求
- 硬件解码支持:DXVA2,VAAPI,VDA / VideoToolbox,CedarX,CUDA(第一个播放器在Linux上支持CUDA吗?)
- OpenGL和ES2支持几乎所有格式,包括Hi10P视频(第一个播放器/库在ES2中支持10bit?VLC,XBMC,mplayer现在不支持)
- 实时预览
- RGB和YUV格式的视频捕获
- OSD和自定义过滤器
- libavfilter中的过滤器,例如stero3d,模糊
- 字幕轨道选择。动态更改FFmpeg和libass引擎
- 逐帧播放
- 播放速度控制
- 各种流:区域设置文件,http,rtsp等以及您的自定义流
- 音频通道,轨道和外部音频轨道
- 播放时动态更改渲染引擎。
- 动态更改视频解码器
- 1个播放器的多个视频输出
- 视频均衡器(软件和OpenGL):亮度,对比度,饱和度,色相
- QML支持。大多数播放API与QtMultimedia模块兼容
- 兼容性:QtAV可以同时使用Qt4和Qt5,FFmpeg(> = 1.0)和Libav(> = 9.0)来构建。建议使用最新的FFmpeg版本。
QtAV的编译
以下是我在windows平台使用的过程,其它平台的还没有验证过
前期准备
- 下载QtAV源码
git clone https://github.com/wang-bin/QtAV.git
cd QtAV && git submodule update --init
- 下载FFmpeg
您可以下载最新的预构建FFmpeg,也可以自己构建。
对于Windows,请下载http://sourceforge.net/projects/qtav/files/depends/QtAV-depends-windows-x86%2Bx64.7z/download,并且bin, include, lib在软件包中使用就可以构建。
目前我是windows下面构建的,所以直接选择的下载上面这个软件包。
环境设置
你必须让编译器知道FFmpeg的头文件和库所在的位置,否则待会儿编译QTAV的时候会因为找不到对应的库文件而报错。
软件包下载的文件解压后如下图所示

将对应的头和库文件放入到Qt目录
以Windows为例,Qt安装在中C:\workSpace\Qt\Qt5.10.0\5.10.0\mingw53_32。转到该目录,然后将ffmpeg标头放置到include\,将库放置到lib



加载QTAV工程并且编译
编译完成文件夹如下:

双击sdk_install.bat,会自动拷贝编译完成的文件到qt文件夹内

到目前为止已经完成qtav相关的所有工作了。
QT工程中简单调用QTAV相关库
- pro文件中引入avwidgets

- 代码中引入相应的头文件
#include <QtAV>
#include <QtAVWidgets>
请确保在使用渲染器前调用QtAV::Widgets::registerRenderers()
- 具体的示例工程如下,最简单的调用
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtAV>
#include <QtAVWidgets>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QtAV::VideoOutput *m_vo;
QtAV::AVPlayer *m_player;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QtAV::Widgets::registerRenderers();
m_player = new QtAV::AVPlayer(this);
m_vo = new QtAV::VideoOutput(this);
m_player->setRenderer(m_vo);
setCentralWidget(m_vo->widget());
connect(ui->actionOpen_O, &QAction::triggered, [this]{
QString file = QFileDialog::getOpenFileName(0, tr("Open a video"));
if (file.isEmpty())
return;
m_player->play(file);
});
}
MainWindow::~MainWindow()
{
delete ui;
}
效果如下

智能推荐
Git基本原理(二)——Git分支、合并、变基
文章目录 Git基本原理(二)——Git分支、合并、变基 Git分支 创建分支 当前分支 切换分支 分支合并 变基 合并和变基的选择 Git基本原理(二)——Git分支、合并、变基 Git 的分支模型堪称它的“必杀技特性“,也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出。 在很多版本控制系统中,创建分支是一个低效...
Elasticsearch 基本语法使用
上一篇我们已经安装好了es+kibana 这里我们将简单的说一下增删查的使用 solr和elasticsearch区别: 1、solr创建索引库慢、查询快 ||||||||||| elasticsearch创建索引快、查询慢 2、elasticsearch支持分布式,solr可以使用zookeeper做分布式 elasticsearch概念: node:节点,部署服务的服务器 cluster:集群...
<Halcon>自定义函数封装方法
文章目录 1、名词解释 2、例子介绍 1、处理原图与任务: 2、代码与解析: 3、Halcon函数封装方式 ①明确需求 ②选取函数部分进行函数创建,更改函数接口 ③运行验证与函数更改操作 有网友说不太清楚这个halcon函数的封装方法。今天写个教程帖子,大家一起进步分享。 1、名词解释 算子: 指Halcon中最基础、最底层的函数(即你看不到它的代码实现),一个算子只有一句话,例如threshol...
PSENet-pytorch源码精读(一)
PSENet-pytorch源码精读 PSENet的网络结构 PSENet的网络结构 PSENet是基于FPN的基础上实现的,使用ResNet作为backbone网络。 首先,从backbone中获取四个256通道的特征图(P2P_2P2、P3P_3P3、P4P_4P4、P5P_5P5)。为了进一步组合从低到高的语义特征,通过函数C来融合四个特征图,以获取具有1024个通道的特征图F,如下...
猜你喜欢
(四)java+testng+poi之接口鉴权
1、HTTP是无状态协议 什么是无状态?就是说这一次的请求和上一次的请求是没有任何关系的,无法共享信息。好处就是速度快。 2、cookie、session的加入 HTTP请求是无状态的,所以解决共享信息的问题必须采用其他的手段,于是就有了sessionid,sessionid是基于cookie实现的。服务器为每一个用户生成一个不一样的随机字符串,每次向服务器发起HTTP请求时,都会把这个字符串传给...
Spring-IoC容器初始化
Spring Ioc容器 IoC容器最主要是对Bean对象的创建和依赖管里注入,是整个Spring IoC功能的核心 基本结构 Spring IoC结构很复杂,多个类继承实现关系混乱,但最基础的有三个 - BeanFactory,对IoC容器的基本行为做出了定义 - BeanDefinition,在IOC中可识别Bean资源文件的描述 - BeanDefinitionReader,加载Bean资源...
分布式电商项目四十二:发布商品功能-获取分类关联的品牌
发布商品功能-获取分类关联的品牌 在发布商品时,还需要获取当前选择分类的所有品牌,对应前端请求: 对应API文档: 由于返回的数据不是整个品牌表对应的数据,所有新建一个VO来保存返回的信息: 来到对应的控制层:/product/categorybrandrelation/brands/list: 之后创建方法实现方法getBrandsByCatId(catId): 之后重启服务,来到前端测试,可以...
Spring Batch Example
转自 https://www.mkyong.com/spring-batch/spring-batch-hello-world-example/ Spring Batch is a framework for batch processing – execution of a series of jobs. In Spring Batch, A job consists of many...
VirtualBox安装增强工具
打开虚拟机,启动centos 工具栏 点击「设备」-「安装增强功能」 接着手动执行命令,安装VBoxGuestAdditions 等待结束 【总结】 最后,简单总结一下Guest Additions和Extension Pack之前的区别: Guest Additions Extension Pack 中文翻译 客户端增强包(也常被叫做 功能扩展包,扩展功能包等) 扩展...
