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版本。以下是我在windows平台使用的过程,其它平台的还没有验证过
你必须让编译器知道FFmpeg的头文件和库所在的位置,否则待会儿编译QTAV的时候会因为找不到对应的库文件而报错。 软件包下载的文件解压后如下图所示 将对应的头和库文件放入到Qt目录 以Windows为例,Qt安装在中C:\workSpace\Qt\Qt5.10.0\5.10.0\mingw53_32。转到该目录,然后将ffmpeg标头放置到include\,将库放置到lib
编译完成文件夹如下: 双击sdk_install.bat,会自动拷贝编译完成的文件到qt文件夹内 到目前为止已经完成qtav相关的所有工作了。
请确保在使用渲染器前调用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_Hmainwindow.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; }效果如下