【问题标题】:UWP Unsupported Video Type - which event to catch?UWP 不支持的视频类型 - 要捕获哪个事件?
【发布时间】:2018-09-29 18:46:20
【问题描述】:

我正在编写一个带有视频播放器的 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是从app的其他地方获取的字符串,是合法的路径,这个检查了很多次,是从picker获取的):

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

对于某些文件,例如“.flv”,屏幕上出现错误:“不支持的视频类型”。我试图捕捉这个错误,以便使用 MPEG 解码器而不是标准解码器。我知道,因为我测试过,MPEG 解码器可以完成这项工作。

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

【问题讨论】:

    标签: c# uwp media-player


    【解决方案1】:

    你可以像下面这样直接处理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);
    }
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 我调查了这个。它要求您创建一个 MediaPlaybackItem,然后获取视频轨道列表,然后查看当前视频轨道以获取其解码器状态....当每个媒体播放项目只有一个视频轨道时,效率非常低。还有更直接的吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 2015-08-08
      相关资源
      最近更新 更多