使用System.Window.Media.MediaPlayer提取持续时间有时不起作用

时间:2011-09-09 11:00:02

标签: media-player duration windows-media-player

我使用System.Window.Media.MediaPlayer对象来提取Windows应用程序中各种本地声音文件的持续时间。

TimeSpan duration = new TimeSpan(0);
MediaPlayer player = new MediaPlayer();

player.Open(new Uri(filename));

if (player.NaturalDuration.HasTimeSpan)
{
    duration = player.NaturalDuration.TimeSpan;
}

player.Close();

但问题是有时候(即使是相同的文件和不同的代码位置)持续时间为“0”。

有人有想法吗?

Thx 4答案

2 个答案:

答案 0 :(得分:1)

首先检查文件是否已加载。只需监控OpenStateChanged事件即可。然后打电话给

duration = player.CurrentMedia.Duration;

或字符串结果:

duration = player.CurrentMedia.DurationString;

答案 1 :(得分:1)

我想你终于找到了问题的解决方案。无论如何,我给那些到达这里的人留下了答案。

来自documentation

  

备注:在MediaOpened发生之前无法确定NaturalDuration。

所以你必须等到媒体真正开启:

player.MediaOpened += new EventHandler(player_MediaOpened);

...

private void player_MediaOpened(Object sender, EventArgs e)
{
    if (player.NaturalDuration.HasTimeSpan)
    {
        duration = player.NaturalDuration.TimeSpan;
    }
    else
    {
        // Duration is Automatic
    }
}