Извлечение продолжительности с помощью System.Window.Media.MediaPlayer иногда не работает

Я использую объект 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 ответа

Сначала проверьте, был ли загружен файл. просто следить за OpenStateChanged событие. Затем позвоните что-то вроде

duration = player.CurrentMedia.Duration;

или для строкового результата:

duration = player.CurrentMedia.DurationString;

Я полагаю, вы наконец нашли решение своей проблемы. В любом случае я оставляю ответ для тех, кто прибывает сюда.

Из документации:

Примечания: NaturalDuration не может быть определено до тех пор, пока не произойдет MediaOpened.

Таким образом, вы должны подождать, пока медиа фактически не откроется

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
    }
}
Другие вопросы по тегам