WPF MediaElement Воспроизведение Ориентация - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть несколько mp4 (снятых на андроиде, некоторые в портретной, некоторые в альбомной). Когда я использую их в качестве источника тега MediaElement, они всегда воспроизводятся в ландшафтном режиме.Я гуглил это как сумасшедший и ничего не нашел об ориентации видео в MediaElement, так что, надеюсь, я пропустил что-то простое.

Вот мой xaml:

<Canvas x:Name="videoCanvas" Height="Auto" Width="641" Margin="10,0,11,0" HorizontalAlignment="Center" >
    <ContentControl Content="{Binding Media}" Width="{Binding ActualWidth, ElementName=videoCanvas}"  Height="{Binding ActualHeight, ElementName=videoCanvas}" />
</Canvas>

и выделенный код:

  media = new MediaElement();
  media.LoadedBehavior = MediaState.Manual;            
  media.Loaded += Media_Loaded;
  media.MediaOpened += Media_MediaOpened;
  media.Source = new Uri(@"c:\videos\portrait.mp4");
  media.HorizontalAlignment = HorizontalAlignment.Center;
  media.VerticalAlignment = VerticalAlignment.Center;

NaturalVideoHeight / Width в Media_MediaOpened одинаково для обоих видео, поэтому я не думаю, что могу использовать это для поворота MediaElement.

1 Ответ

0 голосов
/ 15 мая 2019

Есть способ, которым я решил эту проблему в моем случае.Вам нужно использовать слепок Microsoft-WindowsAPICodePack-Core и Microsoft-WindowsAPICodePack-Shell:

ShellFile shell = ShellFile.FromFilePath(this.VideoFile);
ShellProperty<ulong?> fs = shell.Properties.System.Size;

// workaround to find out if video in portrait or landscape
BitmapSource bs = shell.Thumbnail.BitmapSource;
double bsWidth = bs.Width;
double bsHeight = bs.Height;
videoOrientation = bsWidth > bsHeight ? VideoOrientation.LANDSCAPE : VideoOrientation.PORTRAIT;

ShellProperty<uint?> fw = shell.Properties.System.Video.FrameWidth;
ShellProperty<uint?> fh = shell.Properties.System.Video.FrameHeight;

Из кода мы видим, что видео имеет представление thumnail, это изображение, которое вы видите при просмотре видео вПроводник Виндоус.С помощью «fw» и «fh» вы можете установить aspectRatio и правильно установить свойства Width и Height od MediaElement.

Надеюсь, это кому-нибудь поможет.

...