【问题标题】:AVFoundation Camera in view视图中的 AVFoundation 摄像头
【发布时间】:2021-05-09 11:04:40
【问题描述】:

我在尝试查看以显示我的后置摄像头提要时遇到了很多问题。我查看了整个苹果文档并想出了这个,但它似乎所做的只是制作一个黑屏。我还在我的 plist 中添加了烫发,并在真实设备上运行。我不需要它来拍照或保存任何东西。只需简单地在视图中实时显示相机即可。

import UIKit
import AVFoundation

class ViewController: UIViewController {

    
    @IBOutlet weak var cameraView: UIView!
    
    
    var captureSession = AVCaptureSession()
    var previewLayer = AVCaptureVideoPreviewLayer()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        loadCamera()
    }

    func loadCamera() {
        
        let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .back)
        
        do {
            let input = try AVCaptureDeviceInput(device: device!)
            
            if captureSession.canAddInput(input) {
                captureSession.addInput(input)
                
                previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
                previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
                previewLayer.connection?.videoOrientation = AVCaptureVideoOrientation.portrait
                cameraView.layer.addSublayer(previewLayer)
                
            }
            
        } catch {
            print(error)
        }
    }  
}

【问题讨论】:

    标签: swift avfoundation


    【解决方案1】:

    欢迎!

    问题在于您当前的设置实际上没有发生(视频帧的)数据流。您至少需要将一个输入和一个输出附加到您的捕获会话。预览层本身不算作输出,因为它只会附加到输入和输出之间的现有连接。

    所以要修复它,您可以在会话中添加一个AVCapturePhotoOutput(可能在添加层之前),但永远不要使用它。然后预览层应该开始显示帧。

    您可能还想在添加输入和输出之前将会话的sessionPreset 设置为.photo。这将导致会话生成具有理想尺寸的视频帧,以便在您的设备屏幕上显示。

    【讨论】:

    • 感谢您的精彩回复。我对 swift 的了解非常有限,所以我在让它继续工作时遇到了问题。我想我只是不明白该怎么做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多