次の方法で共有


AVCaptureSession クラス

定義

記録セッションを調整します。

[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
属性

注釈

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)

メソッド

AddConnection(AVCaptureConnection)

指定したキャプチャ connectionを追加します。

AddInput(AVCaptureInput)

キャプチャ セッションに入力を追加します

AddInputWithNoConnections(AVCaptureInput)

新しい接続を形成せずに、指定した を追加します input

AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr)

外部で観察されるオブジェクトを登録します (NSString keyPath を使用)。   観察された変更は、オブザーバーのオブジェクト ObserveValue(NSString, NSObject, NSDictionary, IntPtr) メソッドにディスパッチされます。

(継承元 NSObject)
AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr)

外部で観察されるオブジェクトを登録します (文字列 keyPath を使用)。   観察された変更は、オブザーバーのオブジェクト ObserveValue(NSString, NSObject, NSDictionary, IntPtr) メソッドにディスパッチされます。

(継承元 NSObject)
AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>)

任意のメソッドを使用して、外部で観察されるオブジェクトを登録します。

(継承元 NSObject)
AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>)

任意のメソッドを使用して、外部で観察されるオブジェクトを登録します。

(継承元 NSObject)
AddOutput(AVCaptureOutput)

キャプチャ セッションに出力を追加します。

AddOutputWithNoConnections(AVCaptureOutput)

新しい接続を形成せずに、指定した を追加します output

AwakeFromNib()

オブジェクトが nib ファイルから読み込まれた後に呼び出されます。 オーバーライド者は base を呼び出す必要があります。AwakeFromNib()。

(継承元 NSObject)
BeginConfiguration()

キャプチャ セッションの構成を変更するトランザクションを開始します。

BeginInvokeOnMainThread(Action)

記録セッションを調整します。

(継承元 NSObject)
BeginInvokeOnMainThread(Selector, NSObject)

メイン UI スレッドで指定されたコードを非同期的に呼び出します。

(継承元 NSObject)
Bind(NSString, NSObject, String, NSDictionary)

記録セッションを調整します。

(継承元 NSObject)
Bind(String, NSObject, String, NSDictionary)
古い.

記録セッションを調整します。

(継承元 NSObject)
BindingInfo(String)
古い.

記録セッションを調整します。

(継承元 NSObject)
BindingOptionDescriptions(String)
古い.

記録セッションを調整します。

(継承元 NSObject)
BindingValueClass(String)
古い.

記録セッションを調整します。

(継承元 NSObject)
CanAddConnection(AVCaptureConnection)

true指定した を追加できる場合は を返しますconnection

CanAddInput(AVCaptureInput)

指定した入力をセッションに追加できるかどうかを返します。

CanAddOutput(AVCaptureOutput)

指定した入力をセッションに追加できるかどうかを返します。

CanSetSessionPreset(NSString)

セッションが定義済みのキャプチャ設定の特定のセットをサポートしているかどうか。

CommitConfiguration()

以降 BeginConfiguration()のキャプチャ セッションに加えられたすべての構成変更をアトミックに適用します。

CommitEditing()

記録セッションを調整します。

(継承元 NSObject)
CommitEditing(NSObject, Selector, IntPtr)

記録セッションを調整します。

(継承元 NSObject)
ConformsToProtocol(IntPtr)

このオブジェクトが指定したプロトコルを実装しているかどうかを判断するために呼び出されます。

(継承元 NSObject)
Copy()

基になる Objective-C オブジェクトのコピーを実行します。

(継承元 NSObject)
DangerousAutorelease()

記録セッションを調整します。

(継承元 NSObject)
DangerousRelease()

記録セッションを調整します。

(継承元 NSObject)
DangerousRetain()

記録セッションを調整します。

(継承元 NSObject)
DidChange(NSKeyValueChange, NSIndexSet, NSString)

多対多リレーションシップのインデックスに対して変更が発生したことを示します。

(継承元 NSObject)
DidChange(NSString, NSKeyValueSetMutationKind, NSSet)

記録セッションを調整します。

(継承元 NSObject)
DidChangeValue(String)

指定したキーに変更が発生したことを示します。

(継承元 NSObject)
Dispose()

NSObject オブジェクトによって使用されるリソースを解放します。

(継承元 NSObject)
Dispose(Boolean)

NSObject オブジェクトによって使用されるリソースを解放します。

(継承元 NSObject)
DoesNotRecognizeSelector(Selector)

このオブジェクトが指定したセレクターを認識しないことを示します。

(継承元 NSObject)
Equals(NSObject)

記録セッションを調整します。

(継承元 NSObject)
Equals(Object)

記録セッションを調整します。

(継承元 NSObject)
ExposedBindings()

記録セッションを調整します。

(継承元 NSObject)
GetBindingInfo(NSString)

記録セッションを調整します。

(継承元 NSObject)
GetBindingOptionDescriptions(NSString)

記録セッションを調整します。

(継承元 NSObject)
GetBindingValueClass(NSString)

記録セッションを調整します。

(継承元 NSObject)
GetDictionaryOfValuesFromKeys(NSString[])

指定したキーの値を取得します。

(継承元 NSObject)
GetHashCode()

現在のインスタンスのハッシュ コードを生成します。

(継承元 NSObject)
GetMethodForSelector(Selector)

記録セッションを調整します。

(継承元 NSObject)
GetNativeField(String)
古い.

記録セッションを調整します。

(継承元 NSObject)
GetNativeHash()

記録セッションを調整します。

(継承元 NSObject)
Init()

記録セッションを調整します。

(継承元 NSObject)
InitializeHandle(IntPtr)

記録セッションを調整します。

