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

WinUI3 MediaPlayer加载大视频时崩溃问题求助

WinUI3 MediaPlayer加载大视频崩溃及解码错误解决办法

问题概况

  • 加载400MB左右的小视频运行正常,但加载5GB以上的GoPro视频直接崩溃,内存占用升至1.5GB后触发未处理Win32异常
  • 原实现代码:
<MediaPlayerElement Source="E:\video.mp4" x:Name="mediaPlayer" AreTransportControlsEnabled="True"/>
  • 改用MediaSource.CreateFromStorageFile加载后出现解码错误,更新后的代码:
mediaPlayer.Source = MediaSource.CreateFromStorageFile(file);
mediaPlayer.MediaPlayer.MediaFailed += MediaPlayer_MediaFailed;
mediaPlayer.MediaPlayer.Play();

private void MediaPlayer_MediaFailed(Windows.Media.Playback.MediaPlayer sender, Windows.Media.Playback.MediaPlayerFailedEventArgs args)
{
    Debug.WriteLine(args.Error);
}

一、解决大视频加载崩溃问题

1. 强制启用流式加载,限制缓存大小

MediaPlayer默认会预加载大量视频数据到内存,大文件场景下直接导致内存溢出。给MediaSource设置缓存上限,强制采用流式加载模式:

var mediaSource = MediaSource.CreateFromStorageFile(file);
// 设置缓存上限为100MB,可根据实际需求调整
mediaSource.AdvancedSettings.SetValue("StreamingCacheSizeLimit", 100 * 1024 * 1024);
mediaPlayer.Source = mediaSource;

2. 关闭自动预加载,手动触发播放

避免程序启动时就加载全部视频内容,等用户主动触发播放再开始加载,降低初始内存占用:

mediaPlayer.MediaPlayer.AutoPlay = false;
// 在播放按钮的点击事件中再执行播放逻辑
// mediaPlayer.MediaPlayer.Play();

二、修复解码错误

1. 强制使用软件解码

GoPro视频多采用H.265编码,部分系统可能缺少对应的硬件解码组件,尝试强制启用软件解码:

var mediaSource = MediaSource.CreateFromStorageFile(file);
var playbackItem = new MediaPlaybackItem(mediaSource);
var decoderSettings = new MediaDecoderSettings();
decoderSettings.VideoDecoderMode = MediaDecoderMode.ForceSoftware;
playbackItem.VideoTracks.SetDecoderSettings(decoderSettings);
mediaPlayer.MediaPlayer.Source = playbackItem;

2. 打印详细错误信息

原有错误日志过于简略,输出完整错误信息便于定位问题根源:

private void MediaPlayer_MediaFailed(MediaPlayer sender, MediaPlayerFailedEventArgs args)
{
    Debug.WriteLine($"错误代码:{args.Error}");
    Debug.WriteLine($"错误描述:{args.ErrorMessage}");
    Debug.WriteLine($"扩展错误代码:{args.ExtendedErrorCode}");
}

通过扩展错误代码可以精准排查是解码器缺失、编码格式不兼容还是其他底层问题。

三、额外优化提示

  • 不要在UI线程初始化大文件的MediaSource,可通过后台线程完成初始化后,切回UI线程操作MediaPlayer
  • 页面卸载时调用mediaPlayer.MediaPlayer.Dispose(),及时释放资源避免内存泄漏

内容的提问来源于stack exchange,提问作者FrozenAssassine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:46:21