Я работаю в WPF и создаю папку галереи, где я хочу показать видеоролики видео в папке, присутствующей в системе. Я написал следующий код на C#, чтобы получить миниатюры видео.видео thumbnail возвращает черное изображение случайным образом
private BitmapSource RenderThumb(Uri uri)
{
var player = new MediaPlayer { Volume = 0, ScrubbingEnabled = true };
player.Open(uri);
Thread.Sleep(3000);
player.Pause();
player.Position = player.NaturalDuration.HasTimeSpan
? TimeSpan.FromSeconds(player.NaturalDuration.TimeSpan.TotalSeconds/2)
: TimeSpan.FromSeconds(2);
int width = player.NaturalVideoWidth;
int height = player.NaturalVideoHeight;
if (width == 0 || height == 0)
{
throw new InvalidOperationException("Width or Height cannot be 0");
}
var rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
var dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
dc.DrawVideo(player, new Rect(0, 0, width, height));
}
player.Close();
rtb.Render(dv);
Freezable frame = BitmapFrame.Create(rtb).GetCurrentValueAsFrozen();
Freezable smallerFrame =
BitmapFrame.Create(new TransformedBitmap(source: frame as BitmapSource, newTransform: new ScaleTransform(0.5, 0.5))).
GetCurrentValueAsFrozen();
return smallerFrame as BitmapSource;
}
однако при попытке загрузить эскизы 10 видео, например, то я получаю пустой/черные эскизы для 2 3 видео каждый раз, а все остальные нагрузки отлично. Такое поведение случайное, и иногда я получаю пустые миниатюры для последних 3 видео, а иногда и для первых 3 видео, поэтому я не уверен, где искать решение моей проблемы. Я попытался посмотреть свойства BitmapSource
, но свойства всех 10 видеороликов имеют одинаковую информацию в отладчике.