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

Swift从本地视频生成缩略图遇AVFoundationErrorDomain错误求助

解决本地视频生成缩略图时AVFoundationErrorDomain -11850错误

错误原因分析

错误码-11850结合底层-12939(对应kFigPlaybackErrorCannotOpenFile),核心问题是AVFoundation无法正常读取目标视频文件,常见诱因包括文件路径无效、权限不足、视频格式不兼容或第一帧无法解码。

具体解决步骤

1. 验证文件路径与权限

  • 先确认URL指向的文件真实存在:
    guard FileManager.default.fileExists(atPath: url.path) else {
        print("文件不存在:\(url.path)")
        return nil
    }
    
  • 若视频来自文件App/iOS沙箱外,需启用安全范围访问(iOS 14+):
    guard url.startAccessingSecurityScopedResource() else {
        print("无法获取文件访问权限")
        return nil
    }
    // 生成缩略图的代码逻辑...
    url.stopAccessingSecurityScopedResource() // 操作完成后必须关闭权限
    
  • 若视频来自相册,确保已申请PHPhotoLibrary访问权限,且获取的是正确的文件URL(而非PHAsset的标识符)。

2. 调整AVAssetImageGenerator配置

  • 启用轨道旋转适配:避免缩略图方向错误,同时修复部分解码兼容性问题
  • 避开视频第一帧:部分视频第一帧为空或无法解码,尝试取0.1秒处的帧
  • 限制缩略图尺寸:减少内存占用,提升生成效率

修改后的代码示例:

func getImageFromUrl(url: URL) -> UIImage? {
    print("视频路径:\(url)")
    
    // 验证文件存在
    guard FileManager.default.fileExists(atPath: url.path) else {
        print("文件不存在:\(url.path)")
        return nil
    }
    
    let videoAsset = AVURLAsset(url: url)
    let thumbnailGenerator = AVAssetImageGenerator(asset: videoAsset)
    
    // 关键配置
    thumbnailGenerator.appliesPreferredTrackTransform = true
    thumbnailGenerator.maximumSize = CGSize(width: 300, height: 300) // 按需调整尺寸
    
    // 取0.1秒处的帧,规避第一帧解码问题
    let targetTime = CMTimeMake(value: 1, timescale: 10)
    
    do {
        let cgImage = try thumbnailGenerator.copyCGImage(at: targetTime, actualTime: nil)
        return UIImage(cgImage: cgImage)
    } catch let error as NSError {
        print("生成缩略图失败:\(error.localizedDescription)")
        print("错误详情:\(error.userInfo)")
    }
    
    return nil
}

3. 额外排查点

  • 测试视频本身是否正常:用系统自带播放器打开该视频,确认能正常播放(排除文件损坏或格式不兼容)
  • 检查线程环境:尽量在后台线程执行缩略图生成操作,避免阻塞主线程
  • 若视频是下载所得:确保文件已完全写入本地,未因下载中断导致文件损坏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:09:47