AVCaptureSession
フレームワーク:iOS 4.0 以降の AVFoundation。関連項目
出力に AV 入力デバイスからのデータフローを調整するために AVCaptureSession オブジェクトを使用して下さい。
リアルタイムまたはオフラインのキャプチャを実行するには、AVCaptureSession オブジェクトをインスタンス化し、適切な入力(AVCaptureDeviceInput のような) を追加して、出力します(AVCaptureMovieFileOutput のように)。以下のコードの部分は、キャプチャデバイスをオーディオ録音に設定する方法を示しています。
- AVCaptureSession *captureSession = [[AVCaptureSession alloc] init];
- AVCaptureDevice *audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
- NSError *error = nil;
- AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioCaptureDevice error:&error];
- if (audioInput) {
-         [captureSession addInput:audioInput];
- }
- else {
-         // Handle the failure.
- }
出力への入力からのデータフローを開始するために startRunning を呼び出し、フローを止めるためには stopRunning を呼び出して下さい。
重要: startRunning メソッドは、いくらかの時間がかかるブロッキング呼び出しであり、したがって、メインキューがブロックされないように、(これは、UI 応答を続けます) シリアルキューのセッションの設定を実行する必要があります。実装の例については、AVCam-iOS:画像や動画をキャプチャするには AVFoundation を使用 を参照してください。
出力の品質レベル、ビットレート、またはその他の設定をカスタマイズするため sessionPreset プロパティを使用します。最も一般的なキャプチャの構成は、セッションのプリセットを通じて利用できます。しかし、(高いフレームレートのような) いくつかの特殊なオプションは AVCaptureDevice インスタンス上のキャプチャフォーマットの直接の設定が必要です。
タスク
入力と出力の管理
inputs プロパティ
宣言
<< SWIFT >>
var inputs: [AnyObject]! { get }
<< OBJECTIVE-C >>
@property(nonatomic, readonly) NSArray *inputs
議論
配列は AVCaptureInput のサブクラスのインスタンスを含みます。
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
– addInput:– canAddInput:
– removeInput:
- canAddInput:
与えられた入力がセッションに追加できるかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func canAddInput(_ input: AVCaptureInput!) -> Bool
<< OBJECTIVE-C >>
- (BOOL)canAddInput:(AVCaptureInput *)input
パラメーター
input | セッションに追加したい入力。 |
戻り値
input がセッションに追加することができる場合、YES、それ以外は NO
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
- addInput:
与えられた入力をセッションに追加します。
宣言
<< SWIFT >>
func addInput(_ input: AVCaptureInput!)
<< OBJECTIVE-C >>
- (void)addInput:(AVCaptureInput *)input
パラメーター
input | セッションに追加される入力。 |
議論
canAddInput: が YES を返す場合のみこのメソッドを使用してセッションに入力を追加できます。
セッションの実行中に、このメソッドを呼び出すことができます。
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
– addOutput:– removeInput:
– addInputWithNoConnections:
- removeInput:
与えられた入力を削除します。
宣言
<< SWIFT >>
func removeInput(_ input: AVCaptureInput!)
<< OBJECTIVE-C >>
- (void)removeInput:(AVCaptureInput *)input
パラメーター
input | 受信者から削除する入力。 |
議論
セッションの実行中に、このメソッドを呼び出すことができます。
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
outputs プロパティ
キャプチャセッションの出力。(読み取り専用)
宣言
<< SWIFT >>
var outputs: [AnyObject]! { get }
<< OBJECTIVE-C >>
@property(nonatomic, readonly) NSArray *outputs
議論
配列は AVCaptureOutput のサブクラスのインスタンスを含んでいます。
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
– addOutput:– canAddOutput:
– removeOutput:
- canAddOutput:
与えられた出力がセッションに追加できるかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func canAddOutput(_ output: AVCaptureOutput!) -> Bool
<< OBJECTIVE-C >>
- (BOOL)canAddOutput:(AVCaptureOutput *)output
パラメーター
output | セッションに追加したい出力。 |
戻り値
output がセッションに追加できる場合、YES、そうでなければ NO。
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
– addOutput:– addOutput:
セッションに与えられた出力を追加します。
宣言
<< SWIFT >>
func addOutput(_ output: AVCaptureOutput!)
<< OBJECTIVE-C >>
- (void)addOutput:(AVCaptureOutput *)output
パラメーター
output | セッションに追加すべき出力。 |
議論
canAddOutput: が YES を返す時にのみ、このメソッドを使用してセッションに出力が追加できます。
セッションの実行中に、このメソッドを呼び出すことができます。
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
– canAddOutput:– addInput:
– removeOutput:
– addOutputWithNoConnections:
- removeOutput:
与えられた出力を削除します。
宣言
<< SWIFT >>
func removeOutput(_ output: AVCaptureOutput!)
<< OBJECTIVE-C >>
- (void)removeOutput:(AVCaptureOutput *)output
パラメーター
output | 受信者から削除するべき出力。 |
議論
セッションの実行中に、このメソッドを呼び出すことができます。
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
– addOutput:実行状態の管理
- startRunning
実行を開始するように受信者に指示します。
宣言
<< SWIFT >>
func startRunning()
<< OBJECTIVE-C >>
- (void)startRunning
議論
この方法は、受信者である AVCaptureSession インスタンスに接続された出力への入力からデータフローを開始するために使用されます。受信者が完全に実行を開始し、または実行の開始に失敗するまで、このメソッドは同期し、ブロックします。この処理中にエラーが発生し、受信者が起動に失敗した場合は、 AVCaptureSessionRuntimeErrorNotification を受け取ります。
重要: startRunning メソッドは、いくらかの時間がかかることブロッキング呼び出しで、したがって、メインキューがブロックされないよう(これは UI 応答を保持します)、シリアルキューのセッションの設定を実行する必要があります。実装例については、AVCam-iOS:画像や動画をキャプチャするには AVFoundation を使用。 を参照してください。
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
– stopRunning– stopRunning
実行を中止するように受信者に指示します。
宣言
<< SWIFT >>
func stopRunning()
<< OBJECTIVE-C >>
- (void)stopRunning
議論
このメソッドは、受信者である AVCaptureSession インスタンスに接続された出力への入力からのデータフローを停止するために使用されます。このメソッドは、受信者が完全に実行を停止するまで同期しており、ブロックします。
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
– startRunningrunning プロパティ
受信者が実行中かどうかを示します。(読み取り専用)
宣言
<< SWIFT >>
var running: Bool { get }
<< OBJECTIVE-C >>
@property(nonatomic, readonly, getter=isRunning) BOOL running
議論
キー値監視 を使用してこのプロパティの値を監視できます。
利用可能
iOS 4.0 以降で利用可能。
interruptedプロパティ
受信者が中断されたかどうかを示します。(読み取り専用)
宣言
<< SWIFT >>
var interrupted: Bool { get }
<< OBJECTIVE-C >>
@property(nonatomic, readonly, getter=isInterrupted) BOOL interrupted
議論
キー値監視 を使用してこのプロパティの値を監視できます。
利用可能
iOS 4.0 以降で利用可能。
構成の変更
- beginConfiguration
アトミックに行われるべき構成の変更のセットの開始を示します。
宣言
<< SWIFT >>
func beginConfiguration()
<< OBJECTIVE-C >>
- (void)beginConfiguration
議論
アトミック更新に実行中のセッションでバッチの複数構成操作に beginConfiguration と commitConfiguration を使用して下さい。
beginConfiguration を呼び出した後、例えば、出力を追加または削除し、sessionPreset を変更、または個々のキャプチャ入力や出力のプロパティを構成できます。それらが一緒に適用される時点で commitConfiguration を起動するまで変更は実際には行われません。
利用可能
iOS 4.0 以降で利用可能。
以下も見よ
– commitConfiguration– commitConfiguration
構成の変更のセットを表明します。
宣言
<< SWIFT >>
func commitConfiguration()
<< OBJECTIVE-C >>
- (void)commitConfiguration
議論
議論については、beginConfiguration を参照してください。
利用可能
iOS 4.0 以降で利用可能。
セッションプリセットの管理
sessionPreset プロパティ
出力の品質レベルやビットレートを示す定数値です。
宣言
<< SWIFT >>
var sessionPreset: String!
<< OBJECTIVE-C >>
@property(nonatomic, copy) NSString *sessionPreset
議論
出力の品質レベルやビットレートをカスタマイズするために、このプロパティを使用して下さい。sessionPreset の取り得る値については、ビデオ入力プリセット を参照してください。デフォルト値は AVCaptureSessionPresetHigh です。
セッションの実行中にこの値を設定できます。
canSetSessionPreset: がそのプリセットについて YES を返す場合にのみ、プリセットを設定できます。
利用可能
iOS 4.0 以降で利用可能。
- canSetSessionPreset:
受信者が与えられたプリセットを使用できるかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func canSetSessionPreset(_ preset: String!) -> Bool
<< OBJECTIVE-C >>
- (BOOL)canSetSessionPreset:(NSString *)preset
パラメーター
preset | 受信者のために設定したいと思うプリセット。取り得る値については、ビデオ入力プリセット を参照してください。 |
戻り値
受信者がプリセットを使用できれば YES そうでない場合は、NO。
利用可能
iOS 4.0 以降で利用可能。
接続の管理
- addConnection:
与えられたキャプチャの接続をセッションに追加します。
宣言
<< SWIFT >>
func addConnection(_ connection: AVCaptureConnection!)
<< OBJECTIVE-C >>
- (void)addConnection:(AVCaptureConnection *)connection
canAddConnection: が YES を返す場合のみ、このメソッドを使用してセッションに AVCaptureConnection インスタンスを追加できます。
addInput: または addOutput: を使用する場合、接続は、互換あるすべての入力と出力の間で自動的に形成されます。接続なしで入力や出力を追加するとき、手動で接続を追加することだけが必要です。
利用可能
iOS 8.0 以降で利用可能。
以下も見よ
– canAddConnection:– removeConnection:
- canAddConnection:
与えられた接続が受信者に追加できるかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func canAddConnection(_ connection: AVCaptureConnection!) -> Bool
<< OBJECTIVE-C >>
- (BOOL)canAddConnection:(AVCaptureConnection *)connection
パラメーター
connection | AVCaptureConnection のインスタンス。 |
戻り値
connection が受信者に追加できる場合 YES そうでなければ、NO。
利用可能
iOS 8.0 以降で利用可能。
以下も見よ
- addInputWithNoConnections:
何も接続を形成することなく、セッションへのキャプチャ入力を追加します。
宣言
<< SWIFT >>
func addInputWithNoConnections(_ input: AVCaptureInput!)
<< OBJECTIVE-C >>
- (void)addInputWithNoConnections:(AVCaptureInput *)input
パラメーター
input | セッションに追加するべきキャプチャ入力。 |
議論
セッションの実行中に、このメソッドを呼び出すことができます。
通常は、セッションへの入力を追加するには、addInput: を使用する必要があります。入力がどの出力に接続された上で、きめの細かい制御が必要な場合は、このメソッドを使用して下さい。
利用可能
iOS 8.0 以降で利用可能。
以下も見よ
– addInput:– addOutputWithNoConnections:
– addOutputWithNoConnections:
何も接続を形成することなく、セッションにキャプチャ出力を追加します。
宣言
<< SWIFT >>
func addOutputWithNoConnections(_ output: AVCaptureOutput!)
<< OBJECTIVE-C >>
- (void)addOutputWithNoConnections:(AVCaptureOutput *)output
パラメーター
output | セッションに追加するべきキャプチャ出力。 |
議論
セッションの実行中に、このメソッドを呼び出すことができます。
通常は、セッションに出力を追加するには addOutput: を使用する必要があります。入力がどの出力に接続された上で、きめの細かい制御が必要な場合は、このメソッドを使用して下さい。
利用可能
iOS 8.0 以降で利用可能。
以下も見よ
– addOutput:– addInputWithNoConnections:
- removeConnection:
セッションからキャプチャの接続を削除します。
宣言
<< SWIFT >>
func removeConnection(_ connection: AVCaptureConnection!)
<< OBJECTIVE-C >>
- (void)removeConnection:(AVCaptureConnection *)connection
パラメーター
connection | セッションから削除すべきキャプチャの接続。 |
議論
セッションの実行中に、このメソッドを呼び出すことができます。
利用可能
iOS 8.0 以降で利用可能。
以下も見よ
– addConnection:アプリケーションのオーディオセッションの共有
usesApplicationAudioSession プロパティ
キャプチャセッションが、アプリの共有オーディオセッションを利用するかどうかを示します。
宣言
<< SWIFT >>
var usesApplicationAudioSession: Bool
<< OBJECTIVE-C >>
@property(nonatomic) BOOL usesApplicationAudioSession
議論
このプロパティの値が NO の場合、キャプチャセッションは、オーディオ録音のため private の AVAudioSession インスタンスを使用し、あなたのアプリが、再生のため、独自のオーディオセッションを使用している場合、中断を引き起こす可能性があります。
iOS 7.0 以降にリンクされたアプリの場合、このプロパティのデフォルト値は YES であり、同時再生や録音を可能にします。
利用可能
iOS 7.0 以降で利用可能。
automaticallyConfiguresApplicationAudioSession プロパティ
キャプチャセッションが自動的にアプリの共有オーディオセッションの設定を変更するかどうかを示すブール値。
宣言
<< SWIFT >>
var automaticallyConfiguresApplicationAudioSession: Bool
<< OBJECTIVE-C >>
@property(nonatomic) BOOL automaticallyConfiguresApplicationAudioSession
議論
usesApplicationAudioSession プロパティの値が YES である場合のみ、このプロパティは有効になります。
このプロパティのデフォルト値は YES であり、キャプチャセッションを引き起こし、自動的に最適な記録のためのアプリの共有 AVAudioSession インスタンスを構成します。例えば、キャプチャセッションが、デバイスの後ろ向きのカメラを使用している場合、オーディオセッションのマイクと極性パターンは、その方向からの音の最適な記録用に設定されます。オーディオセッションのオリジナルの状態は、キャプチャが終了した後に復元されないことに注意してください。
このプロパティの値を NO に設定した場合、あなたのアプリは、適切なオーディオセッションの設定を選択する責任があります。オーディオセッションの設定は、キャプチャセッションと互換性がない場合、録音が失敗することがあります。
利用可能
iOS 7.0 以降で利用可能。
複数の入力と出力の同期
masterClock プロパティ
出力同期のために使用したクロックオブジェクト。(読み取り専用)
宣言
<< SWIFT >>
var masterClock: CMClock! { get }
<< OBJECTIVE-C >>
@property(nonatomic, readonly) CMClockRef masterClock
議論
返される CMClock オブジェクトは読み取り専用であり、キャプチャ出力内のサンプルバッファにタイムベースを提供します。これは、複数のデバイスからのタイムスタンプを同期させるために AVCaptureInputPort オブジェクトからのクロックと組み合わせて使用できます。
キー値監視 を使用してこのプロパティの値を監視できます。
利用可能
iOS 7.0 以降で利用可能。
定数
AVCaptureVideoOrientation
ビデオキャプチャ中にデバイスの向きを指定する定数。
宣言
<< SWIFT >>
enum AVCaptureVideoOrientation : Int {
        case Portrait
        case PortraitUpsideDown
        case LandscapeRight
        case LandscapeLeft
}
<< OBJECTIVE-C >>
enum {
AVCaptureVideoOrientationPortrait = 1, AVCaptureVideoOrientationPortraitUpsideDown, AVCaptureVideoOrientationLandscapeRight, AVCaptureVideoOrientationLandscapeLeft, };
typedef NSInteger AVCaptureVideoOrientation;
定数
デバイスのホームボタンを下にし、垂直に置かれるべきビデオであることを示します。
iOS 4.0 以降で利用可能。
デバイスのホームボタンを上にし、垂直に置かれるべきビデオであることを示します。
iOS 4.0 以降で利用可能。
デバイスのホームボタンを左側にして、水平に置かれるべきビデオであることを示します。
iOS 4.0 以降で利用可能。
デバイスのホームボタンを右側にして、水平に置かれるべきビデオであることを示します。
iOS 4.0 以降で利用可能。
import 文
<< OBJECTIVE-C >>
@import AVFoundation;
<< SWIFT >>
import AVFoundation
利用可能
iOS 4.0 以降で利用可能。
通知ユーザー情報キー
キャプチャセッションからの通知から情報を取得するキー。
宣言
<< SWIFT >>
let AVCaptureSessionErrorKey: String
<< OBJECTIVE-C >>
NSString *const AVCaptureSessionErrorKey;
定数
AVCaptureSessionRuntimeErrorNotification のユーザ情報辞書からのエラーオブジェクトを取得するためのキー。
iOS 4.0 以降で利用可能。
ビデオ入力プリセット
sessionPreset プロパティを使用して、キャプチャ設定プリセットを定義するための定数。
宣言
<< SWIFT >>
let AVCaptureSessionPresetPhoto: String
let AVCaptureSessionPresetHigh: String
let AVCaptureSessionPresetMedium: String
let AVCaptureSessionPresetLow: String
let AVCaptureSessionPreset352x288: String
let AVCaptureSessionPreset640x480: String
let AVCaptureSessionPreset1280x720: String
let AVCaptureSessionPreset1920x1080: String
let AVCaptureSessionPresetiFrame960x540: String
let AVCaptureSessionPresetiFrame1280x720: String
let AVCaptureSessionPresetInputPriority: String
<< OBJECTIVE-C >>
NSString *const AVCaptureSessionPresetPhoto;
NSString *const AVCaptureSessionPresetHigh;
NSString *const AVCaptureSessionPresetMedium;
NSString *const AVCaptureSessionPresetLow;
NSString *const AVCaptureSessionPreset352x288;
NSString *const AVCaptureSessionPreset640x480;
NSString *const AVCaptureSessionPreset1280x720;
NSString *const AVCaptureSessionPreset1920x1080;
NSString *const AVCaptureSessionPresetiFrame960x540;
NSString *const AVCaptureSessionPresetiFrame1280x720;
NSString *const AVCaptureSessionPresetInputPriority;
定数
高解像度の写真品質の出力に適したキャプチャ設定を指定します。
iOS 4.0 以降で利用可能。
高品質のビデオとオーディオ出力に適したキャプチャ設定を指定します。
iOS 4.0 以降で利用可能。
WiFi 経由で共有するのに適切なビデオ出力とオーディオビットレートに適したキャプチャ設定を指定します。
iOS 4.0 以降で利用可能。
3G 経由で共有するのに適切なビデオ出力とオーディオビットレートに適したキャプチャ設定を指定します。
iOS 4.0 以降で利用可能。
CIF 画質(352×288 ピクセル) のビデオ出力に適したキャプチャ設定を指定します。
iOS 5.0 以降で利用可能。
VGA 画質(640×480 ピクセル) のビデオ出力に適したキャプチャ設定を指定します。
iOS 4.0 以降で利用可能。
720p の画質(1280×720 ピクセル) のビデオ出力に適したキャプチャ設定を指定します。
iOS 4.0 以降で利用可能。
1080p の画質(1920×1080 ピクセル) のビデオ出力に適したキャプチャ設定を指定します。
iOS 5.0 以降で利用可能。
約30メガビット/秒で AAC オーディオと 960x540 の画質の iFrame H.264 ビデオを達成するためにキャプチャ設定を指定します。
iFrame の形式でキャプチャされた QuickTime ムービーは編集用アプリケーションに最適です。
iOS 5.0 以降で利用可能。
約40メガビット/秒で AAC オーディオと 1280×720 の画質の iFrame H.264 ビデオを達成するためにキャプチャ設定を指定します。
iFrame の形式でキャプチャされた QuickTime ムービーは編集用アプリケーションに最適です。
iOS 5.0 以降で利用可能。
キャプチャセッションは、オーディオとビデオの出力設定を制御しないことを指定します。
全てのセッションプリセットでサポートされていないキャプチャ設定を有効にするには、(高フレームレートのように) 適切なキャプチャデバイス上の activeFormat プロパティの値を変更します。デバイスの形式を変更すると、セッションのプリセットは自動的にこの値に変更され、 AVCaptureSession オブジェクトは、その入力と出力を構成するための責任を放棄したことを示します。(その代わり、キャプチャデバイスのアクティブな形式は、出力に提供されるサービスレベルの画質を決定します。) 自動構成に戻り、別のプリセットを選択するには、セッションの sessionPreset プロパティを使用して下さい。
利用可能
iOS 4.0 以降で利用可能。
通知
AVCaptureSessionRuntimeErrorNotification
キャプチャセッション中にエラーが発生した場合に通知されます。
キー AVCaptureSessionErrorKey を使用して通知するユーザ情報辞書からの根本的なエラーを取得します。
宣言
<< SWIFT >>
let AVCaptureSessionRuntimeErrorNotification: String
import 文
<< OBJECTIVE-C >>
@import AVFoundation;
<< SWIFT >>
import AVFoundation
利用可能
iOS 4.0 以降で利用可能。
AVCaptureSessionDidStartRunningNotification
キャプチャセッションが開始した時に通知されます。
宣言
<< SWIFT >>
let AVCaptureSessionDidStartRunningNotification: String
import 文
<< OBJECTIVE-C >>
@import AVFoundation;
<< SWIFT >>
import AVFoundation
利用可能
iOS 4.0 以降で利用可能。
AVCaptureSessionDidStopRunningNotification
キャプチャセッションが停止したときに通知されます。
宣言
<< SWIFT >>
let AVCaptureSessionDidStopRunningNotification: String
import 文
<< OBJECTIVE-C >>
@import AVFoundation;
<< SWIFT >>
import AVFoundation
利用可能
iOS 4.0 以降で利用可能。
AVCaptureSessionWasInterruptedNotification
キャプチャセッションが中断された場合に通知されます。
宣言
<< SWIFT >>
let AVCaptureSessionWasInterruptedNotification: String
import 文
<< OBJECTIVE-C >>
@import AVFoundation;
<< SWIFT >>
import AVFoundation
利用可能
iOS 4.0 以降で利用可能。
AVCaptureSessionInterruptionEndedNotification
キャプチャセッションの中断が終了した場合に通知されます。
宣言
<< SWIFT >>
let AVCaptureSessionInterruptionEndedNotification: String
import 文
<< OBJECTIVE-C >>
@import AVFoundation;
<< SWIFT >>
import AVFoundation
利用可能
iOS 4.0 以降で利用可能。
次の章