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 事件,否则将不会创建位图并且您可能不知道原因。