gpt4 book ai didi

ios - 如何使用 AVCaptureVideoDataOutput 录制视频

转载 作者:IT王子 更新时间:2023-10-29 05:37:26 26 4
gpt4 key购买 nike

我正在使用 AVCaptureSession 获取相机输出并成功添加了音频和视频输入和输出。

{

var captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) as AVCaptureDevice

var error: NSError? = nil

do {

//remove the previous inputs
let inputs = cameraSession.inputs as! [AVCaptureDeviceInput]
for oldInput:AVCaptureDeviceInput in inputs {
cameraSession.removeInput(oldInput)
}
cameraSession.beginConfiguration()

if cameraPosition.isEqualToString("Front") {
captureDevice = cameraWithPosition(.Front)!
}
else {
captureDevice = cameraWithPosition(.Back)!
}

let deviceInput = try AVCaptureDeviceInput(device: captureDevice)

if (cameraSession.canAddInput(deviceInput) == true) {
cameraSession.addInput(deviceInput)
}

let dataOutput = AVCaptureVideoDataOutput()
dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString) : NSNumber(unsignedInt: kCVPixelFormatType_420YpCbCr8BiPlanarFullRange)]
dataOutput.alwaysDiscardsLateVideoFrames = true

if (cameraSession.canAddOutput(dataOutput) == true) {
cameraSession.addOutput(dataOutput)
}

let audioCheck = AVCaptureDevice.devicesWithMediaType(AVMediaTypeAudio)
if audioCheck.isEmpty {
print("no audio device")
return
}

let audioDevice: AVCaptureDevice! = audioCheck.first as! AVCaptureDevice

var audioDeviceInput: AVCaptureDeviceInput?

do {
audioDeviceInput = try AVCaptureDeviceInput(device: audioDevice)
} catch let error2 as NSError {
error = error2
audioDeviceInput = nil
} catch {
fatalError()
}

if error != nil{
print(error)
let alert = UIAlertController(title: "Error", message: error!.localizedDescription
, preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
if cameraSession.canAddInput(audioDeviceInput){
cameraSession.addInput(audioDeviceInput)
}

cameraSession.commitConfiguration()

let queue = dispatch_queue_create("com.invasivecode.videoQueue", DISPATCH_QUEUE_SERIAL)
dataOutput.setSampleBufferDelegate(self, queue: queue)

}
catch let error as NSError {
NSLog("\(error), \(error.localizedDescription)")
}
}

使用 AVCaptureMovieFileOutput 可以使用

将输出视频保存在照片库中
movieFileOutput.startRecordingToOutputFileURL( outputFilePath, recordingDelegate: self)

但我使用 AVCaptureVideoDataOutput 作为输出,对我从代表那里获得的元数据进行额外的工作并尝试录制视频,但我无法获得任何开始和停止录制视频的方法.

建议如何使用 AVCaptureVideoDataOutput 录制视频

最佳答案

你需要一个 AVCaptureSession 来做到这一点:

//First add AVCaptureVideoDataOutput to AVCaptureSession 
AVCaptureSession *_captureSession;
_captureSession = [[AVCaptureSession alloc] init];
......Configuration......

AVCaptureVideoDataOutput *videoOut = [[AVCaptureVideoDataOutput alloc] init];
......Configuration......
if ( [_captureSession canAddOutput:videoOut] ) {
[_captureSession addOutput:videoOut];
}

//Then use captureSession to start and stop recording
[_captureSession startRunning];
[_captureSession stopRunning];

请查看 RosyWriterCapturePipeline.m,这是一个很好的例子:

RosyWriter

关于ios - 如何使用 AVCaptureVideoDataOutput 录制视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38977579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com