HaishinKit.swift/Platforms/iOS/LFView.swift

86 lines
2.3 KiB
Swift

import UIKit
import Foundation
import AVFoundation
open class LFView: UIView {
open static var defaultBackgroundColor:UIColor = UIColor.black
open override class var layerClass:AnyClass {
return AVCaptureVideoPreviewLayer.self
}
open override var layer:AVCaptureVideoPreviewLayer {
return super.layer as! AVCaptureVideoPreviewLayer
}
public var videoGravity:String = AVLayerVideoGravityResizeAspect {
didSet {
layer.videoGravity = videoGravity
}
}
var orientation:AVCaptureVideoOrientation = .portrait {
didSet {
guard let connection:AVCaptureConnection = layer.connection else {
return
}
if (connection.isVideoOrientationSupported) {
connection.videoOrientation = orientation
}
}
}
var position:AVCaptureDevicePosition = .front
private weak var currentStream:NetStream? {
didSet {
guard let oldValue:NetStream = oldValue else {
return
}
oldValue.mixer.videoIO.drawable = nil
}
}
public override init(frame:CGRect) {
super.init(frame:frame)
awakeFromNib()
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
deinit {
attachStream(nil)
}
override open func awakeFromNib() {
backgroundColor = LFView.defaultBackgroundColor
layer.backgroundColor = LFView.defaultBackgroundColor.cgColor
}
open func attachStream(_ stream:NetStream?) {
guard let stream:NetStream = stream else {
layer.session = nil
currentStream = nil
return
}
stream.lockQueue.async {
stream.mixer.session.beginConfiguration()
self.layer.session = stream.mixer.session
stream.mixer.videoIO.drawable = self
self.orientation = stream.mixer.videoIO.orientation
self.currentStream = stream
stream.mixer.session.commitConfiguration()
stream.mixer.startRunning()
}
}
}
extension LFView: NetStreamDrawable {
// MARK: NetStreamDrawable
func draw(image:CIImage) {
}
func render(image: CIImage, to toCVPixelBuffer: CVPixelBuffer) {
}
}