Проблемы с MediaPlayer и RenderTargetBitmap при получении изображения кадра из видео - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь использовать 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?

1 Ответ

0 голосов
/ 14 июля 2020

Когда вы вызываете Open, медиа открывается , но в зависимости от размера медиа это может занять определенное время. Незамедлительный доступ к носителю или ожидание в течение определенного времени приведет к ошибочному поведению. Вместо этого вам следует подписаться на событие MediaOpened перед открытием носителя.

_mediaPlayer.MediaOpened += OnMediaOpened;

Когда запускается событие MediaOpened и OnMediaOpended называется, медиа загружено и готово к взаимодействию. В обработчике событий вы должны go переместиться в позицию и отобразить растровое изображение.

private void OnMediaOpened(object sender, EventArgs e)
{
   // ... your drawing code.
}

Имейте в виду, что загрузка мультимедиа также может завершиться ошибкой. Чтобы справиться с этим случаем, вы можете подписаться на событие MediaFailed, иначе растровое изображение не будет создано, и вы можете не знать почему.

...