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

Qt FFmpeg视频播放器是使用Qt和FFmpeg库开发的一款功能强大的视频播放器。Qt是一种跨平台的应用程序开发框架,它提供了一系列易于使用的工具和组件,用于开发各种图形用户界面应用程序。而FFmpeg是一套开源、免费的音视频处理工具库,可以实现音视频的编码、解码、转码等功能。 Qt FFmpeg视频播放器具有以下特点和功能: 1. 跨平台:由于基于Qt进行开发,所以可以在多个平台上运行,如Windows、macOS、Linux等。 2. 支持多种音视频格式:借助于FFmpeg库的强大功能,该播放器能够播放多种常见的音视频文件格式,如MP4、AVI、MKV等。 3. 媒体控制:提供了常见的媒体控制功能,如播放、暂停、停止、快进、快退等。 4. 字幕支持:能够加载和显示外部字幕文件,提供了灵活的字幕样式设置。 5. 声音控制:支持音量调节、静音等功能,可以按照用户需求自定义音量设置。 6. 视频尺寸调整:可以根据用户需求对视频的尺寸进行缩放、全屏等操作。 7. 播放进度控制:提供了进度条和时间显示,方便用户对视频进行精确控制。 8. 自定义界面:通过使用Qt的UI设计工具,可以自定义播放器的界面和布局,使其更加符合用户的个性化需求。 Qt FFmpeg视频播放器的开发需要对Qt和FFmpeg的基本使用方法有一定的了解,同时也需要具备一定的音视频处理知识。开发者可以根据自己的需求进行二次开发,增加更多的功能和效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值