UWP Неподдерживаемый тип видео - какое событие поймать? - PullRequest
0 голосов
/ 29 сентября 2018

Я пишу приложение UWP, в котором есть видеопроигрыватель, и использую стандартный медиаплеер UWP (имя участника - это строка, полученная из диалогового окна ввода):

XAML:

     <MediaPlayerElement x:Name="mediaPlayerElement" 
                        Grid.ColumnSpan="3" 
                        Grid.RowSpan="4" 
                        AreTransportControlsEnabled="True" 
                        RequestedTheme="Dark" 
                        HorizontalAlignment="Stretch" 
                        VerticalAlignment="Stretch"

         <MediaPlayerElement.TransportControls >

            <local:CustomMediaTransportControls IsCompact="False"
                                                IsZoomButtonVisible="True"
                                                IsZoomEnabled="True"
                                                IsPlaybackRateButtonVisible="True"
                                                IsPlaybackRateEnabled="True"
                                                Opacity="0.5"


            </local:CustomMediaTransportControls>
        </MediaPlayerElement.TransportControls>
    </MediaPlayerElement>

И код c # (membername - это строка, полученная из другого места в приложении, и это правильный путь, проверенный много раз. Он получается из средства выбора.):

     StorageFile myvid = await StorageFile.GetFileFromPathAsync(membername)
     mediaPlayerElement.MediaPlayer.Source = MediaSource.CreateFromStorageFile(myvid);
     mediaPlayerElement.MediaPlayer.Play();

Для некоторых файлов, таких как «.flv», на экране появляется ошибка: «Неподдерживаемый тип видео».Я пытаюсь поймать эту ошибку, чтобы использовать MPEG-декодер вместо стандартного.Я знаю, потому что я проверял это, что декодер MPEG будет делать эту работу.

Однако я не знаю, какое событие перехватить.Я возился с попыткой посмотреть на значение MediaPlaybackSession.MediaPLaybackState, и оно всегда равно 0 ..?!?Я также пытался перехватить событие MediaPlayer.MediaFailed, и, похоже, оно не генерируется для этой ошибки.Я не уверен, где искать.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Вы можете обработать событие MediaPlayer.MediaFailed непосредственно следующим образом:

StorageFile myvid = await StorageFile.GetFileFromPathAsync(membername);
mediaPlayerElement.MediaPlayer.Source = MediaSource.CreateFromStorageFile(myvid);
mediaPlayerElement.MediaPlayer.MediaFailed += MediaPlayer_MediaFailed;
mediaPlayerElement.MediaPlayer.Play();
private void MediaPlayer_MediaFailed(Windows.Media.Playback.MediaPlayer sender, Windows.Media.Playback.MediaPlayerFailedEventArgs args)
{
    Debug.WriteLine(args.Error);
}
...