Поделиться через


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.

Настройка записи состоит из задания Inputs свойств AVCaptureSessionи Outputs объекта . Обратите внимание, что возможно несколько AVCaptureInputs и AVCaptureOutputs. Например, для записи звука и видео можно использовать два входа захвата:

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

    }
}          

Разработчики приложений могут настроить один или несколько портов вывода для захваченных данных. Это могут быть все еще кадры, видеокадры с информацией о времени, примеры звука, файлы видео quicktime или их можно отрисовывать непосредственно на уровне 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

Константы уведомлений для прерыванияEnded

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)

Регистрирует объект для наблюдения извне (с помощью string 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)

Асинхронно вызывает указанный код в основном потоке пользовательского интерфейса.

(Унаследовано от 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)

Синхронно вызывает указанный код в основном потоке пользовательского интерфейса.

(Унаследовано от 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)

Конструктор, используемый при создании управляемых представлений неуправляемых объектов; Вызывается средой выполнения.

(Унаследовано от 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 объекта .

Применяется к

См. также раздел