現在、さまざまなファイルを再生するために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でした。それは(ドキュメントによって)一見有益なオプションですが、おそらくリモートストリームに対してのみ有効にする必要がありますか?
それ以上に馬鹿だとは思わないでしょう - ScrubbingEnabledは、ストリームだけでなくすべてのメディアで機能するようになっています。私がこのコントロールで遭遇してきた多くの癖(読み込み:バグ)があります。それには成熟することがたくさんあります。 – erodewald