在Qt6中,可以使用QMediaPlayer类来实现视频播放,并通过QVideoProbe类来获取播放进度。以下是一个简单的示例代码:
#include <QApplication>
#include <QWidget>
#include <QMediaPlayer>
#include <QVideoProbe>
class VideoPlayer : public QWidget {
Q_OBJECT
public:
VideoPlayer(QWidget *parent = nullptr) : QWidget(parent) {
player = new QMediaPlayer(this);
probe = new QVideoProbe(this);
probe->setSource(player);
connect(probe, &QVideoProbe::videoFrameProbed, this, &VideoPlayer::handleFrameProbed);
}
public slots:
void playVideo(const QString &filePath) {
player->setMedia(QUrl::fromLocalFile(filePath));
player->play();
}
private slots:
void handleFrameProbed(const QVideoFrame &frame) {
qreal position = frame.metadata(QMediaMetaData::VideoCodecDelay).toDouble() / 1000.0;
qreal duration = frame.metadata(QMediaMetaData::Duration).toDouble() / 1000.0;
qreal progress = (position / duration) * 100.0;
qDebug() << "Current progress:" << progress << "%";
}
private:
QMediaPlayer *player;
QVideoProbe *probe;
};
int main(int argc, char **argv) {
QApplication app(argc, argv);
VideoPlayer videoPlayer;
// 替换为你的视频文件路径
QString videoFilePath = "path/to/your/video.mp4";
videoPlayer.playVideo(videoFilePath);
return app.exec();
}
#include "main.moc"
在上面的示例中,我们创建了一个VideoPlayer
类,它继承自QWidget,并包含了一个QMediaPlayer对象和一个QVideoProbe对象。在playVideo()
函数中,我们设置了视频文件的路径并开始播放。通过连接QVideoProbe的videoFrameProbed信号,我们可以获取到每一帧的信息,包括播放进度。在handleFrameProbed槽函数中,我们可以计算出当前播放进度,并进行相应处理。
请注意,这只是一个简单示例,并未完整处理所有可能的情况,例如错误处理、界面控制等。实际使用时需要根据需求进行适当修改和扩展。
内容由零声教学AI助手提供,问题来源于学员提问