WWDualCamera

Swift-5.6 iOS-14.0 Swift Package Manager-SUCCESS LICENSE

Introduction - 简介

WWZHConverter

Installation with Swift Package Manager

dependencies: [
    .package(url: "https://github.com/William-Weng/WWDualCamera.git", .upToNextMajor(from: "1.2.0"))
]

Parameter - 可用参数

参数 说明
multiSession AVCaptureMultiCamSession
isMultiCamSupported 是否支持多镜头同时动作
isRunning 是否正在预览画面
supportCount 当前设备支持的最大同时使用镜头数

Function - 可用函数

函数 说明
start() 开始执行
stop() 关闭执行
addInputs(_:isConnections:) 加入额外装置输入 (可以不连接)
addOutputs(_:isConnections:) 加入额外资源输出 (可以不连接)
configuration(action:) 相关的设定 (切换硬件)
sessionOutputs(delegate:inputs:videoGravity:stabilizationMode:) 产生输出信息
removeInputs(_:) 移除输入装置
removeAllInputs() 移除所有输入装置
removeOutputs(_:) 移除输出装置
removeAllOutputs() 移除所有输出装置
canAddConnection(_:) 加入新的连接
canRemoveConnection(_:) 安全的移除连接
cost() 硬件 / 系统的用量指标

Example

import UIKit
import AVFoundation
import WWDualCamera

final class ViewController: UIViewController {

    @IBOutlet weak var mainView: UIView!
    @IBOutlet weak var subView: UIView!
    
    private var cameraOutputs: [AVCaptureVideoDataOutput] = []
    private var cameraPreviewLayers: [AVCaptureVideoPreviewLayer] = []
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        initSetting()
        _ = WWDualCamera.shared.start()
    }
}

private extension ViewController {
    
    func initSetting() {
        
        let inputs: [WWDualCamera.CameraSessionInput] = [
            (frame: mainView.frame, deviceType: .builtInWideAngleCamera, position: .back),
            (frame: subView.frame, deviceType: .builtInWideAngleCamera, position: .front),
        ]
        
        let outputs = WWDualCamera.shared.sessionOutputs(inputs: inputs)
        
        for (index, info) in outputs.enumerated() {
            
            guard let output = info.output,
                  let previewLayer = info.previewLayer
            else {
                return
            }
            
            if (index == 1) { previewLayer.cornerRadius = subView.frame.width * 0.5 }
            
            cameraOutputs.append(output)
            cameraPreviewLayers.append(previewLayer)
            view.layer.addSublayer(previewLayer)
        }
    }
}