0

我正在尝试使用 DirectShow 获取媒体文件的持续时间。我使用以下代码(C#):

var seekingParser = filter as IMediaSeeking;
if (seekingParser != null)
{
   long duration;
   if (seekingParser.SetTimeFormat(TimeFormat.MediaTime) == 0
       && seekingParser.GetDuration(out duration) == 0)
       track.Duration = duration / 10000000f;
}

以秒为单位获取媒体文件持续时间。但是,当我尝试打开 3-4 分钟的 MP3 文件时,track.Duration 变为 11-12 分钟。我尝试了多个文件,效果总是一样的。可能是什么原因?

4

3 回答 3

2

文档中

根据源格式,持续时间可能不准确。例如,如果源包含可变比特率 (VBR) 流,则该方法可能会返回估计的持续时间。

您是否有机会使用 VBR 流?

于 2012-03-01T13:14:00.040 回答
2

您通常从应用程序端使用IMediaPositioninterface (而不是)。IMediaSeeking持续时间总是以秒为单位报告。然而,这不太可能产生影响,可能是使用 Windows Media API, ID3 Tag Support从 ID3 标签读取持续时间。

是否有更可靠的方法来使用 DirectShow API 获取媒体文件的确切持续时间?

Windows Media Player 通过非 DirectShow API 的 Media Foundation 播放 MP3 文件,因此您无法在此处期望或执行与 DirectShow完全相同的操作。

于 2012-03-01T16:30:05.177 回答
0

您可以在干净的 Windows 安装上尝试相同的操作。您可能安装了错误的编解码器(包)。

于 2012-03-01T19:04:29.203 回答