결과없이 문제를 처리하는 데 상당한 시간이 걸린 후에 여기에서 질문하기로했습니다.스위프트에서 AVCaptureVideoDataOutput을 사용하여 비디오 녹화하기
우리는 AVCaptureVideoDataOutput
을 사용하여 카메라의 라이브 비디오의 픽셀 데이터를 얻고 captureOutput
기능을 사용합니다. 그러나 우리는 또한 그 데이터를 사용하여 비디오를 녹화하기를 원합니다. 게다가이 비디오 녹화가 AVCaptureMovieFileOutput
으로 녹화 된 비디오만큼 압축되었는지 궁금합니다.
AVCaptureMovieFileOutput
을 사용하여 문제없이 녹화했음을 알려드립니다. 그러나 AVCaptureMovieFileOutput
과 AVCaptureVideoDataOutput
은 동시에 작동하지 않습니다.
아래의 기능은 captureOutput
입니다.
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
CVPixelBufferLockBaseAddress(imageBuffer, CVPixelBufferLockFlags(rawValue: 0))
let baseAddress = CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0)
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer)
videoWidth = CVPixelBufferGetWidth(imageBuffer)
videoHeight = CVPixelBufferGetHeight(imageBuffer)
let colorSpace = CGColorSpaceCreateDeviceRGB()
var bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
let context = CGContext(data: baseAddress, width: videoWidth, height: videoHeight, bitsPerComponent: 8, bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)
let imageRef = context!.makeImage()
CVPixelBufferUnlockBaseAddress(imageBuffer, CVPixelBufferLockFlags(rawValue: 0))
let data = imageRef!.dataProvider!.data as! NSData
let pixels = data.bytes.assumingMemoryBound(to: UInt8.self)
/* Because what we are doing with pixel data irrelevant to the question we omitted the rest of the code to make it simple */
}