簡體   English   中英

如何在不使用QMediaPlayer的情況下獲取Qt中的音頻和視頻文件的持續時間

[英]How to get Duration of audio and video files in Qt without using QMediaPlayer

我一直致力於一個應用程序,我可以使用QDirIterator遍歷系統驅動器並查找音頻/視頻文件,使用QStandardItemModel獲取詳細信息並在QTreeview上顯示。 我已成功顯示文件名,類型,大小,日期修改但DURATION是我無法做到的。

這是代碼:

// Displays Files in Detail View on Clicking Drive
void DetailView::on_DriveView_clicked(const QModelIndex &index)
{
int m_count_row = 0;

QStandardItemModel *model = new QStandardItemModel(0,0);
QString sPath = pSystemModel->fileInfo(index).absoluteFilePath();
pSystemTreeViewModel->setRootPath(sPath);
ui->DriveListView->setRootIndex(pSystemTreeViewModel->index(sPath));

pSystemModel->setRootPath(QDir::currentPath());
pSystemModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs );
pSystemTreeViewModel->setFilter( QDir::Files | QDir::NoDotAndDotDot );

QStringList m_list;
QDirIterator dirIt(sPath,QDirIterator::Subdirectories);

while (dirIt.hasNext())
{
    dirIt.next();
    if (QFileInfo(dirIt.filePath()).isFile())
    {
        if (QFileInfo(dirIt.filePath()).suffix() == "mp3" ||(QFileInfo(dirIt.filePath()).suffix() == "mts" ) ||(QFileInfo(dirIt.filePath()).suffix() == "m2ts" ))
        {
            m_list << dirIt.filePath();

            QModelIndex m_index = model->index(m_count_row, 0, QModelIndex());
            model->setHeaderData( 0, Qt::Horizontal, "Name" );
            model->setHeaderData( 1, Qt::Horizontal, "Type" );
            model->setHeaderData( 2, Qt::Horizontal, "Size" );
            model->setHeaderData( 3, Qt::Horizontal, "Date Modified" );

            model->setData( m_index, dirIt.fileName(), Qt::DecorationRole );
            QStandardItem *itemName = new QStandardItem(dirIt.fileName());
            model->setItem(m_count_row, 0, itemName);

            model->setData( m_index, dirIt.fileInfo().suffix(), Qt::DecorationRole );
            QStandardItem *itemExtention = new QStandardItem( dirIt.fileInfo().suffix());
            model->setItem(m_count_row, 1, itemExtention);

            model->setData( m_index, dirIt.fileInfo().size(), Qt::DecorationRole );
            float fFileSize = dirIt.fileInfo().size();
            float fFileKB = fFileSize / 1024; //kilobyte
            float fFileMB = fFileKB / 1024; //megabyte
            float fFinalSize = ceilf(fFileMB * 100) / 100;

            QString sSizeValue = QString::number(fFinalSize);
            QStandardItem *itemSize = new QStandardItem(sSizeValue + " MB");
            model->setItem(m_count_row, 2, itemSize);

            model->setData( m_index, dirIt.fileInfo().lastModified(), Qt::DecorationRole );
            QDateTime m_time = dirIt.fileInfo().lastModified();
            QString sTime = m_time.toString("dd/MM/yyyy hh:mm:ss");
            QStandardItem *itemDate = new QStandardItem(sTime);
            model->setItem(m_count_row, 3, itemDate);

            ui->DriveListView->setModel(model);
            ui->DriveListView->setRootIsDecorated(false);
            m_count_row++;
        }
    }

    pSystemTreeViewModel->setNameFilterDisables(false);
}
}

我不確定是否可以使用上述方式獲得持續時間,因為我找不到任何此類屬性。 他們是通過其他方式做到的嗎? 我不想使用QMediaPlayer。 任何其他替代解決方案,可以幫助我更新我的上述代碼持續時間???

使用Qt

您可以嘗試探索Qt的聲子模塊

我認為Phonon的MediaObject類中的這個函數可能有助於獲得你想要實現的目標。

PS請閱讀該功能結束時寫的警告,以免出錯。


編輯1: 不使用Qt

在這里閱讀TagLib庫。 檢查這個功能,他們就已經獲取文件的長度提及。 它也屬於LGPL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM