ffmpeg播放器实战(初始化项目窗口)

简介: 初始化项目窗口

1.widget窗口类构造函数

Widget::Widget(QWidget*parent)
    : QWidget(parent)
    , ui(newUi::Widget)
{
ui->setupUi(this);
//创建显示类mMyDisplay=newDisplay();
//winId() 是 QWidget 类的一个方法,用于返回窗口的唯一标识符。//这个标识符可以用来与其他应用程序进行交互或者在一些特定情况下进行操作。//你可以通过调用该方法来获取当前窗口的标识符。mMyPlayer=newFPlayer(mMyDisplay->getVideo()->winId());
mThread=newQThread();
mMyPlayer->moveToThread(mThread);
mThread->start();
mMyProgress=newProgress();
//添加显示窗口ui->gridLayout->addWidget(mMyDisplay);
//添加进度条ui->verticalLayout_2->addWidget(mMyProgress);
ui->uPlay->setEnabled(false);
ui->uStop->setEnabled(false);
ui->uSpeed->setText(QString("倍速x%1").arg(mMyPlayer->getPlaySpeed()));
ui->uBackward->setEnabled(false);
ui->uForward->setEnabled(false);
connect(mMyPlayer, &FPlayer::signalProgress, this, &Widget::slotProgress);
connect(mMyPlayer, &FPlayer::signalPLayStop, this, &Widget::slotPlayStop);
connect(ui->uOpen, &QPushButton::clicked, this, &Widget::openClicked);
connect(ui->uPlay, &QPushButton::clicked, this, &Widget::playClicked);
connect(ui->uStop, &QPushButton::clicked, this, &Widget::stopClicked);
connect(ui->uVolume, &QSlider::valueChanged, this, [=](intvalue) {
mMyPlayer->setPlayVolume(value);
    });
connect(ui->uBackward, &QPushButton::clicked, this, [=]() {
mMyPlayer->fastBackward();
    });
connect(ui->uForward, &QPushButton::clicked, this, [=]() {
mMyPlayer->fastForward();
    });
connect(ui->uSpeed, &QPushButton::clicked, this, &Widget::speedClicked);
connect(mMyProgress, &Progress::signalValue, this, [=](intvalue) {
int64_th=value/60/60;
int64_tmin=value/60;
int64_ts=value-min*60;
ui->uPlayProgress->setText(QString("%1:%2:%3").arg(h, 2, 10, QChar('0')).arg(min, 2, 10, QChar('0')).arg(s, 2, 10, QChar('0')));
    });
connect(mMyProgress, &Progress::signalSeekValue, this, [=](intvalue) {
mMyPlayer->seek((longlong)value*1000);
    });
}

目标:初始化页面ui,绑定ui和播放控制类的信号和槽

2.其他页面ui元素

//进度voidWidget::slotProgress(longlongtime)
{
//按下if (!mMyProgress->getPressFlag()) {
int64_ttempTime=time/1000;
//小时int64_th=tempTime/60/60;
//分int64_tmin=tempTime/60;
//秒int64_ts=tempTime-min*60;
ui->uPlayProgress->setText(QString("%1:%2:%3").arg(h, 2, 10, QChar('0'))
                                       .arg(min, 2, 10, QChar('0')).arg(s, 2, 10, QChar('0')));
mMyProgress->setSliderValue(tempTime);
    }
}
//暂停播放voidWidget::slotPlayStop()
{
ui->uPlay->setText("播放");
ui->uOpen->setEnabled(true);
ui->uStop->setEnabled(false);
}
voidWidget::openClicked()
{
QStringpath=QFileDialog::getOpenFileName(this, "", "", "*.mp4 *.avi *.flv");
if (mMyPlayer->open(path)) {
intwidth=0;
intheight=0;
mMyPlayer->getVideoSize(width, height);
mMyDisplay->setNewSize(width, height);
int64_ttempTime=mMyPlayer->getLength() /1000;
int64_th=tempTime/60/60;
int64_tmin=tempTime/60;
int64_ts=tempTime-min*60;
ui->uPlayLength->setText(QString("%1:%2:%3").arg(h, 2, 10, QChar('0')).arg(min, 2, 10, QChar('0')).arg(s, 2, 10, QChar('0')));
mMyProgress->setSliderLength(tempTime);
ui->uPlay->setEnabled(true);
ui->uBackward->setEnabled(true);
ui->uForward->setEnabled(true);
    }
}
voidWidget::playClicked()
{
if (ui->uPlay->text() =="播放") {
if (!mMyPlayer->play()) {
return;
        }
ui->uOpen->setEnabled(false);
ui->uPlay->setText("暂停");
    } else {
mMyPlayer->pause();
ui->uPlay->setText("播放");
    }
ui->uStop->setEnabled(true);
}
voidWidget::stopClicked()
{
mMyPlayer->stop();
ui->uPlay->setText("播放");
ui->uStop->setEnabled(false);
}
voidWidget::speedClicked()
{
if (mMyPlayer->getPlaySpeed() ==PLAY_SLOW) {
mMyPlayer->setPlaySpeed(PLAY_NORMAL);
    } elseif (mMyPlayer->getPlaySpeed() ==PLAY_NORMAL) {
mMyPlayer->setPlaySpeed(PLAY_FAST2);
    } elseif (mMyPlayer->getPlaySpeed() ==PLAY_FAST2) {
mMyPlayer->setPlaySpeed(PLAY_FAST4);
    } elseif (mMyPlayer->getPlaySpeed() ==PLAY_FAST4) {
mMyPlayer->setPlaySpeed(PLAY_SLOW);
    }
floatspeed= (mMyPlayer->getPlaySpeed() ==PLAY_SLOW) ?0.5 : mMyPlayer->getPlaySpeed();
ui->uSpeed->setText(QString("倍速x%1").arg(speed));
}


image.png

image.png

相关文章
|
6月前
|
监控 物联网 编解码
流媒体方案之FFmpeg——实现物联网视频监控项目
流媒体方案之FFmpeg——实现物联网视频监控项目
流媒体方案之FFmpeg——实现物联网视频监控项目
|
6月前
|
存储 编解码 监控
ffmpeg直播项目
ffmpeg直播项目
65 1
|
6月前
|
XML 编解码 JSON
FFmpeg常用命令讲解及实战二(2)
FFmpeg常用命令讲解及实战二
82 0
|
存储 编解码 Linux
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解
|
17天前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
78 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
3月前
|
机器学习/深度学习 编解码 API
【机器学习】FFmpeg+Whisper:二阶段法视频理解(video-to-text)大模型实战
【机器学习】FFmpeg+Whisper:二阶段法视频理解(video-to-text)大模型实战
49 0
|
5月前
|
存储 编解码 Linux
rodert教你学FFmpeg实战这一篇就够了 - 音视频处理入门篇
rodert教你学FFmpeg实战这一篇就够了 - 音视频处理入门篇
62 1
|
6月前
|
Web App开发 编解码 vr&ar
使用FFmpeg从音视频处理到流媒体技术的探索和实战应用
使用FFmpeg从音视频处理到流媒体技术的探索和实战应用
278 2
|
6月前
|
存储 数据处理 API
ffmpeg过滤器filter理论与实战
ffmpeg过滤器filter理论与实战
98 0
|
6月前
|
编解码 vr&ar 内存技术
FFmpeg常用命令讲解及实战二(1)
FFmpeg常用命令讲解及实战二
56 0