投屏时MediaPlayer事件处理器无法触发的问题排查
UWP MediaPlayer投屏时事件触发异常问题
基于微软官方BasicMediaCasting示例项目修改,修改后的项目已上传至Github仓库。
问题详情
因需求在UWP应用中使用MediaPlayer替代MediaElement,发现未投屏时MediaPlayer的所有注册事件处理器均可正常触发,但投屏至智能电视时,事件处理器无法触发或触发不稳定:
- mediaPlayer.PlaybackSession.PositionChanged、mediaPlayer.MediaEnded事件触发不稳定,可通过在视频播放时第二次点击“Load Video”按钮(即再次执行
StartMediaPlayer())重现; - mediaPlayer.VolumeChanged事件从未触发。
主要代码修改
private async void castingDevicesList_SelectionChanged(object sender, SelectionChangedEventArgs e) { ... // 创建与选中设备的投屏连接 connection = ((CastingDevice)castingDevicesList.SelectedItem).CreateCastingConnection(); // 注册连接事件 connection.ErrorOccurred += Connection_ErrorOccurred; connection.StateChanged += Connection_StateChanged; // 将已加载的视频投送到选中设备 CastingSource source = mediaPlayer.GetAsCastingSource(); await connection.RequestStartCastingAsync(source); } private void StartMediaPlayer(TimeSpan position) { mediaPlayer.Pause(); mediaPlayer.Source = MediaSource.CreateFromUri(new Uri("ms-appx:///1.mp4")); mediaPlayer.PlaybackSession.Position = position; mediaPlayer.Volume = 0.05; mediaPlayer.PlaybackSession.NaturalVideoSizeChanged -= MediaPlayer_PlaybackSession_NaturalVideoSizeChanged; mediaPlayer.PlaybackSession.NaturalVideoSizeChanged += MediaPlayer_PlaybackSession_NaturalVideoSizeChanged; mediaPlayer.MediaEnded -= MediaPlayer_MediaEnded; mediaPlayer.MediaEnded += MediaPlayer_MediaEnded; mediaPlayer.MediaOpened -= MediaPlayer_MediaOpened; mediaPlayer.MediaOpened += MediaPlayer_MediaOpened; mediaPlayer.VolumeChanged -= MediaPlayer_VolumeChanged; mediaPlayer.VolumeChanged += MediaPlayer_VolumeChanged; mediaPlayer.PlaybackSession.PositionChanged -= PlaybackSession_PositionChanged; mediaPlayer.PlaybackSession.PositionChanged += PlaybackSession_PositionChanged; mediaPlayer.PlaybackSession.MediaPlayer.VolumeChanged -= MediaPlayer_VolumeChanged2; mediaPlayer.PlaybackSession.MediaPlayer.VolumeChanged += MediaPlayer_VolumeChanged2; mediaPlayer.Play(); Debug.WriteLine($"{nameof(StartMediaPlayer)}: from position: {position.TotalSeconds} s"); }
问题重现步骤
进入3) 自定义选择器投屏场景:点击“Load Video”按钮选择任意文件,即可播放内置视频。

内容的提问来源于stack exchange,提问作者Tom Xue
相关产品推荐
相关产品推荐

