Извлечение продолжительности с помощью 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
}
}