【问题标题】:Add layer on AVCaptureVideoPreviewLayer and save in the live video在 AVCaptureVideoPreviewLayer 上添加图层并保存在实时视频中
【发布时间】:2020-07-17 22:06:02
【问题描述】:

我发现了两个类似的线程:Save what user see, Add layer on top 但它们没有帮助。

以下部分显示了captureSession 中的PreviewLayer。然后我在上面放了一个蓝色的CGLayer。一切都正确显示。

func showCameraOutput(in videoView: UIView) {
    previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession)
    previewLayer?.videoGravity = .resizeAspectFill
    previewLayer?.frame = CGRect(x: 0, y: 0, width: videoView.frame.width, height: videoView.frame.height)
    previewLayer?.connection?.videoOrientation = .landscapeRight
            
    let blueLayer = CALayer()
    blueLayer.backgroundColor = UIColor.blue.withAlphaComponent(0.5).cgColor
    blueLayer.frame = CGRect(x: 0, y: 0, width: videoView.frame.width/2, height: videoView.frame.height)
    previewLayer?.addSublayer(blueLayer)
   
    videoView.layer.sublayers?.removeAll(where: { $0 is AVCaptureVideoPreviewLayer })
    
    if let previewLayer = previewLayer {
        videoView.layer.insertSublayer(previewLayer, at: 0)
    }
}

当我保存视频时,蓝色层不再存在。

func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
    UISaveVideoAtPathToSavedPhotosAlbum(outputFileURL.path, nil, nil, nil)
    
}

不能将图层保存到实时视频吗?还是保存了其他东西?那我该如何访问这个资源呢?

我不想之后编辑视频。目标是在实时视频上放置一个图层并将其保存。也许我只是需要谷歌的提示。

【问题讨论】:

    标签: swift camera avfoundation video-recording


    【解决方案1】:

    在您的设置中,视频帧通过您的应用采用两条不同的路径:

    1. 相机(AVCaptureDeviceInput)→AVCaptureVideoPreviewLayer→核心动画(CALayer合成和混合)→屏幕
    2. 相机 (AVCaptureDeviceInput) → AVCaptureFileOutput(将视频帧写入文件)

    所以路径 2 对核心动画层上发生的事情一无所知。它只是将未修改的相机帧写入文件。

    为了让合成/混合阶段在预览和输出中可见,恐怕您需要更精细的设置。它看起来像这样:

    AVCaptureDeviceInputAVCaptureVideoDataOutputAVCaptureVideoDataOutputSampleBufferDelegateCVPixelBuffer → 合成/混合(可能与核心图像)→ 新的,已编辑 CVPixelBuffer

    然后新的CVPixelBuffer 将转到两个目标:

    1. 显示为MTKView
    2. AVAssetWriterInputPixelBufferAdaptorAVAssetWriterInputAVAssetWriter → 视频文件

    我希望这有助于谷歌搜索。 ?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2016-02-25
      • 2017-03-04
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      相关资源
      最近更新 更多