Странное поведение с WPF MediaElement - PullRequest
2 голосов
/ 16 июля 2011

В настоящее время я использую 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; какая (по документации) является, казалось бы, полезной опцией, возможно, она должна быть включена только для удаленных потоков?

1 Ответ

2 голосов
/ 16 июля 2011

Видимо виновником был mediaElement.ScrubbingEnabled = true;какая (по документации) является, казалось бы, полезной опцией, возможно, ее следует включать только для удаленных потоков?

...