Как получить Длительность аудио и видео файлов в Qt без использования QMediaPlayer

Я работал над приложением, где я могу просматривать системные диски, используя QDirIterator и искать аудио / видео файлы, получить детали, используя QStandardItemModel и отобразить его в QTreeview. Мне удалось отобразить имя файла, тип, размер, дату изменения, но ПРОДОЛЖИТЕЛЬНОСТЬ это то, что я не могу сделать.

Вот код:

// 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. Любое другое альтернативное решение, которое может помочь мне обновить мой код с Duration ???

3

Решение

Использование Qt

Вы можете попробовать изучить Qt’s Фононный модуль.

Я думаю эта функция в классе Phonon MediaObject может помочь получить то, что вы пытаетесь достичь.

Постскриптум Прочитайте предупреждение, написанное в конце этой функции, чтобы избежать ошибочных результатов.


Изменить 1:
Без использования Qt

Читать о библиотеке TagLib Вот. Проверьте этот Функция, которую они упомянули относительно получения длины файла. И это тоже под LGPL.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]