Qt6.0 音频视频播放

Qt 6.0 提供了强大的多媒体功能用于音频和视频播放。以下是使用 Qt 6.0 进行音频视频播放的主要方法和类:

核心类

  1. QMediaPlayer - 主要的媒体播放类

  2. QAudioOutput - 音频输出控制

  3. QVideoWidget - 视频显示组件

  4. QMediaDevices - 音频设备管理

基本音频播放

#include <QMediaPlayer>
#include <QAudioOutput>

// 创建播放器和音频输出
QMediaPlayer *player = new QMediaPlayer;
QAudioOutput *audioOutput = new QAudioOutput;

// 设置音频输出
player->setAudioOutput(audioOutput);

// 设置播放源(可以是本地文件或网络URL)
player->setSource(QUrl::fromLocalFile("/path/to/audio.mp3"));

// 播放
player->play();

基本视频播放

#include <QMediaPlayer>
#include <QAudioOutput>
#include <QVideoWidget>

// 创建播放器、音频输出和视频窗口
QMediaPlayer *player = new QMediaPlayer;
QAudioOutput *audioOutput = new QAudioOutput;
QVideoWidget *videoWidget = new QVideoWidget;

// 设置视频输出
player->setVideoOutput(videoWidget);

// 设置音频输出
player->setAudioOutput(audioOutput);

// 显示视频窗口
videoWidget->show();

// 设置播放源
player->setSource(QUrl::fromLocalFile("/path/to/video.mp4"));

// 播放
player->play();

播放控制

// 暂停
player->pause();

// 停止
player->stop();

// 设置音量 (0.0 - 1.0)
audioOutput->setVolume(0.8);

// 跳转到特定位置 (毫秒)
player->setPosition(5000); // 跳转到5秒位置

// 循环播放
player->setLoops(QMediaPlayer::Infinite);

信号和槽

// 连接状态改变信号
connect(player, &QMediaPlayer::playbackStateChanged, [](QMediaPlayer::PlaybackState state) {
    qDebug() << "Playback state changed:" << state;
});

// 连接位置改变信号
connect(player, &QMediaPlayer::positionChanged, [](qint64 pos) {
    qDebug() << "Position:" << pos;
});

// 连接持续时间改变信号
connect(player, &QMediaPlayer::durationChanged, [](qint64 dur) {
    qDebug() << "Duration:" << dur;
});

// 错误处理
connect(player, &QMediaPlayer::errorOccurred, [](QMediaPlayer::Error error, const QString &errorString) {
    qDebug() << "Error:" << errorString;
});

支持的格式

Qt 6.0 支持多种音频和视频格式,具体取决于平台和安装的编解码器。常见支持的格式包括:

  • 音频: MP3, WAV, AAC, OGG

  • 视频: MP4, AVI, MKV (取决于编解码器)

注意事项

  1. 在 Qt 6 中,多媒体模块进行了重大重构,与 Qt 5 的 API 有较大不同

  2. 需要在项目文件 (.pro) 中添加多媒体模块:

    QT += multimedia
  3. 某些平台可能需要安装额外的编解码器包

  4. 对于高级功能,可以查看 QMediaCaptureSession 和 QCamera 类

完整示例 (视频播放器)

#include <QApplication>
#include <QMediaPlayer>
#include <QAudioOutput>
#include <QVideoWidget>
#include <QPushButton>
#include <QSlider>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFileDialog>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    QWidget window;
    QVBoxLayout layout(&window);
    
    // 视频显示
    QVideoWidget *videoWidget = new QVideoWidget;
    layout.addWidget(videoWidget);
    
    // 控制按钮
    QHBoxLayout controlLayout;
    QPushButton *openButton = new QPushButton("Open");
    QPushButton *playButton = new QPushButton("Play");
    QPushButton *pauseButton = new QPushButton("Pause");
    QPushButton *stopButton = new QPushButton("Stop");
    
    controlLayout.addWidget(openButton);
    controlLayout.addWidget(playButton);
    controlLayout.addWidget(pauseButton);
    controlLayout.addWidget(stopButton);
    layout.addLayout(&controlLayout);
    
    // 进度条
    QSlider *positionSlider = new QSlider(Qt::Horizontal);
    layout.addWidget(positionSlider);
    
    // 创建播放器
    QMediaPlayer *player = new QMediaPlayer(&window);
    QAudioOutput *audioOutput = new QAudioOutput(&window);
    player->setAudioOutput(audioOutput);
    player->setVideoOutput(videoWidget);
    
    // 连接按钮信号
    QObject::connect(openButton, &QPushButton::clicked, [&]() {
        QString file = QFileDialog::getOpenFileName(&window, "Open Media File");
        if (!file.isEmpty()) {
            player->setSource(QUrl::fromLocalFile(file));
        }
    });
    
    QObject::connect(playButton, &QPushButton::clicked, player, &QMediaPlayer::play);
    QObject::connect(pauseButton, &QPushButton::clicked, player, &QMediaPlayer::pause);
    QObject::connect(stopButton, &QPushButton::clicked, player, &QMediaPlayer::stop);
    
    // 更新进度条
    QObject::connect(player, &QMediaPlayer::positionChanged, positionSlider, [=](qint64 pos) {
        positionSlider->setValue(pos);
    });
    
    QObject::connect(player, &QMediaPlayer::durationChanged, positionSlider, [=](qint64 dur) {
        positionSlider->setRange(0, dur);
    });
    
    QObject::connect(positionSlider, &QSlider::sliderMoved, player, &QMediaPlayer::setPosition);
    
    window.resize(800, 600);
    window.show();
    
    return app.exec();
}

这个示例创建了一个简单的视频播放器,包含打开文件、播放、暂停、停止功能和进度条控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值