上篇文章写到了整个视频播放器的具体布局,或者说是只实现了外观功能,本篇叙述具体的视频加载功能和按钮功能设置,完成一个基本的视频播放器(能播放暂且算是最基本的要求吧)
#include <QMediaPlayer>
#include <QMediaPlaylist>
引入流播放相关类,定义视频流和类内部相关的属性项,主要是在哪播放(该控件内部必须支持播放视频),怎样加载播放项
player->setPlaylist(Playlist);
player->setVideoOutput(videoWidget);
这里着重解释一波第一行代码项,这里的是关联播放加载项,要播放的视频与QMediaPlaylist是密切相关的,因为打开按钮执行的关系!
这里先解释一波一个文件解析函数相关
void MainWindow::addToPlaylist(const QStringList &fileNames) { /* * 留待分析 */ foreach (QString const &argument, fileNames) { /* * 下条语句为有后缀的获取文件名[根据获得的路径] */ QFileInfo fileInfo(argument); if (fileInfo.exists()) { QUrl url = QUrl::fromLocalFile(fileInfo.absoluteFilePath()); /* * 单一获取文件后缀 */ if (fileInfo.suffix().toLower() == QLatin1String("m3u")) { Playlist->load(url); } else Playlist->addMedia(url); } else { QUrl url(argument); if (url.isValid()) { Playlist->addMedia(url); } } } }
明白一点,fileNames是文件路径集合即可,不然下面的这句代码执行的将毫无意义,因为是要获取文件相关信息的
QFileInfo fileInfo(argument);
此函数的目的就是加载对应视频的url,将其加载进入该类内部定义的Playlist,作为类内部的私有变量(由该类定义的变量还是能够借助类内部函数使用的)
void MainWindow::on_open_clicked()
{
/*
* 留待分析
*/
/*
* 获取文件路径集合::QStringList
*/
QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("视屏文件选择"));
addToPlaylist(fileNames);
}
在打开函数内部触发调用(打开按钮触发打开函数),执行完毕即加载相应的视频信息进入预定位置(主要是变量得到了响应值即可)
播放按钮即命令播放即可,哦,可能难以想象,加载有点代码量,而播放一句话就行了?嗯?确实是!
void MainWindow::on_play_clicked()
{
m_playerState = QMediaPlayer::PlayingState;
player->play();
}
停止也是,直接命令停止即可,这里不再复述,对了这里的变量播放状态变量没用到,这里就不解释了,以后完善的时候会进一步使用的!
QMediaPlayer::State m_playerState;
到这里,这个播放器已经基本完成了,但是,实际上还有诸多问题没有解决,因为时间有限,所以暂且不做进一步的优化了,嗯,此处附上一波完整的代码链接
这里我想说一句“刘美含真好看!”