トップ 最新 追記

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|

2015-04-29 [iOS]動画を保存する(その一)

AVFoundationを使って、録画されたサンプリング・データをファイルに保存するサンプルを作成している。

前面と背面、そしてマイクのdeviceを取得する。

var frontVideoDevice: AVCaptureDevice? = nil
var backVideoDevice: AVCaptureDevice? = nil
var audioDevice: AVCaptureDevice? = nil
captureSession.sessionPreset = AVCaptureSessionPresetLow
let devices = AVCaptureDevice.devices()
for device in devices {
    if device.hasMediaType(AVMediaTypeVideo) {
        if device.position == AVCaptureDevicePosition.Back {
            backVideoDevice = device as? AVCaptureDevice
        }
        else {
            frontVideoDevice = device as? AVCaptureDevice
        }
    }
    else if device.hasMediaType(AVMediaTypeAudio) {
        audioDevice = device as? AVCaptureDevice
    }
}

デフォルトのdeviceでいいのなら、以下のコードで対応できる。 

let videoDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
let audioDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeAudio)

sessionを準備する。

var error: NSError? = nil;
if let device = frontVideoDevice {
    frontFacingCameraDeviceInput = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput
}
if let device = backVideoDevice {
    backFacingCameraDeviceInput = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput
}
if let device = audioDevice {
    audioDeviceInput = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput
}
 
if let deviceInput = backFacingCameraDeviceInput {
    if captureSession.canAddInput(deviceInput) {
        captureSession.addInput(deviceInput)
    }
}
else if let deviceInput = frontFacingCameraDeviceInput {
    if captureSession.canAddInput(deviceInput) {
        captureSession.addInput(deviceInput)
    }
}
if let deviceInput = audioDeviceInput {
    if captureSession.canAddInput(deviceInput) {
        captureSession.addInput(deviceInput)
    }
}

録画を始めるための準備。

videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey:kCVPixelFormatType_32BGRA]
videoDataOutput.alwaysDiscardsLateVideoFrames = true
videoDataOutput.setSampleBufferDelegate(self, queue: videoAudioDataOutputQueue)
if captureSession.canAddOutput(videoDataOutput) {
    captureSession.addOutput(videoDataOutput)
}
 
audioDataOutput.setSampleBufferDelegate(self, queue: videoAudioDataOutputQueue)
if captureSession.canAddOutput(audioDataOutput) {
    captureSession.addOutput(audioDataOutput)
}

_ ソースコード

GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/ios/SequenceGrabber - GitHub

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)

トップ 最新 追記