UWP 不支持的视频类型 - 要捕获哪个事件?

UWP Unsupported Video Type - which event to catch?

我正在编写一个具有视频播放器的 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”,我在屏幕上收到一条错误消息:"Unsupported Video Type"。我试图捕获此错误以便使用 MPEG 解码器而不是标准解码器。我知道,因为我测试过它,MPEG 解码器可以完成这项工作。

但是,我不知道要捕捉哪个事件。我一直在尝试查看 MediaPlaybackSession.MediaPLaybackState 的值,但它始终等于 0..?!?我也一直在尝试捕获 MediaPlayer.MediaFailed 事件,但似乎并没有为此错误生成。我不确定在哪里看。有什么想法吗?

尝试处理 VideoTrack.OpenFailed 事件。

参见Handle unsupported codecs and unknown errors when opening media items

以及如何 Query for codecs installed on a device

您可以像下面这样直接处理 MediaPlayer.MediaFailed Event

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);
}