1.下载
QTAV源码:https://github.com/wang-bin/QtAV.git
并下载ffmpeg库:http://ffmpeg.org/
2.qtcreator 添加ffmpeg库路径
方法一:将 ffmpeg-4.2.1-win64-dev复制到QTAV源码并命名为ffmpeg,看图
方法二(官方不推荐):项目---》构建设置-----》构建环境----》添加
3.编译之后将ffmpeg-4.2.1-win64-shared/bin文件下的库复制到QT编译路径下的bin文件中
4.安装到QT源码目录
5.测试
pro文件里加上LIBS += -lQtAV1 -lQtAVWidgets1
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHBoxLayout>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),m_unit(1000)
{
ui->setupUi(this);
m_player = new QtAV::AVPlayer(this);
m_videoOutput = new QtAV::VideoOutput(this);
if(!m_videoOutput->widget()){
return;
}
QHBoxLayout *hbox = new QHBoxLayout(this);
hbox->addWidget(m_videoOutput->widget());
ui->m_videowidget->setLayout(hbox);
m_player->setRenderer(m_videoOutput);
connect(m_player,&QtAV::AVPlayer::started,[=](){
qDebug()<<"m_player->duration():"<<m_player->duration();
ui->sliderProgess->setRange(0,m_player->position());
ui->sliderProgess->setValue(0);
});
connect(m_player,&QtAV::AVPlayer::durationChanged,[=](int value){
qDebug()<<"value"<<value;
// ui->sliderProgess->setValue(value/m_unit);
});
connect(m_player, &QtAV::AVPlayer::notifyIntervalChanged, [=](){
m_unit = m_player->notifyInterval();
qDebug()<<"m_unit"<< m_unit ;
});
connect(m_player,&QtAV::AVPlayer::positionChanged,[=](qint64 position){
ui->sliderProgess->setRange(0,int(m_player->duration()/m_unit));
ui->sliderProgess->setValue(position/m_unit);
});
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionwenj_triggered()
{
QString filename = QFileDialog::getOpenFileName(this,"打开文件",QStandardPaths::writableLocation(QStandardPaths::DesktopLocation),tr("video (*.mp4 *.wma)"));
if(filename.isEmpty())return;
m_player->play(filename);
}
void MainWindow::on_pauseBtn_clicked()
{
m_player->pause(!m_player->isPaused());
}
void MainWindow::on_stopBtn_clicked()
{
m_player->stop();
}
void MainWindow::on_sliderProgess_sliderMoved(int position)
{
if (!m_player->isPlaying())
return;
qDebug()<<"seek"<<position;
m_player->seek(qint64(position*m_unit));
}