Qt实现视屏播放器(中篇)-控件编码篇

上篇文章写到了整个视频播放器的具体布局,或者说是只实现了外观功能,本篇叙述具体的视频加载功能和按钮功能设置,完成一个基本的视频播放器(能播放暂且算是最基本的要求吧)

#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;

到这里,这个播放器已经基本完成了,但是,实际上还有诸多问题没有解决,因为时间有限,所以暂且不做进一步的优化了,嗯,此处附上一波完整的代码链接

这里我想说一句“刘美含真好看!”

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注


皖ICP备2021003932号
召唤伊斯特瓦尔