В настоящее время я использую MediaElement для воспроизведения различных файлов, и, похоже, большая часть его работает.
Одна вещь, которую я заметил, заключается в том, что аудиофайлы (в данном случае именно mp3) отказываются воспроизводиться с первой попытки. Иногда вы можете услышать миллисекундную (очень непривлекательную) ценность звука. Больше похоже на сообщение, а затем ничего. Любая последующая попытка загрузить музыку работает просто отлично, странно. Видео будет воспроизводиться с первой попытки, и так же будет транслироваться медиа. Похоже, это относится только к локальным аудиофайлам.
Код, который запускает аудио- и видеофайлы, практически идентичен.
private void lvVideos_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var depObj = e.OriginalSource as DependencyObject;
if (depObj != null)
{
var parent = depObj.FindVisualAncestor<ListViewItem>();
if (parent != null && lvVideos.SelectedItem != null)
{
State = PlayState.Closed;
Video video = lvVideos.SelectedItem as Video;
if (video == null) return;
lblTrackName.Text = video.Title;
MediaPlayer.Source = null;
MediaPlayer.Source = new Uri(video.Location);
CurrentMedia = MediaType.Video;
State = PlayState.Playing;
}
}
}
private void lvMusic_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var depObj = e.OriginalSource as DependencyObject;
if (depObj != null)
{
var parent = depObj.FindVisualAncestor<ListViewItem>();
if (parent != null && lvMusic.SelectedItem != null)
{
State = PlayState.Closed;
Music song = lvMusic.SelectedItem as Music;
if (song == null) return;
lblTrackName.Text = song.Title;
MediaPlayer.Source = null;
MediaPlayer.Source = new Uri(song.Location);
CurrentMedia = MediaType.Music;
State = PlayState.Playing;
}
}
}
Как видите, я пытался обнулить свойство источника до загрузки аудио, но безрезультатно. Мне удалось придумать грязное решение проблемы. Который включал установку источника в файл, который гарантированно потерпит неудачу (.exe приложения) и воспроизведение его при инициализации приложения. Это позволяет правильно воспроизводить первый загруженный музыкальный файл.
Кто-нибудь еще сталкивался с этим раньше? и есть ли исправления?
РЕДАКТИРОВАТЬ: Боже мой, я чувствую себя глупо. видимо виновником был mediaElement.ScrubbingEnabled = true; какая (по документации) является, казалось бы, полезной опцией, возможно, она должна быть включена только для удаленных потоков?