我正在尝试构建一个类,其中我的缩略图类正在捕获一个帧作为用户上传的视频的缩略图,到目前为止一切都很好。我首先在 wpf 应用程序上写下了应用程序,然后决定转到我网站上的一个类,即 thumbnail.cs。代码如下所示。
我的问题是,MediaOpenned 事件没有触发,因此执行无法按预期继续,我尝试自己调用它并放置一个 thread.sleep 来处理视频缓冲的延迟,并且代码按我想要的方式工作。但我不想依赖睡眠,因为它可能由于服务器和沉重而不稳定。我需要它来处理事件或类似的事情。
为什么事件没有在.net上触发的任何想法或建议?在 wpf 上完美工作?和做什么。
当然还有数百万的感谢!
thumbnail.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 或我的 thumbnail.cs(托管在 app_code 中并由 asmx webservice 调用)相关的事件处理程序。
通过使用线程并实现我自己制作的事件处理程序来检查电影是否已加载,尝试了一些解决方法。没有运气,MediaPlayer 不允许我在另一个线程中触摸它的内部......而且我不想做更多破解方法,同时能够使用简单的事件处理程序来解决!
搜索了最深的谷歌,在 2006 年发现了一个线程,有人认为这可能是 x64 的问题(我正在使用 x64),但我在 msdn 上找不到任何关于此的内容,地狱已经 5 年了!
总而言之,我的班级或我的 MediaPlayer 控件可能没有触发大规模事件。我需要一个救星来帮我赶上 mediaOpenned 事件。
再次感谢你。