(継承元 NSObject)
InitializeHandle(IntPtr, String)

記録セッションを調整します。

(継承元 NSObject)
Invoke(Action, Double)

記録セッションを調整します。

(継承元 NSObject)
Invoke(Action, TimeSpan)

記録セッションを調整します。

(継承元 NSObject)
InvokeOnMainThread(Action)

記録セッションを調整します。

(継承元 NSObject)
InvokeOnMainThread(Selector, NSObject)

メイン UI スレッドで指定したコードを同期的に呼び出します。

(継承元 NSObject)
IsEqual(NSObject)

記録セッションを調整します。

(継承元 NSObject)
IsKindOfClass(Class)

記録セッションを調整します。

(継承元 NSObject)
IsMemberOfClass(Class)

記録セッションを調整します。

(継承元 NSObject)
MarkDirty()

通常のピア オブジェクト (IsDirectBinding が true) を toggleref オブジェクトに昇格させます。

(継承元 NSObject)
MutableCopy()

指定した NSObject の変更可能なコピーを作成します。

(継承元 NSObject)
ObjectDidEndEditing(NSObject)

記録セッションを調整します。

(継承元 NSObject)
ObserveValue(NSString, NSObject, NSDictionary, IntPtr)

このオブジェクトに対する指定した keyPath の値が変更されたことを示します。

(継承元 NSObject)
PerformSelector(Selector)

記録セッションを調整します。

(継承元 NSObject)
PerformSelector(Selector, NSObject)

記録セッションを調整します。

(継承元 NSObject)
PerformSelector(Selector, NSObject, Double)

現在のインスタンスでセレクターを呼び出し、 が null でない場合 obj は、これを 1 つのパラメーターとして渡します。

(継承元 NSObject)
PerformSelector(Selector, NSObject, Double, NSString[])

記録セッションを調整します。

(継承元 NSObject)
PerformSelector(Selector, NSObject, NSObject)

記録セッションを調整します。

(継承元 NSObject)
PerformSelector(Selector, NSThread, NSObject, Boolean)

記録セッションを調整します。

(継承元 NSObject)
PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[])

記録セッションを調整します。

(継承元 NSObject)
PrepareForInterfaceBuilder()

記録セッションを調整します。

(継承元 NSObject)
RemoveConnection(AVCaptureConnection)

指定した connection を削除します。

RemoveInput(AVCaptureInput)

指定した入力ソースを削除します。

RemoveObserver(NSObject, NSString)

指定した keyPath の変更された値に関する通知を、指定したオブザーバーが受信するのを停止します。

(継承元 NSObject)
RemoveObserver(NSObject, NSString, IntPtr)

指定したオブザーバーが、指定した keyPath とコンテキストの変更された値に関する通知をさらに受信するのを停止します。

(継承元 NSObject)
RemoveObserver(NSObject, String)

指定した keyPath の変更された値に関する通知を、指定したオブザーバーが受信するのを停止します。

(継承元 NSObject)
RemoveObserver(NSObject, String, IntPtr)

指定したオブザーバーが、指定した keyPath とコンテキストの変更された値に関する通知をさらに受信するのを停止します。

(継承元 NSObject)
RemoveOutput(AVCaptureOutput)

指定した出力を削除します。

RespondsToSelector(Selector)

このオブジェクトが指定したセレクターを認識するかどうか。

(継承元 NSObject)
SetNativeField(String, NSObject)
古い.

記録セッションを調整します。

(継承元 NSObject)
SetNilValueForKey(NSString)

指定したキーの値を null に設定します。

(継承元 NSObject)
SetValueForKey(NSObject, NSString)

キーで指定されたプロパティの値を、指定した値に設定します。

(継承元 NSObject)
SetValueForKeyPath(IntPtr, NSString)

アンマネージド オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。

(継承元 NSObject)
SetValueForKeyPath(NSObject, NSString)

キーパスを使用して到達できるプロパティの値を設定します。

(継承元 NSObject)
SetValueForUndefinedKey(NSObject, NSString)

未定義のキーに値を書き込もうとすることを示します。 オーバーライドされない場合は、NSUndefinedKeyException を発生させます。

(継承元 NSObject)
SetValuesForKeysWithDictionary(NSDictionary)

この NSObject の値を、指定したディクショナリの値に設定します。

(継承元 NSObject)
StartRunning()

入力と出力のフローを開始します。

StopRunning()

入力と出力のフローを非同期的に停止します。

ToString()

現在のインスタンスの値の文字列表現を返します。

(継承元 NSObject)
Unbind(NSString)

記録セッションを調整します。

(継承元 NSObject)
Unbind(String)
古い.

記録セッションを調整します。

(継承元 NSObject)
ValueForKey(NSString)

指定したキーに関連付けられているプロパティの値を返します。

(継承元 NSObject)
ValueForKeyPath(NSString)

キーパスを使用して到達できるプロパティの値を返します。

(継承元 NSObject)
ValueForUndefinedKey(NSString)

未定義のキーの値を読み取ろうとしたことを示します。 オーバーライドされない場合は、NSUndefinedKeyException を発生させます。

(継承元 NSObject)
WillChange(NSKeyValueChange, NSIndexSet, NSString)

指定したキー内の指定したインデックスの値が変更されようとしていることを示します。

(継承元 NSObject)
WillChange(NSString, NSKeyValueSetMutationKind, NSSet)

記録セッションを調整します。

(継承元 NSObject)
WillChangeValue(String)

指定したキーの値が変更されようとしていることを示します。

(継承元 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 配列を this 取得します。

SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[])

オブジェクトに適したオブジェクトの UIAccessibilityCustomRotor 配列を this 設定します。

適用対象

こちらもご覧ください