如何在不使用QMediaPlayer的情况下获取Qt中音频和视频文件的持续时间
How to get Duration of audio and video files in Qt without using 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 更新上述代码的替代解决方案???
使用 Qt
您可以尝试探索Qt的Phonon Module。
我认为Phonon的MediaObject类中的这个函数可能有助于获得你想要实现的目标。
附言请阅读该函数末尾写的警告,以避免得到错误的结果。
编辑 1:不使用Qt
在此处阅读有关 TagLib 库的信息。检查他们提到的有关获取文件长度的此功能。它也在LGPL下。
相关文章:
- Qt C++ 创建方形音频音调波.播放并保存它
- 如何在 QT C++中录制和保存音频?
- QTCPSocket(Qt-C++)中的音频文件逐字节传输
- 以Qt格式捕获音频信号
- QT 创建器:程序启动时音量滑块仍播放音频
- NAS(使用 qt/linux)- 无法建立简单的音频服务器连接测试
- 从麦克风到整数数组 (C++/Qt) 的示例音频
- 如何使用QT或Linux上的任何其他CPP框架播放WMA音频文件
- VoIP:如何从QT多媒体中的相机中捕获实时音频/视频流字节
- Qt在控制台应用程序中录制音频
- QT 5.7分析音频输出
- 如何在不使用QMediaPlayer的情况下获取Qt中音频和视频文件的持续时间
- QT声子游戏音频
- 无法在QT中记录从麦克风到Qfile的音频
- 在C++和QT中播放WAV音频文件
- 用Qt开发音频游戏
- qt音频输出示例未构建--缺少生成器类声明
- Qt缓冲区不足播放RAW音频
- Qt iOS问题 - 使用QAudioRecorder会更改音频输出设备
- Qt 音频输入错误 : pcm_params.c :2348 : sndrv_pcm_hw_params: L'assertion « err >= 0