How to access Mac default camera using swift xcode

穿精又带淫゛_ 提交于 2019-12-23 10:22:02

问题


Today i am coding for Mac first time. What I am trying to do is access the default camera and show a preview. 2nd step i will record or take a snap if i need. For the 1st step i have written the following code

import Cocoa
import AVFoundation
class ViewController: NSViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        var session:AVCaptureSession = AVCaptureSession()
        session.sessionPreset = AVCaptureSessionPresetLow
        var device:AVCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
        //Preview
        var previewLayer:AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: session)
        var myView:NSView = self.view
        previewLayer.frame = myView.bounds
        previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
        self.view.layer?.addSublayer(previewLayer)
        session.startRunning()
    }
    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }
}

I don't see this code is turning on my laptop default camera or displaying anything on the view. What am i doing wrong here? Any direction or any example i can look for even if its in Obj-C would be really helpful. TIA.


回答1:


In your code the

self.view.layer?.addSublayer(previewLayer)

will not be executed since self.view.layer is nil so that won't be executed.

Alas, this does not seem to be only issue since even when adding a layer the camera does not start working. You will likely have to dig into this:

https://developer.apple.com/library/mac/samplecode/AVRecorder/Introduction/Intro.html




回答2:


Be sure to check that your view has a Core Animation Layer in IB:




回答3:


if anyone still looking to launch webcam in Mac OS X using swift 3

here is the code

@IBOutlet var previewCam: PreviewCam!
override func viewDidLoad()
{
    super.viewDidLoad()
    view.wantsLayer = true
    previewCam.wantsLayer = true
    let session:AVCaptureSession = AVCaptureSession()
    session.sessionPreset = AVCaptureSessionPresetLow
    let device:AVCaptureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
    print("device found = ",device)

    let device_input : AVCaptureDeviceInput = try! AVCaptureDeviceInput(device: device)


    let previewLayer:AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: session)

    previewLayer.frame = previewCam.bounds
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    self.previewCam.layer?.addSublayer(previewLayer)
    if session.canAddInput(device_input)
    {
        session.addInput(device_input)
    }
    session.startRunning()
}

for those who asked about preview cam

#import "PreviewCam.h"

@implementation PreviewCam

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

    // Drawing code here.
    CGContextRef context = [[NSGraphicsContext currentContext]graphicsPort];
    CGContextSetRGBFillColor(context, 0, 0, 0, 0.75);
    CGContextFillRect(context, NSRectToCGRect(dirtyRect));
    self.layer.borderColor = [[NSColor whiteColor]CGColor];
    self.layer.borderWidth = 2.0f;
}


来源:https://stackoverflow.com/questions/28783312/how-to-access-mac-default-camera-using-swift-xcode

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!