QT5-qmediaplayer播放视频及进度条控制实例

qmediaplayer是QT5的播放视频的一个模块。它在很多时候还是要基于第三方的解码器。这里以Ubuntu系统为例,记录其用法及进度条qslider的控制。

首先,制作一个简单的界面文件mainwindow.ui:

然后,下载一个mp4或其他格式视频(比如mkv),基于以上UI进行播放控制操作。

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    timer = new QTimer();
    ui->setupUi(this);
    player = new QMediaPlayer;
    list = new QMediaPlaylist(player);
    //list->addMedia(QUrl::fromLocalFile("/home/m30.mp4"));
    //list->addMedia(QUrl::fromLocalFile("/home/share/2023.mkv"));
    list->addMedia(QUrl::fromLocalFile("/home/share/50.mp4"));
    list->setCurrentIndex(0);
    list->setPlaybackMode(QMediaPlaylist::Loop);
    player->setPlaylist(list);
    ui->widget->setAspectRatioMode(Qt::IgnoreAspectRatio);
    long time = player->duration();
    printf("duration: %lld\n", player->duration());
    player->setVideoOutput(ui->widget);
    timer->setInterval(5000);
    connect(timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
    timer->start();

    ui->horizontalSlider->setValue(0);
    connect(player, &QMediaPlayer::durationChanged, ui->horizontalSlider, &QSlider::setMaximum);
    connect(player, &QMediaPlayer::positionChanged, ui->horizontalSlider, &QSlider::setValue);
    connect(ui->horizontalSlider, &QSlider::sliderMoved, this, [this](int value){
        printf("slide: %d\n", value);
        player->setPosition(value);
    });
    player->setVolume(100);
    player->play();

    //player->setPosition();
}
void MainWindow::onTimeout()
{
    printf("timeout\n");

    player->setPosition(30*1000);
}
MainWindow::~MainWindow()
{
    delete ui;
    player->stop();
    if (player)
        delete player;
    if(list)
        delete list;
}

代码集成了两种控制方式:1.定时5秒循环让进度跳到某个30秒位置;2.手动拖动进度条控制播放进度。

友好期间,顺道贴上mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QMediaPlaylist>
#include <QTimer>
#include <QSlider>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QMediaPlayer *player;
    QVideoWidget * videoWidget;
    QMediaPlaylist * list;
    QTimer* timer;
    QSlider* slid;
public slots:
    void onTimeout();
};

#endif // MAINWINDOW_H

另外,如果遇到运行时闪退报找不到合适的解码器的错误的话,需要先安装解码器:

sudo apt install gstreamer1.0-libav -y

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Qt框架来创建一个简单的视频播放器,并在播放过程中显示进度条。首先,你需要安装Qt并配置好开发环境。 以下是一个简单的示例代码,演示了如何在Qt中使用MPlayer播放视频并显示进度条: ```cpp #include <QApplication> #include <QMediaPlayer> #include <QVideoWidget> #include <QSlider> #include <QBoxLayout> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建主窗口 QWidget window; window.setWindowTitle("Video Player"); // 创建视频播放器和视频显示窗口 QMediaPlayer player; QVideoWidget videoWidget; player.setVideoOutput(&videoWidget); // 创建进度条 QSlider progressSlider(Qt::Horizontal); progressSlider.setRange(0, 0); // 设置范围为0,用于后续更新 // 连接视频播放器的信号和进度条的槽函数 QObject::connect(&player, &QMediaPlayer::durationChanged, &progressSlider, &QSlider::setMaximum); QObject::connect(&player, &QMediaPlayer::positionChanged, &progressSlider, &QSlider::setValue); // 创建垂直布局,并将视频显示窗口和进度条添加到布局中 QVBoxLayout layout; layout.addWidget(&videoWidget); layout.addWidget(&progressSlider); // 设置主窗口的布局 window.setLayout(&layout); // 打开视频文件 player.setMedia(QUrl::fromLocalFile("path/to/your/video.file")); // 显示主窗口并开始播放视频 window.show(); player.play(); return app.exec(); } ``` 请注意,上述代码中的`"path/to/your/video.file"`应替换为你要播放的视频文件的实际路径。 这只是一个简单的示例,你可以根据需要进行进一步的自定义和功能扩展。希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值