共用方式為


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 物件會協調視訊或音訊輸入的錄製,並將錄製的資訊傳遞至一或多個輸出物件。 隨著 iOS 線路的進階,不同的裝置會取得多個擷取裝置 (,特別是取得多個相機) 。 應用程式開發人員可以使用 DefaultDeviceWithMediaType(String)DevicesWithMediaType(String) ,傳入 中 AVMediaType 定義的常數。

設定擷取包含設定 InputsAVCaptureSessionOutputs 屬性。 請注意,可以有多個 AVCaptureInputAVCaptureOutput 。 例如,若要擷取音訊和視訊,其中一個會使用兩個擷取輸入:

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);
}

請注意,存取麥克風的許可權 (和在某些區域中,相機) 必須由使用者提供,要求開發人員將 新增 NSMicrophoneUsageDescription 至應用程式的 info.plist 檔案。

您可以使用 直接將影片擷取至檔案 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) 委派方法,再操作檔案 (,然後再將它儲存到具有 SaveToPhotosAlbum(String, UIVideo+SaveStatus)WriteVideoToSavedPhotosAlbumAsync(NSUrl)) 的相片相簿。

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 ();
        }

    }
}          

應用程式開發人員可以為擷取的資料設定一或多個輸出埠,而這些埠可能仍然是畫面、具有計時資訊的視訊畫面、音訊範例、快速計時電影檔案,也可以直接轉譯至 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)

建立 Unmanaged 物件的 Managed 標記法時所使用的建構函式;由執行時間呼叫。

AVCaptureSession(NSObjectFlag)

在衍生類別上呼叫的建構函式,以略過初始化,並只配置 物件。

屬性

AutomaticallyConfiguresApplicationAudioSession

是否 AVCaptureSession 使用應用程式的共用音訊會話。

AutomaticallyConfiguresCaptureDeviceForWideColor

取得或設定 Boolean 值,控制會話是否應該在可用時自動使用寬色彩。

Class

協調錄製會話。

(繼承來源 NSObject)
ClassHandle

這個類別的控制碼。

DebugDescription

此物件的開發人員有意義描述。

(繼承來源 NSObject)
Description

物件的描述,ToString 的 Objective-C 版本。

(繼承來源 NSObject)
DidStartRunningNotification

DidStartRunning 的通知常數

DidStopRunningNotification

DidStopRunning 的通知常數

ErrorKey

表示與常數 AVCaptureSessionErrorKey 相關聯的值

Handle

處理 unmanaged 物件標記法) (指標。

(繼承來源 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 檔案載入物件之後呼叫。 覆寫程式必須呼叫基底。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)

如果可以加入指定的 connection ,則傳 true 回 。

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)

在目前的實例上叫用選取器,如果 obj 不是 null,它會將這個 當做其單一參數傳遞。

(繼承來源 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)

建立 Unmanaged 物件的 Managed 標記法時所使用的建構函式;由執行時間呼叫。

(繼承來源 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)

取得適用于 this 物件的陣列 UIAccessibilityCustomRotor

SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[])

設定適用于 this 物件的陣列 UIAccessibilityCustomRotor

適用於

另請參閱