2011-07-16 97 views
1

我目前使用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;哪些(通過文檔)是一個看似有用的選項,也許它只應該啓用遠程流?

+1

不會覺得愚蠢 - ScrubbingEnabled是爲了適用於所有媒體而不僅僅是流媒體。我在這個控制中遇到了很多怪癖(讀取:錯誤)。它有很多成熟的事情要做。 – erodewald

回答

1

顯然罪魁禍首是mediaElement.ScrubbingEnabled = true;哪些(通過文檔)是一個看似有用的選項,也許它只應該啓用遠程流?

+0

有同樣的問題,但有不同的上下文:故事板中的兩個MediaTimelines,其中SlipBehavior =「Slip」。如果MediaTimelines定位的兩個MediaElement是視頻並且ScrubbingEnabled = true,則它們將立即同步。如果兩個MediaElement都是ScrubbingEnabled = true的wav文件,則會立即加載,另一個會延遲加載,直到Storyboard達到該元素的持續時間標記;但是,如果ScrubbingEnabled = false,則兩個音頻文件都會正確加載並同步。 –