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

UWP图片转视频Win11预览报错:0xC00D36B4及内存不足

UWP MediaComposition预览在Windows 11中偶发异常的解决方案

针对你遇到的Win11中MediaComposition预览偶发0xC00D36B4(媒体类型无效)和内存不足问题,结合Win11媒体栈的特性,给出以下修复方案:

1. 限制预览分辨率,保持宽高比

直接使用MediaPlayerElement的实际尺寸可能生成过高分辨率的预览流,触发内存不足或格式不支持错误。建议限制最大预览分辨率(如1080P),并保持与合成内容一致的宽高比:

public void UpdateMediaElementSource()
{
    // 限制预览最大分辨率为1080P
    const int MaxPreviewWidth = 1920;
    const int MaxPreviewHeight = 1080;
    
    int targetWidth = Math.Min((int)mediaPlayerElement.ActualWidth, MaxPreviewWidth);
    int targetHeight = Math.Min((int)mediaPlayerElement.ActualHeight, MaxPreviewHeight);

    // 匹配合成内容的宽高比,避免拉伸导致格式错误
    if (composition.Clips.Any())
    {
        var clip = composition.Clips[0];
        double aspectRatio = (double)clip.NaturalSize.Width / clip.NaturalSize.Height;
        if ((double)targetWidth / targetHeight > aspectRatio)
        {
            targetWidth = (int)(targetHeight * aspectRatio);
        }
        else
        {
            targetHeight = (int)(targetWidth / aspectRatio);
        }
    }

    // 先释放旧资源再生成新流
    mediaStreamSource?.Dispose();
    mediaStreamSource = composition.GeneratePreviewMediaStreamSource(targetWidth, targetHeight);
    mediaPlayerElement.Source = MediaSource.CreateFromMediaStreamSource(mediaStreamSource);
}

2. 严格管理MediaStreamSource资源

Win11对媒体资源的生命周期管理更严格,每次更新预览前必须释放旧的MediaStreamSource,避免内存泄漏:

private MediaStreamSource mediaStreamSource;

public void UpdateMediaElementSource()
{
    // 释放旧资源
    if (mediaStreamSource != null)
    {
        mediaStreamSource.Dispose();
        mediaStreamSource = null;
    }

    // 生成新预览流...
}

3. 完善MediaFailed事件的错误捕获

当前空实现无法定位具体错误原因,建议添加详细日志和用户提示:

private async void MediaPlayer_MediaFailed(MediaPlayer sender, MediaPlayerFailedEventArgs args)
{
    string errorDetail = $"错误码: {args.ExtendedErrorCode:X}, 消息: {args.ErrorMessage}";
    System.Diagnostics.Debug.WriteLine(errorDetail);
    
    // 主线程提示用户
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
    {
        var dialog = new Windows.UI.Popups.MessageDialog(errorDetail, "预览失败");
        await dialog.ShowAsync();
    });
}

4. 预处理图片源

Win11对部分图片格式/高分辨率图片的兼容性与Win10存在差异:

  • 确保所有图片为UWP支持的格式(JPG、PNG、BMP),避免使用WebP、RAW等小众格式
  • 对超过4K分辨率的图片先进行压缩,再生成MediaClip

5. 延迟初始化预览

MediaPlayerElement未完全加载时设置源可能触发异常,可在控件Loaded事件后延迟初始化:

private async void MediaPlayerElement_Loaded(object sender, RoutedEventArgs e)
{
    await Task.Delay(100); // 短延迟确保控件初始化完成
    UpdateMediaElementSource();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:40:21