Qt基于QMediaPlayer实现视频播放
目前支持mp4/mkv/wmv/avi格式 并支持进度条拖动播放
打开文件扫描视频
void MainWindow::scanVideoFiles()
{
QDir dir(QCoreApplication::applicationDirPath()
+ "/myVideo");
QDir dirbsolutePath(dir.absolutePath());
if (dirbsolutePath.exists())
{
QStringList filter;
filter << "*.mp4" << "*.mkv" << "*.wmv" << "*.avi";
QFileInfoList files =
dirbsolutePath.entryInfoList(filter, QDir::Files);
for (int i = 0; i < files.count(); i++)
{
MediaObjectInfo info;
info.fileName = QString::fromUtf8(files.at(i)
.fileName()
.toUtf8()
.data());
info.filePath = QString::fromUtf8(files.at(i)
.filePath()
.toUtf8()
.data());
/* 媒体列表添加视频 */
if (mediaPlaylist->addMedia(QUrl::fromLocalFile(info.filePath)))
{
listWidget->addItem(info.fileName);
}
}
}
}
进度条拖动播放
void MainWindow::mediaPlayerPositionChanged(
qint64 position)
{
if (!durationSlider->isSliderDown())
durationSlider->setValue(position / 1000);
int second = position / 1000;
int minute = second / 60;
second %= 60;
QString mediaPosition;
mediaPosition.clear();
if (minute >= 10)
mediaPosition = QString::number(minute, 10);
else
mediaPosition = "0" + QString::number(minute, 10);
if (second >= 10)
mediaPosition = mediaPosition
+ ":" + QString::number(second, 10);
else
mediaPosition = mediaPosition
+ ":0" + QString::number(second, 10);
/* 显示现在播放的时间 */
label[0]->setText(mediaPosition);
}
播放视频
void MainWindow::btn_play_clicked()
{
int state = videoPlayer->state();
switch (state) {
case QMediaPlayer::StoppedState:
/* 媒体播放 */
videoPlayer->play();
break;
case QMediaPlayer::PlayingState:
/* 媒体暂停 */
videoPlayer->pause();
break;
case QMediaPlayer::PausedState:
/* 设置视频输出窗口 */
videoPlayer->play();
break;
}
}