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

iOS 15.1 调用 PHLivePhoto.request 无法生成 Live Photo 问题求助

问题根因

iOS 15.1 系统对 PHLivePhoto 的生成规则做了更严格的校验,原先iOS 15.0及以下版本兼容的不规范参数/配置,在15.1之后会直接返回空的Live Photo对象。

可行解决方案
  • 修正资源数组顺序:request(withResourceFileURLs:)方法的资源数组必须先传图片URL,再传视频URL,你现有代码顺序颠倒,这是最高发的触发原因。iOS 15.0及之前版本对顺序不做强制校验,15.1之后顺序错误会直接生成失败。
  • 校验资源合规性:
    • 图片和视频的分辨率必须完全匹配,像素误差不能超过1
    • 视频时长需控制在1~3秒范围内,推荐为1.5秒
    • 图片EXIF中的ContentIdentifier字段值,必须和视频元数据中的com.apple.quicktime.content.identifier字段值完全一致
  • 修正targetSize参数:不要传CGSize.zero,15.1之后对零尺寸的处理逻辑有变更,建议传入和图片实际分辨率一致的尺寸,或直接传入UIScreen.main.bounds.size
  • 回调中增加错误判断,可通过PHLivePhotoInfoErrorKey获取具体失败原因
修正后可运行代码
// 注意数组顺序:先图片,后视频
_ = PHLivePhoto.request(withResourceFileURLs: [pairedImageURL, pairedVideoURL], placeholderImage: nil, targetSize: UIScreen.main.bounds.size, contentMode: PHImageContentMode.aspectFit, resultHandler: { (livePhoto: PHLivePhoto?, info: [AnyHashable : Any]) -> Void in

    if let isDegraded = info[PHLivePhotoInfoIsDegradedKey] as? Bool, isDegraded {
        return
    }
    // 新增错误打印,方便排查问题
    if let error = info[PHLivePhotoInfoErrorKey] as? Error {
        print("Live Photo生成失败:\(error.localizedDescription)")
        DispatchQueue.main.async {
            completion(nil, (pairedImageURL, pairedVideoURL))
        }
        return
    }

    DispatchQueue.main.async {
        completion(livePhoto, (pairedImageURL, pairedVideoURL))
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:04