비디오 입력을 캡처해야하지만 화면에 표시하지 않아야하는 Swift 기반 MacOS 응용 프로그램에서 작업 중입니다 ... 비디오를 표시하는 대신 버퍼링 된 데이터를 다른 곳에서 처리하고 결국 SceneKit
장면의 객체에 표시합니다.미리보기 창없이 AVCaptureVideoDataOutputSampleBufferDelegate 사용하기
fileprivate func startSession() {
if let videoSession = videoSession {
if !videoSession.isRunning {
self.videoInputRunning = true
videoSession.startRunning()
}
}
}
나는 또한 내가 캡처하려는 AVCaptureVideoDataOutputSampleBufferDelegate
를 구현 다음 AVCaptureSession
세션을 시작
fileprivate func prepareCamera() {
self.videoSession = AVCaptureSession()
self.videoSession.sessionPreset = AVCaptureSession.Preset.photo
if let devices = AVCaptureDevice.devices() as? [AVCaptureDevice] {
for device in devices {
if device.hasMediaType(AVMediaType.video) {
cameraDevice = device
if cameraDevice != nil {
do {
let input = try AVCaptureDeviceInput(device: cameraDevice)
if videoSession.canAddInput(input) {
videoSession.addInput(input)
}
} catch {
print(error.localizedDescription)
}
}
}
}
let videoOutput = AVCaptureVideoDataOutput()
videoOutput.setSampleBufferDelegate(self as AVCaptureVideoDataOutputSampleBufferDelegate, queue: DispatchQueue(label: "sample buffer delegate", attributes: []))
if videoSession.canAddOutput(videoOutput) {
videoSession.addOutput(videoOutput)
}
}
}
그리고 startSession
방법 :
prepareCamera
방법이있는
CameraInput
클래스가
CMSampleBuffer
나중에 사용하기 :
extension CameraInput: AVCaptureVideoDataOutputSampleBufferDelegate {
internal func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {
print(Date())
}
}
그러나 위임은 결코 호출되지 않습니다. 이 상황이 내가 일 때이 표시되도록 비디오 출력을 표시 할 수 있습니까?
이 클래스의 코드를 작성할 때 어떤 수업을 듣고 있습니까? 입력 장치가 무엇입니까? –
@ElTomato 입력 장치는 내 맥의 직관 형 카메라입니다. 이 클래스는 NSObject에서 상속받은 CameraInput이라는 사용자 정의 클래스입니다. – narner
previewLayer를 사용하고 있지 않습니다. 그것은 무엇을위한 것인가? 내 지식에, 너는 그것을 필요로한다. –