我目前使用MediaElement播放各種不同的文件,我似乎大部分工作。WPF MediaElement的奇怪行爲
我注意到的一件事是音頻文件(在這種情況下,MP3的具體)拒絕在第一次嘗試播放。有時你可以聽到毫秒(非常不引人注目)的聲音。更像是一個blip,然後什麼都沒有。任何後來加載音樂的嘗試都很好,很奇怪。視頻將在第一次嘗試時播放,流媒體也將播放。這似乎只適用於本地音頻文件。
啓動音頻和視頻文件的代碼幾乎完全相同。
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)並在應用程序初始化時播放該文件。這允許加載的第一個音樂文件正常播放。
有沒有其他人遇到過這個?有沒有修復?
編輯:omg我覺得很蠢。顯然罪魁禍首是mediaElement.ScrubbingEnabled = true;哪些(通過文檔)是一個看似有用的選項,也許它只應該啓用遠程流?
不會覺得愚蠢 - ScrubbingEnabled是爲了適用於所有媒體而不僅僅是流媒體。我在這個控制中遇到了很多怪癖(讀取:錯誤)。它有很多成熟的事情要做。 – erodewald