2011-07-16 16 views
1

現在、さまざまなファイルを再生するためにMediaElementを使用していますが、そのほとんどが動作しているようです。WPF MediaElementで奇妙な動作が発生する

私が気づいたことの1つは、オーディオファイル(この場合は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; 
      } 
     } 
    } 

私が見たように、オーディオを無駄に読み込む前に、sourceプロパティをnullにしようとしました。私は回避策の汚れたハックを思いついた。これは、失敗したファイル(アプリケーションの.exe)にソースを設定し、アプリケーションを初期化して再生することに関連していました。これにより、読み込まれた最初の音楽ファイルが正しく再生されます。

これまでに他の人が出会ったことはありますか?修正はありますか?

EDIT:omg私は愚かだと感じます。明らかに、犯人はmediaElement.ScrubbingEnabled = trueでした。それは(ドキュメントによって)一見有益なオプションですが、おそらくリモートストリームに対してのみ有効にする必要がありますか?

+1

それ以上に馬鹿だとは思わないでしょう - ScrubbingEnabledは、ストリームだけでなくすべてのメディアで機能するようになっています。私がこのコントロールで遭遇してきた多くの癖(読み込み:バグ)があります。それには成熟することがたくさんあります。 – erodewald

答えて

1

明らかに、犯人はmediaElement.ScrubbingEnabled = trueでした。それは(ドキュメントによって)一見有益なオプションですが、おそらくリモートストリームに対してのみ有効にする必要がありますか?

+0

ストーリーボードの2つのMediaTimelines(SlipBehavior = "Slip")を使って、この同じ問題が発生しましたが、別のコンテキストがありました。 MediaTimelinesの対象となる2つのMediaElementsがビデオでScrubbingEnabled = trueの場合、それらは即座に同期します。 2つのMediaElementsがScrubbingEnabled = trueのwavファイルの場合、ストーリーボードがその要素のデュレーションマークに達するまで、読み込みが遅くなるように見えるでしょう。ただし、ScrubbingEnabled = falseの場合、両方のオーディオファイルが正しく読み込まれ、同期されます。 –

関連する問題