Извлечение продолжительности с помощью System.Window.Media.MediaPlayer иногда не работает - PullRequest
0 голосов
/ 09 сентября 2011

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

1 голос
/ 07 марта 2013

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

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

Примечания: 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
    }
}
1 голос
/ 18 апреля 2012

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

duration = player.CurrentMedia.Duration;

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

duration = player.CurrentMedia.DurationString;

...