You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

投屏时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:35:10