SwiftでAVFoundationを使用してビデオを録画する方法を見つけようとしています。カスタムカメラを作ることはできましたが、それを使って静止画を撮る方法しかわからず、ビデオを録画する方法もわかりません。AVCaptureVideoDataOutput
記録からデータを取得するために使用する必要があることは理解していますが、記録を開始してデリゲートメソッドを実装する方法がわかりません。
AVFoundationプログラミングガイド/静止画およびビデオメディアキャプチャ全体がObjective-Cに含まれており、解読できないようです。このタスクを実行するための私の試みは次のとおりです。
まず、カメラ/キャプチャセッションを設定します
override func viewDidLoad() {
super.viewDidLoad()
captureSession.sessionPreset = AVCaptureSessionPresetHigh
let devices = AVCaptureDevice.devices()
for device in devices {
if (device.hasMediaType(AVMediaTypeVideo)) {
if(device.position == AVCaptureDevicePosition.Back) {
captureDevice = device as? AVCaptureDevice
if captureDevice != nil {
beginSession()
}
}
}
}
}
次に、beginSession()が呼び出されたら、ライブフィードを設定します
func beginSession() {
var err : NSError? = nil
captureSession.addInput(AVCaptureDeviceInput(device: captureDevice, error: &err))
if err != nil {
println("error: \(err?.localizedDescription)")
}
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
self.cameraView.layer.addSublayer(previewLayer)
self.cameraView.bringSubviewToFront(takePhotoButton)
self.cameraView.bringSubviewToFront(self.snappedPicture)
self.cameraView.bringSubviewToFront(self.backButton)
previewLayer?.frame = self.cameraView.layer.frame
captureSession.startRunning()
}
これが、ユーザーが実際にビデオを録画してキャプチャするためにレコードを押すところに行き詰まっているところです。
@IBAction func takeVideoAction(sender: AnyObject) {
var recordingDelegate:AVCaptureFileOutputRecordingDelegate? = self
var videoFileOutput = AVCaptureMovieFileOutput()
self.captureSession.addOutput(videoFileOutput)
let filePath = NSURL(fileURLWithPath: "filePath")
videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate)
}
それから私は電話しますself.videoFileOutput.stopRecording()
。
そして最後にデリゲートメソッド
func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError!) {
return
}
func captureOutput(captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAtURL fileURL: NSURL!, fromConnections connections: [AnyObject]!) {
return
}
そして、私はそれを正しく実装する方法を理解できないので、あなたが想像できるように何も起こりません。
私はあなたのコードを試しました。意味のある設定をするとfilePath
、すべてうまくいきます。filePath
このように変更すると、デリゲートメソッドが呼び出されます。
let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let filePath = documentsURL.URLByAppendingPathComponent("temp")
// Do recording and save the output to the `filePath`
videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加