ユーザーがアップロードした動画のサムネイルとしてサムネイル クラスがフレームをキャプチャするクラスを構築しようとしていますが、これまでのところうまくいっています。最初にアプリケーションを wpf app に書き留めてから、自分の Web サイトのクラスに、thumbnail.cs として移動することにしました。コードは以下の通りです。
私の問題は、MediaOpenned イベントが発生しないため、実行が想定どおりに続行できないことです。自分で呼び出して、ビデオのバッファリングで遅延を処理するために thread.sleep を配置すると、コードが思い通りに機能しました。しかし、サーバーと重いために不安定になる可能性があるため、スリープに依存したくありません..イベントなどで動作する必要があります。
.net でイベントが発生しない理由について、アイデアや提案はありますか? wpfで完璧に作業しながら?そして何をすべきか。
そしてもちろん、何百万もの感謝!
サムネイル.csクラス;
MediaPlayer myPlayer = new MediaPlayer();
public thumbnail()
{
myPlayer.Open(new Uri(@"C:\movie.wmv"));
myPlayer.Play();
myPlayer.IsMuted = true;
//this doesn't fire up
myPlayer.MediaOpened += new EventHandler(myPlayer_MediaOpened);
/*
when i do like this it works as i want but unstable and heavy because sleep
myPlayer_MediaOpened(null, null);
System.Threading.Thread.Sleep(5000);
*/
}
void myPlayer_MediaOpened(object sender, EventArgs e)
{
myPlayer.Position = TimeSpan.FromSeconds(myPlayer.NaturalDuration.TimeSpan.Seconds / 2);
RenderTargetBitmap RenderTarBitmap = new RenderTargetBitmap(400, 300, 1 / 96, 1 / 96, PixelFormats.Pbgra32);
DrawingVisual DVisual = new DrawingVisual();
DrawingContext DContext = DVisual.RenderOpen();
DContext.DrawVideo(myPlayer, new Rect(0, 0, 400, 300));
DContext.Close();
RenderTarBitmap.Render(DVisual);
myPlayer.Stop();
BitmapFrame BMPFrame = BitmapFrame.Create(RenderTarBitmap);
BitmapEncoder BMPEncoder = new JpegBitmapEncoder();
System.IO.FileStream FStream = new System.IO.FileStream(@"C:\movie.jpg", System.IO.FileMode.Create);
BMPEncoder.Frames.Add(BMPFrame);
BMPEncoder.Save(FStream);
FStream.Flush();
FStream.Close();
}
--------------------------------------------
アップデート:
よし、私は何日もこの問題を解決しようとしてきたが、神は私を助けようとしている人が直接天国に行くことを知っている! とにかく、私は MediaPlayer に関連するイベント ハンドラーまたは私のサムネイル.cs (app_code でホストされ、asmx Web サービスによって呼び出される) を起動できないことがわかりました。
スレッドを使用し、ムービーがロードされているかどうかを確認する独自のイベント ハンドラーを実装することで、いくつかの回避策を試しました..運が悪く、MediaPlayer は別のスレッドでその内部に触れさせません...そして、私はそれ以上やりたくありませんでした簡単なイベントハンドラーで解決しながらハックアプローチ!
最も深いグーグルを検索し、2006年に、x64の問題である可能性があると推測したスレッドを見つけました(まあ、私はx64を使用しています)が、msdnでそれについて何も見つけられませんでした。
要約すると、クラスまたは MediaPlayer コントロールのいずれかで問題が発生しない大規模なイベントが発生している可能性があります。そして、mediaOpenned イベントをキャッチするのを手伝ってくれる救世主が必要です..
ありがとうございました。