#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QVideoWidget>
#include <QAudioOutput>
#include <QMediaPlayer>
#include<QDir>
#include<QFileDialog>
#include <QUrl>
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
player=new QMediaPlayer(this);
videoWidget = new QVideoWidget(this);
QAudioOutput *audioOutput = new QAudioOutput(this);
player->setAudioOutput(audioOutput);
player->setVideoOutput(videoWidget);
videoWidget->setGeometry(QRect(0, 0, 600, 200));
ui->soundSlider->setRange(0,100);
ui->soundSlider->setValue(50);
if (audioOutput != nullptr)
{
qDebug()<<"audioOutPut is running";
audioOutput->setVolume(0.5);
}
else
{
qDebug() << "No audio output available for volume control.";
}
ui->soundSliderText->setText(QString("%1").arg(50));
connect(player,&QMediaPlayer::playbackStateChanged,this,&MainWindow::do_stateChanged);
connect(player,&QMediaPlayer::positionChanged,this,&MainWindow::do_positionChanged);
connect(player,&QMediaPlayer::durationChanged,this,&MainWindow::do_durationChanged);
connect(ui->btnOpen,&QPushButton::clicked,[=](){
on_btnAdd_clicked();
});
connect(ui->btnPause,&QPushButton::clicked,[=](){
on_btnPause_clicked();
});
connect(ui->btnStop,&QPushButton::clicked,[=](){
on_btnStop_clicked();
});
connect(ui->btnPlay,&QPushButton::clicked,[=](){
on_btnPlay_clicked();
});
connect(ui->btnSound,&QPushButton::clicked,[=](){
on_btnSound_clicked();
});
connect(ui->soundSlider,&QSlider::valueChanged,[=](int value){
on_sliderVolumn_valueChanged(value);
});
connect(ui->vedioSlider,&QSlider::valueChanged,[=](int value){
on_sliderVedio_valueChaned(value);
});
}
void MainWindow::do_stateChanged(QMediaPlayer::PlaybackState State)
{
bool isPlaying =(State==QMediaPlayer::PlayingState);
ui->btnPlay->setEnabled(!isPlaying);
ui->btnPause->setEnabled(isPlaying);
ui->btnStop->setEnabled(isPlaying);
}
void MainWindow::do_durationChanged(qint64 duration)
{
ui->vedioSlider->setMaximum(duration);
int sec = duration/1000;
int min= sec/60;
sec=sec%60;
durationTime = QString("%1:%2").arg(min).arg(sec);
ui->sliderText->setText(positionTime+"|"+durationTime);
}
void MainWindow::do_positionChanged(qint64 position)
{
int sec = position/1000;
int min= sec/60;
sec=sec%60;
positionTime=QString("%1:%2").arg(min).arg(sec);
ui->vedioSlider->setValue(position);
ui->sliderText->setText(positionTime+"|"+durationTime);
}
void MainWindow::on_btnAdd_clicked()
{
QString curPath = QDir::homePath();
QString dlgTitle = "选择视频";
QString filter = "视频文件(*.wmv, *.mp4);;所有文件(*.*)";
QString aFile=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
if(aFile.isEmpty())
{
return;
}
QFileInfo fileinfo(aFile);
ui->labCurMedia->setText(fileinfo.fileName());
player->setSource(QUrl::fromLocalFile(aFile));
player->play();
}
void MainWindow::on_btnPlay_clicked()
{
player->play();
}
void MainWindow::on_btnPause_clicked()
{
player->pause();
}
void MainWindow::on_btnStop_clicked()
{
player->stop();
}
void MainWindow::on_sliderVolumn_valueChanged(float value)
{
player->audioOutput()->setVolume(value);
int valume = static_cast<int>(value);
ui->soundSliderText->setText(QString("%1%").arg(valume));
qDebug()<<"is running";
}
void MainWindow::on_btnSound_clicked()
{
{
bool mute = player->audioOutput()->isMuted();
player->audioOutput()->setMuted(!mute);
if(mute)
{
ui->btnSound->setIcon(QIcon(":/images/volumn.bmp"));
double currentVolume = player->audioOutput()->volume();
ui->soundSlider->setValue(currentVolume * 100);
ui->soundSliderText->setText(QString("%1").arg(currentVolume * 100));
}
else
{
ui->btnSound->setIcon(QIcon(":/images/mute.bmp"));
ui->soundSlider->setValue(0);
ui->soundSliderText->setText("0");
}
}
}
void MainWindow::on_sliderVedio_valueChaned(qint64 value)
{
player->setPosition(value);
}
MainWindow::~MainWindow()
{
delete ui;
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QVideoWidget>
#include<QVideoFrame>
#include <QMediaPlayer>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void do_stateChanged(QMediaPlayer::PlaybackState State);
void do_durationChanged(qint64 duration);
void do_positionChanged(qint64 position);
void on_btnAdd_clicked();
void on_btnPlay_clicked();
void on_btnPause_clicked();
void on_btnStop_clicked();
void on_sliderVolumn_valueChanged(float value);
void on_btnSound_clicked();
void on_sliderVedio_valueChaned(qint64 value);
void on_sliderVedio_positionChaned(qint64 value);
private:
Ui::MainWindow *ui;
QMediaPlayer *player;
QVideoWidget *videoWidget;
QString durationTime;
QString positionTime;
};
#endif // MAINWINDOW_H
#include "ui_mainwindow.h"
#include<QVideoWidget>
#include <QAudioOutput>
#include <QMediaPlayer>
#include<QDir>
#include<QFileDialog>
#include <QUrl>
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
player=new QMediaPlayer(this);
videoWidget = new QVideoWidget(this);
QAudioOutput *audioOutput = new QAudioOutput(this);
player->setAudioOutput(audioOutput);
player->setVideoOutput(videoWidget);
videoWidget->setGeometry(QRect(0, 0, 600, 200));
ui->soundSlider->setRange(0,100);
ui->soundSlider->setValue(50);
if (audioOutput != nullptr)
{
qDebug()<<"audioOutPut is running";
audioOutput->setVolume(0.5);
}
else
{
qDebug() << "No audio output available for volume control.";
}
ui->soundSliderText->setText(QString("%1").arg(50));
connect(player,&QMediaPlayer::playbackStateChanged,this,&MainWindow::do_stateChanged);
connect(player,&QMediaPlayer::positionChanged,this,&MainWindow::do_positionChanged);
connect(player,&QMediaPlayer::durationChanged,this,&MainWindow::do_durationChanged);
connect(ui->btnOpen,&QPushButton::clicked,[=](){
on_btnAdd_clicked();
});
connect(ui->btnPause,&QPushButton::clicked,[=](){
on_btnPause_clicked();
});
connect(ui->btnStop,&QPushButton::clicked,[=](){
on_btnStop_clicked();
});
connect(ui->btnPlay,&QPushButton::clicked,[=](){
on_btnPlay_clicked();
});
connect(ui->btnSound,&QPushButton::clicked,[=](){
on_btnSound_clicked();
});
connect(ui->soundSlider,&QSlider::valueChanged,[=](int value){
on_sliderVolumn_valueChanged(value);
});
connect(ui->vedioSlider,&QSlider::valueChanged,[=](int value){
on_sliderVedio_valueChaned(value);
});
}
void MainWindow::do_stateChanged(QMediaPlayer::PlaybackState State)
{
bool isPlaying =(State==QMediaPlayer::PlayingState);
ui->btnPlay->setEnabled(!isPlaying);
ui->btnPause->setEnabled(isPlaying);
ui->btnStop->setEnabled(isPlaying);
}
void MainWindow::do_durationChanged(qint64 duration)
{
ui->vedioSlider->setMaximum(duration);
int sec = duration/1000;
int min= sec/60;
sec=sec%60;
durationTime = QString("%1:%2").arg(min).arg(sec);
ui->sliderText->setText(positionTime+"|"+durationTime);
}
void MainWindow::do_positionChanged(qint64 position)
{
int sec = position/1000;
int min= sec/60;
sec=sec%60;
positionTime=QString("%1:%2").arg(min).arg(sec);
ui->vedioSlider->setValue(position);
ui->sliderText->setText(positionTime+"|"+durationTime);
}
void MainWindow::on_btnAdd_clicked()
{
QString curPath = QDir::homePath();
QString dlgTitle = "选择视频";
QString filter = "视频文件(*.wmv, *.mp4);;所有文件(*.*)";
QString aFile=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
if(aFile.isEmpty())
{
return;
}
QFileInfo fileinfo(aFile);
ui->labCurMedia->setText(fileinfo.fileName());
player->setSource(QUrl::fromLocalFile(aFile));
player->play();
}
void MainWindow::on_btnPlay_clicked()
{
player->play();
}
void MainWindow::on_btnPause_clicked()
{
player->pause();
}
void MainWindow::on_btnStop_clicked()
{
player->stop();
}
void MainWindow::on_sliderVolumn_valueChanged(float value)
{
player->audioOutput()->setVolume(value);
int valume = static_cast<int>(value);
ui->soundSliderText->setText(QString("%1%").arg(valume));
qDebug()<<"is running";
}
void MainWindow::on_btnSound_clicked()
{
{
bool mute = player->audioOutput()->isMuted();
player->audioOutput()->setMuted(!mute);
if(mute)
{
ui->btnSound->setIcon(QIcon(":/images/volumn.bmp"));
double currentVolume = player->audioOutput()->volume();
ui->soundSlider->setValue(currentVolume * 100);
ui->soundSliderText->setText(QString("%1").arg(currentVolume * 100));
}
else
{
ui->btnSound->setIcon(QIcon(":/images/mute.bmp"));
ui->soundSlider->setValue(0);
ui->soundSliderText->setText("0");
}
}
}
void MainWindow::on_sliderVedio_valueChaned(qint64 value)
{
player->setPosition(value);
}
MainWindow::~MainWindow()
{
delete ui;
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QVideoWidget>
#include<QVideoFrame>
#include <QMediaPlayer>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void do_stateChanged(QMediaPlayer::PlaybackState State);
void do_durationChanged(qint64 duration);
void do_positionChanged(qint64 position);
void on_btnAdd_clicked();
void on_btnPlay_clicked();
void on_btnPause_clicked();
void on_btnStop_clicked();
void on_sliderVolumn_valueChanged(float value);
void on_btnSound_clicked();
void on_sliderVedio_valueChaned(qint64 value);
void on_sliderVedio_positionChaned(qint64 value);
private:
Ui::MainWindow *ui;
QMediaPlayer *player;
QVideoWidget *videoWidget;
QString durationTime;
QString positionTime;
};
#endif // MAINWINDOW_H