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

如何禁用ARSCNView实时摄像头流并为ARSession传入自定义视频实现录制重放

实现方案

是的,你可以禁用ARSCNView的默认实时摄像头流,同时传入自定义视频作为ARSession的输入,以下分两种场景提供实现方法:

场景1:实现官方提供的ARSession录制重放功能

如果你是要重放之前通过ARSession录制的内容,直接使用系统自带的ARReplayConfiguration即可,无需手动处理帧数据,该配置默认不会调用设备摄像头:

录制ARSession数据

// 指定录制文件输出路径
let outputURL = FileManager.default.temporaryDirectory.appendingPathComponent("ar_recording.mov")
// 启动录制
session.startRecording(to: outputURL, outputFileType: .mov) { error in
    guard error == nil else {
        // 处理录制启动错误
        return
    }
}

// 结束录制
session.stopRecording { savedURL, error in
    guard let savedURL = savedURL, error == nil else {
        // 处理录制结束错误
        return
    }
    // 此处可持久化存储录制好的文件
}

重放已录制的ARSession内容

do {
    // 传入录制好的文件路径创建重放配置
    let replayConfig = try ARReplayConfiguration(contentsOf: recordedFileURL)
    // 配置是否循环重放
    replayConfig.isLoopingEnabled = true
    // 运行session,此时不会启用系统摄像头,自动使用录制文件的帧和跟踪数据
    session.run(replayConfig)
} catch {
    // 处理重放配置创建错误
}

场景2:传入任意自定义视频作为ARSession输入

如果你的自定义视频不是通过ARSession录制生成的,需要手动提供每帧对应的相机参数,步骤如下:

  • 使用ARCustomTrackingConfiguration作为ARSession的运行配置,该配置不会自动启用设备摄像头
  • 用AVAssetReader读取自定义视频的每一帧像素数据
  • 为每帧像素数据构建对应的ARCamera对象,需要填入匹配的相机内参矩阵、外参矩阵、分辨率、曝光时间等参数
  • 调用session.update(_:)方法将自定义构造的ARFrame传入会话,ARSCNView会自动使用传入的帧进行渲染

注意:该场景需要你提前获取自定义视频每一帧对应的相机参数,否则AR tracking无法正常工作,建议优先使用官方的录制重放方案。

内容的提问来源于stack exchange,提问作者Saurabh Singh Rathore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:48:03