Слияние кода завершено, страница обновится автоматически
/**
叶念西风: https://www.zhouws.com
*/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "zffmpeg.h"
#include "zffaudio.h"
#include <QFileDialog>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(&UpdatePlayTime, SIGNAL(timeout()), this, SLOT(UpdatePlayTimeOut()));
DisablePlay();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_BT_PlayOrPause_clicked()
{
if (playing) {
PausePlay();
ZFFmpeg::getInstance()->pause();
UpdatePlayTime.stop();
} else {
playing = true;
Playing();
ZFFmpeg::getInstance()->play();
UpdatePlayTime.start(100);
}
}
void MainWindow::UpdatePlayTimeOut() {
if (playing) {
if (ZFFmpeg::getInstance()->CheckIsStop()) {
playing = false;
ZFFmpeg::getInstance()->stop();
ReadPlay();
return;
}
int curMsec = ZFFmpeg::getInstance()->GetCurTimeMsec();
if (videoTimeSilderPressed ==
false) ui->videoTimeSilder->setValue(curMsec);
INT curSec = curMsec / 1000;
ui->LB_curTime->setText(QString("%1:%2").arg(curSec / 60, 2, 10,
QLatin1Char(
'0')).arg(
curSec
% 60,
2, 10,
QLatin1Char(
'0')));
}
}
int MainWindow::LoadVideo() {
// 定义文件对话框类
QString fileName = QFileDialog::getOpenFileName(this,
tr("选择视频文件"),
tr("."),
tr(
"视频文件(*.mp4 *.flv *.avi);;所有文件(*.*)"));
if (fileName.isEmpty()) {
return -1;
}
// bool res = FFVideo::getInstance()->OpenVideo(fileName,
// ui->openGLWidget);
bool res = ZFFmpeg::getInstance()->Load(fileName);
ZFFaudio::getInstance()->init(ZFFmpeg::getInstance()->GetAudioSampleRate(),
ZFFmpeg::getInstance()->GetAudioChannel(),
ZFFmpeg::getInstance()->GetAudioSampleSize());
if (!res) {
QMessageBox::information(this, tr("警告"), tr("选择的视频文件无效"));
return -1;
}
ReadPlay();
ui->openGLWidget->resetParam();
return 0;
}
void MainWindow::on_BT_open_clicked()
{
LoadVideo();
}
void MainWindow::on_BT_Stop_clicked()
{
playing = false;
ZFFmpeg::getInstance()->stop();
ReadPlay();
}
void MainWindow::playIsOverSlot() {}
void MainWindow::ReadPlay() {
ui->BT_Stop->setEnabled(false);
ui->videoTimeSilder->setEnabled(true);
ui->BT_PlayOrPause->setEnabled(true);
ui->BT_PlayOrPause->setText(tr("播放"));
ui->videoTimeSilder->setValue(0);
ui->LB_curTime->setText(QString("00:00"));
}
void MainWindow::Playing() {
ui->BT_Stop->setEnabled(true);
ui->videoTimeSilder->setEnabled(true);
ui->BT_PlayOrPause->setText(tr("暂停"));
ui->videoTimeSilder->setMaximum(ZFFmpeg::getInstance()->GetTotalTimeMsec());
int totalMsec = ZFFmpeg::getInstance()->GetTotalTimeMsec();
int totalSec = totalMsec / 1000;
ui->LB_totalTime->setText(QString("%1:%2").arg(totalSec / 60, 2, 10,
QLatin1Char(
'0')).arg(
totalSec
% 60, 2,
10,
QLatin1Char(
'0')));
}
void MainWindow::PausePlay() {
playing = false;
ui->BT_Stop->setEnabled(true);
ui->BT_PlayOrPause->setText(tr("播放"));
}
void MainWindow::DisablePlay() {
ui->BT_Stop->setEnabled(false);
ui->BT_PlayOrPause->setEnabled(false);
ui->videoTimeSilder->setEnabled(false);
ui->BT_PlayOrPause->setText(tr("播放"));
ui->videoTimeSilder->setValue(0);
ui->LB_curTime->setText(QString("00:00"));
ui->LB_totalTime->setText(QString("00:00"));
}
void MainWindow::on_videoTimeSilder_sliderPressed()
{
videoTimeSilderPressed = true;
}
void MainWindow::on_videoTimeSilder_sliderReleased()
{
UpdatePlayTime.stop();
videoTimeSilderPressed = false;
qDebug("rel pos:%d", ui->videoTimeSilder->value());
ZFFmpeg::getInstance()->seekPosByMs(ui->videoTimeSilder->value());
// UpdatePlayTime.start(100);
PausePlay();
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )