Ios connectionWithMediaType返回nil
我尝试使用glkview实现视频提要,但当我尝试旋转旋转时,总是从connectionWithMediaType获得返回nil 这是我的设置Ios connectionWithMediaType返回nil,ios,swift,avcapturesession,avcapture,glkview,Ios,Swift,Avcapturesession,Avcapture,Glkview,我尝试使用glkview实现视频提要,但当我尝试旋转旋转时,总是从connectionWithMediaType获得返回nil 这是我的设置 override public func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. videoFeed = GLKView(frame: self.view.bounds, context: EAGLC
override public func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
videoFeed = GLKView(frame: self.view.bounds, context: EAGLContext(API: .OpenGLES2))
videoFeed.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
videoFeed.translatesAutoresizingMaskIntoConstraints = true
videoFeed.contentScaleFactor = 1.0
self.view.addSubview(videoFeed)
renderContext = CIContext(EAGLContext: videoFeed.context)
sessionQueue = dispatch_queue_create("dCamSession", DISPATCH_QUEUE_SERIAL)
videoFeed.bindDrawable()
}
override public func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
startSession()
}
func createSession() -> AVCaptureSession {
let cam = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
var input:AVCaptureInput
do {
input = try AVCaptureDeviceInput(device: cam)
} catch _ as NSError {
print("Cannot Init Cam")
exit(EXIT_FAILURE)
}
//output
let videoOut = AVCaptureVideoDataOutput()
videoOut.videoSettings = nil
videoOut.alwaysDiscardsLateVideoFrames = true
videoOut.setSampleBufferDelegate(self, queue: sessionQueue)
//connectionWithMediaType always get nil
let connection = videoOut.connectionWithMediaType(AVMediaTypeVideo)
if connection.supportsVideoOrientation {
connection.videoOrientation = .Portrait
}
let session = AVCaptureSession()
//make sure the stream quality good enough.
session.sessionPreset = AVCaptureSessionPresetPhoto
session.addInput(input)
session.addOutput(videoOut)
session.commitConfiguration()
return session
}
func startSession() {
if camSession == nil {
camSession = createSession()
}
camSession.startRunning()
}
我做错了什么
如果我移除了比正常情况下所有的视频方向(但方向是错误的)
没关系,您只需要异步调用它。您的问题是,在将
videoOut
添加为输出之前,您试图访问连接
这也是它异步工作的原因:当您使用MediaType调用
connection时,您的addOutput(videoOut)
已经被调用。您的问题是,在将videoOut
作为输出添加之前,您试图访问连接
这也是它异步工作的原因:当您调用connectionWithMediaType
时,您的addOutput(videoOut)
已经被调用了