AVCaptureSession クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
記録セッションを調整します。
[Foundation.Register("AVCaptureSession", true)]
[ObjCRuntime.Unavailable(ObjCRuntime.PlatformName.WatchOS, ObjCRuntime.PlatformArchitecture.All, null)]
[ObjCRuntime.Unavailable(ObjCRuntime.PlatformName.TvOS, ObjCRuntime.PlatformArchitecture.All, null)]
public class AVCaptureSession : Foundation.NSObject
type AVCaptureSession = class
inherit NSObject
- 継承
- 属性
注釈
AVCaptureSession オブジェクトは、ビデオまたはオーディオ入力の記録を調整し、記録された情報を 1 つ以上の出力オブジェクトに渡します。 iOSのラインが進むにつれて、異なるデバイスが複数のキャプチャデバイス(特に複数のカメラを取得)を得ています。 アプリケーション開発者は、 または DevicesWithMediaType(String)を使用DefaultDeviceWithMediaType(String)して、 で定義AVMediaTypeされている定数を渡すことができます。
キャプチャの構成は、 Inputs の プロパティと Outputs プロパティの設定で構成されます AVCaptureSession。 複数 AVCaptureInputの s と AVCaptureOutputs が可能であることに注意してください。 たとえば、オーディオとビデオの両方をキャプチャするには、次の 2 つのキャプチャ入力を使用します。
var session = new AVCaptureSession();
var camera = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);
var mic = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Audio);
if(camera == null || mic == null){
throw new Exception("Can't find devices");
}
var cameraInput = AVCaptureDeviceInput.FromDevice (camera);
//info.plist _must_ contain NSMicrophoneUsageDescription key
var micInput = AVCaptureDeviceInput.FromDevice (mic);
if(session.CanAddInput(cameraInput)){
session.AddInput(cameraInput);
}
if(session.CanAddInput(micInput)){
session.AddInput(micInput);
}
マイク (および一部のリージョンではカメラ) にアクセスするためのアクセス許可をユーザーが付与する必要があり、開発者は アプリケーションの info.plist ファイルに を追加 NSMicrophoneUsageDescription
する必要があることに注意してください。
ビデオは、 を使用してファイル AVCaptureMovieFileOutputに直接キャプチャできます。 ただし、このクラスには表示可能なデータがなく、 と AVCaptureVideoDataOutput同時に使用することはできません。 代わりに、アプリケーション開発者は、次の例に示すように、 AVCaptureVideoPreviewLayerと組み合わせて使用できます。
var layer = new AVCaptureVideoPreviewLayer (session);
layer.VideoGravity = AVLayerVideoGravity.ResizeAspectFill;
var cameraView = new UIView ();
cameraView.Layer.AddSublayer (layer);
var filePath = Path.Combine (Path.GetTempPath (), "temporary.mov");
var fileUrl = NSUrl.FromFilename (filePath);
var movieFileOutput = new AVCaptureMovieFileOutput ();
var recordingDelegate = new MyRecordingDelegate ();
session.AddOutput (movieFileOutput);
movieFileOutput.StartRecordingToOutputFile (fileUrl, recordingDelegate);
アプリケーション開発者は、関数StopRecording()が非同期であることに注意する必要があります。開発者は、ファイルを操作する前にデリゲート メソッドまでFinishedRecording(AVCaptureFileOutput, NSUrl, NSObject[], NSError)待機する必要があります (たとえば、 または WriteVideoToSavedPhotosAlbumAsync(NSUrl)を使用して Photos アルバムSaveToPhotosAlbum(String, UIVideo+SaveStatus)に保存する前)。
public class MyRecordingDelegate : AVCaptureFileOutputRecordingDelegate
{
public override void FinishedRecording (AVCaptureFileOutput captureOutput, NSUrl outputFileUrl, NSObject [] connections, NSError error)
{
if (UIVideo.IsCompatibleWithSavedPhotosAlbum (outputFileUrl.Path))
{
var library = new ALAssetsLibrary ();
library.WriteVideoToSavedPhotosAlbum (outputFileUrl, (path, e2) =>
{
if (e2 != null)
{
new UIAlertView ("Error", e2.ToString (), null, "OK", null).Show ();
}
else
{
new UIAlertView ("Saved", "Saved to Photos", null, "OK", null).Show ();
File.Delete (outputFileUrl.Path);
}
});
}
else
{
new UIAlertView ("Incompatible", "Incompatible", null, "OK", null).Show ();
}
}
}
アプリケーション開発者は、キャプチャされたデータ用に 1 つ以上の出力ポートを構成できます。これらは、フレーム、タイミング情報を含むビデオ フレーム、オーディオ サンプル、クイックタイム ムービー ファイル、または CoreAnimation レイヤーに直接レンダリングできます。
セッションの入出力コンポーネントが設定されると、 メソッドを呼び出 StartRunning() して実際の処理が開始されます。
void SetupCapture ()
/ configure the capture session for low resolution, change this if your code
// can cope with more data or volume
session = new AVCaptureSession () {
SessionPreset = AVCaptureSession.PresetMedium
};
// create a device input and attach it to the session
var captureDevice = AVCaptureDevice.DefaultDeviceWithMediaType (AVMediaType.Video);
var input = AVCaptureDeviceInput.FromDevice (captureDevice);
if (input == null){
Console.WriteLine ("No video input device");
return false;
}
session.AddInput (input);
// create a VideoDataOutput and add it to the sesion
var output = new AVCaptureVideoDataOutput () {
VideoSettings = new AVVideoSettings (CVPixelFormatType.CV32BGRA),
// If you want to cap the frame rate at a given speed, in this sample: 15 frames per second
MinFrameDuration = new CMTime (1, 15)
};
// configure the output
queue = new MonoTouch.CoreFoundation.DispatchQueue ("myQueue");
outputRecorder = new OutputRecorder ();
output.SetSampleBufferDelegateAndQueue (outputRecorder, queue);
session.AddOutput (output);
session.StartRunning ();
}
public class OutputRecorder : AVCaptureVideoDataOutputSampleBufferDelegate {
public override void DidOutputSampleBuffer (AVCaptureOutput captureOutput, CMSampleBuffer sampleBuffer, AVCaptureConnection connection)
{
try {
var image = ImageFromSampleBuffer (sampleBuffer);
// Do something with the image, we just stuff it in our main view.
AppDelegate.ImageView.BeginInvokeOnMainThread (delegate {
AppDelegate.ImageView.Image = image;
});
//
// Although this looks innocent "Oh, he is just optimizing this case away"
// this is incredibly important to call on this callback, because the AVFoundation
// has a fixed number of buffers and if it runs out of free buffers, it will stop
// delivering frames.
//
sampleBuffer.Dispose ();
} catch (Exception e){
Console.WriteLine (e);
}
}
UIImage ImageFromSampleBuffer (CMSampleBuffer sampleBuffer)
{
// Get the CoreVideo image
using (var pixelBuffer = sampleBuffer.GetImageBuffer () as CVPixelBuffer){
// Lock the base address
pixelBuffer.Lock (0);
// Get the number of bytes per row for the pixel buffer
var baseAddress = pixelBuffer.BaseAddress;
int bytesPerRow = pixelBuffer.BytesPerRow;
int width = pixelBuffer.Width;
int height = pixelBuffer.Height;
var flags = CGBitmapFlags.PremultipliedFirst | CGBitmapFlags.ByteOrder32Little;
// Create a CGImage on the RGB colorspace from the configured parameter above
using (var cs = CGColorSpace.CreateDeviceRGB ())
using (var context = new CGBitmapContext (baseAddress,width, height, 8, bytesPerRow, cs, (CGImageAlphaInfo) flags))
using (var cgImage = context.ToImage ()){
pixelBuffer.Unlock (0);
return UIImage.FromImage (cgImage);
}
}
}
}
コンストラクター
AVCaptureSession() |
パラメーターなしでこのクラスの新しいインスタンスを初期化する既定のコンストラクター。 |
AVCaptureSession(IntPtr) |
アンマネージド オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
AVCaptureSession(NSObjectFlag) |
初期化をスキップし、単に オブジェクトを割り当てるために派生クラスで を呼び出すコンストラクター。 |
プロパティ
AutomaticallyConfiguresApplicationAudioSession |
が AVCaptureSession アプリの共有オーディオ セッションを使用するかどうか。 |
AutomaticallyConfiguresCaptureDeviceForWideColor |
セッションが使用可能な場合に幅の広い色を自動的に使用するかどうかを制御するブール値を取得または設定します。 |
Class |
記録セッションを調整します。 (継承元 NSObject) |
ClassHandle |
このクラスのハンドル。 |
DebugDescription |
このオブジェクトの開発者向けのわかりやすい説明。 (継承元 NSObject) |
Description |
オブジェクトの説明。Objective-C バージョンの ToString です。 (継承元 NSObject) |
DidStartRunningNotification |
DidStartRunning の通知定数 |
DidStopRunningNotification |
DidStopRunning の通知定数 |
ErrorKey |
定数 AVCaptureSessionErrorKey に関連付けられている値を表します。 |
Handle |
アンマネージド オブジェクト表現へのハンドル (ポインター)。 (継承元 NSObject) |
Inputs |
キャプチャ セッションへの入力。 |
Interrupted |
セッションが中断されたかどうか。 |
InterruptionEndedNotification |
InterruptionEnded の通知定数 |
InterruptionReasonKey |
キャプチャ セッションが中断された理由にアクセスするキーを取得します。 |
InterruptionSystemPressureStateKey |
記録セッションを調整します。 |
IsDirectBinding |
記録セッションを調整します。 (継承元 NSObject) |
IsProxy |
記録セッションを調整します。 (継承元 NSObject) |
MasterClock |
複数の入力デバイスからタイムスタンプを同期するためのタイムベースを提供する読み取り専用クロック。 |
Outputs |
キャプチャ セッションの出力。 |
Preset1280x720 |
定数 AVCaptureSessionPreset1280x720 に関連付けられている値を表します |
Preset1920x1080 |
定数 AVCaptureSessionPreset1920x1080 に関連付けられている値を表します |
Preset320x240 |
記録セッションを調整します。 |
Preset352x288 |
定数 AVCaptureSessionPreset352x288 に関連付けられている値を表します |
Preset3840x2160 |
定数 AVCaptureSessionPreset3840x2160 に関連付けられている値を表します。 |
Preset640x480 |
定数 AVCaptureSessionPreset640x480 に関連付けられている値を表します |
Preset960x540 |
記録セッションを調整します。 |
PresetHigh |
定数 AVCaptureSessionPresetHigh に関連付けられている値を表します。 |
PresetiFrame1280x720 |
定数 AVCaptureSessionPresetiFrame1280x720 に関連付けられている値を表します |
PresetiFrame960x540 |
定数 AVCaptureSessionPresetiFrame960x540 に関連付けられている値を表します。 |
PresetInputPriority |
定数 AVCaptureSessionPresetInputPriority に関連付けられている値を表します。 |
PresetLow |
定数 AVCaptureSessionPresetLow に関連付けられている値を表します |
PresetMedium |
定数 AVCaptureSessionPresetMedium に関連付けられている値を表します |
PresetPhoto |
定数 AVCaptureSessionPresetPhoto に関連付けられている値を表します。 |
RetainCount |
オブジェクトの現在の Objective-C 保持数を返します。 (継承元 NSObject) |
Running |
キャプチャ セッションが現在実行中かどうか。 |
RuntimeErrorNotification |
RuntimeError の通知定数 |
Self |
記録セッションを調整します。 (継承元 NSObject) |
SessionPreset |
セッション プリセット。 |
Superclass |
記録セッションを調整します。 (継承元 NSObject) |
SuperHandle |
この NSObject の基底クラスのメソッドを表すために使用されるハンドル。 (継承元 NSObject) |
UsesApplicationAudioSession |
セッションでアプリケーションの共有オーディオ セッションを使用する必要があるかどうか。 |
WasInterruptedNotification |
WasInterrupted の通知定数 |
Zone |
記録セッションを調整します。 (継承元 NSObject) |
メソッド
拡張メソッド
ObjectDidBeginEditing(NSObject, INSEditor) |
記録セッションを調整します。 |
ObjectDidEndEditing(NSObject, INSEditor) |
記録セッションを調整します。 |
GetValidModes(NSObject, NSFontPanel) |
記録セッションを調整します。 |
ValidateToolbarItem(NSObject, NSToolbarItem) |
記録セッションを調整します。 |
GetDebugDescription(INSObjectProtocol) |
記録セッションを調整します。 |
AcceptsPreviewPanelControl(NSObject, QLPreviewPanel) |
記録セッションを調整します。 |
BeginPreviewPanelControl(NSObject, QLPreviewPanel) |
記録セッションを調整します。 |
EndPreviewPanelControl(NSObject, QLPreviewPanel) |
記録セッションを調整します。 |
GetAccessibilityCustomRotors(NSObject) |
オブジェクトに適したオブジェクトの UIAccessibilityCustomRotor 配列を |
SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[]) |
オブジェクトに適したオブジェクトの UIAccessibilityCustomRotor 配列を |