MediaPlayer 和 RenderTargetBitmap 从视频中获取帧图像的问题
Issues with MediaPlayer and RenderTargetBitmap getting a frame image from video
我正在尝试使用 MediaPlayer
从视频中获取帧作为图像。
MediaPlayer _mediaPlayer = new MediaPlayer();
_mediaPlayer.ScrubbingEnabled = true;
_mediaPlayer.Open(new Uri("c:\Sample.mp4"));
_mediaPlayer.Position = new TimeSpan(0, 1, 0);
var drawingVisual = new DrawingVisual();
System.Threading.Thread.Sleep(1000);
var renderTargetBitmap = new RenderTargetBitmap(_mediaPlayer.NaturalVideoWidth, _mediaPlayer.NaturalVideoHeight, 96, 96, PixelFormats.Default);
我必须使用Sleep(1000)
,否则会出错。有没有解决方案,或者我是否必须找到另一种可能比 MediaPlayer
更好的方法?
当您调用 Open
时,媒体 正在 打开,但根据媒体的大小,这可能需要一定的时间。立即访问媒体或等待一段固定的时间会导致错误行为。相反,您应该在 打开媒体之前 订阅 MediaOpened
事件。
_mediaPlayer.MediaOpened += OnMediaOpened;
当触发 MediaOpened
事件并调用 OnMediaOpended
时,媒体已加载并准备好与之交互。在事件处理程序中,您应该转到位置并渲染位图。
private void OnMediaOpened(object sender, EventArgs e)
{
// ... your drawing code.
}
请记住,加载媒体也可能会失败。要处理这种情况,您可以订阅 MediaFailed
事件,否则将不会创建位图并且您可能不知道原因。
我正在尝试使用 MediaPlayer
从视频中获取帧作为图像。
MediaPlayer _mediaPlayer = new MediaPlayer();
_mediaPlayer.ScrubbingEnabled = true;
_mediaPlayer.Open(new Uri("c:\Sample.mp4"));
_mediaPlayer.Position = new TimeSpan(0, 1, 0);
var drawingVisual = new DrawingVisual();
System.Threading.Thread.Sleep(1000);
var renderTargetBitmap = new RenderTargetBitmap(_mediaPlayer.NaturalVideoWidth, _mediaPlayer.NaturalVideoHeight, 96, 96, PixelFormats.Default);
我必须使用Sleep(1000)
,否则会出错。有没有解决方案,或者我是否必须找到另一种可能比 MediaPlayer
更好的方法?
当您调用 Open
时,媒体 正在 打开,但根据媒体的大小,这可能需要一定的时间。立即访问媒体或等待一段固定的时间会导致错误行为。相反,您应该在 打开媒体之前 订阅 MediaOpened
事件。
_mediaPlayer.MediaOpened += OnMediaOpened;
当触发 MediaOpened
事件并调用 OnMediaOpended
时,媒体已加载并准备好与之交互。在事件处理程序中,您应该转到位置并渲染位图。
private void OnMediaOpened(object sender, EventArgs e)
{
// ... your drawing code.
}
请记住,加载媒体也可能会失败。要处理这种情况,您可以订阅 MediaFailed
事件,否则将不会创建位图并且您可能不知道原因。