2014-02-13 4 views
0

Я работаю в 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 видеороликов имеют одинаковую информацию в отладчике.

ответ

0

Перемещение player.Close(); в нижней части функции после рендеринга решает проблему для меня.

Смежные вопросы