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

如何在AVPlayer录制完成后转场至新视图控制器并传递视频URL?

解决视频录制完成后传递URL到PreviewViewController的问题

我来帮你搞定这个视频URL传递的问题!你当前的代码里直接初始化PreviewViewController()存在一个关键问题——因为你是通过故事板创建的视图控制器,这种方式初始化的实例不会关联故事板上的界面布局,自然也没法正确完成页面跳转和视频展示。下面是完整的修正方案:

第一步:给PreviewViewController添加接收URL的属性

先在PreviewViewController里定义一个用于接收视频URL的属性,后续可以用这个属性加载并播放视频:

class PreviewViewController: UIViewController {
    // 用于接收来自CameraViewController的视频URL
    var videoURL: URL?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 利用videoURL加载并播放视频(示例代码)
        guard let url = videoURL else { return }
        let player = AVPlayer(url: url)
        let playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = view.bounds
        view.layer.addSublayer(playerLayer)
        player.play()
    }
}

第二步:修正CameraViewController的fileOutput方法

修改代理方法里获取PreviewViewController实例的方式,确保从故事板中获取实例并传递URL:

extension CameraViewController: AVCaptureFileOutputRecordingDelegate {
    func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
        // 先处理录制错误
        if let error = error {
            print("视频录制失败:\(error.localizedDescription)")
            return
        }
        
        // 从故事板获取PreviewViewController实例(注意替换成你自己的Storyboard ID)
        guard let destinationVC = storyboard?.instantiateViewController(withIdentifier: "PreviewViewController") as? PreviewViewController else {
            print("无法从故事板获取PreviewViewController,请检查Storyboard ID是否正确")
            return
        }
        
        // 传递录制好的视频URL
        destinationVC.videoURL = outputFileURL
        
        // 根据你的页面结构选择跳转方式(push或present)
        if let navController = navigationController {
            navController.pushViewController(destinationVC, animated: true)
        } else {
            present(destinationVC, animated: true)
        }
    }
}

关键注意事项

  • 设置Storyboard ID:打开故事板,选中PreviewViewController,在右侧Identity Inspector面板里找到Storyboard ID,填入你代码中使用的字符串(比如示例里的"PreviewViewController"),这是从故事板获取控制器实例的关键。
  • 跳转方式选择:如果你的CameraViewController在导航控制器栈中,用pushViewController;如果是独立的控制器,用present即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:51:48