AVCaptureVideoDataOutput
AVCaptureVideoDataOutput конкретный подкласс AVCaptureOutput Вы используете, чтобы обработать несжатые кадры от видео, получаемого или получить доступ к сжатым кадрам.
Экземпляр AVCaptureVideoDataOutput производит видеокадры, можно обработать использование других носителей APIs. Можно получить доступ к кадрам с captureOutput:didOutputSampleBuffer:fromConnection: метод делегата.
Наследование
-
NSObject -
AVCaptureOutput -
AVCaptureVideoDataOutput
-
NSObject -
AVCaptureOutput -
AVCaptureVideoDataOutput
Оператор импорта
Swift
import AVFoundation
Objective C
@import AVFoundation;
Доступность
Доступный в OS X v10.7 и позже.
-
videoSettings videoSettingsСвойствоНастройки сжатия для вывода.
Объявление
Swift
var videoSettings: [NSObject : AnyObject]!Objective C
@property(nonatomic, copy) NSDictionary *videoSettingsОбсуждение
Словарь содержит значения для ключей настроек сжатия, определенных в
Video Settings, или пиксельный буфер приписывает ключи, определенные вCVPixelBufferRef. Единственный ключ, в настоящее время поддерживаемый,kCVPixelBufferPixelFormatTypeKeyключ.Получить возможные значения для поддерживаемых видео форматов пикселя (
kCVPixelBufferPixelFormatTypeKey) и форматы видеокодека (AVVideoCodecKey), посмотритеavailableVideoCVPixelFormatTypesиavailableVideoCodecTypesсоответственно.Для получения выборок в их собственном формате устройства установите это свойство в
nil:AVCaptureVideoDataOutput *myVideoOutput; // assume this existsmyVideoOutput.videoSettings = nil; // receives samples in device format
Если Вы устанавливаете это свойство в
nilи затем впоследствии запросите его, Вы получаете словарь, отражающий настройки, используемые текущими сеансами полученияsessionPreset.Оператор импорта
Objective C
@import AVFoundation;Swift
import AVFoundationДоступность
Доступный в OS X v10.7 и позже.
-
Указывает, отбрасываются ли видеокадры, если они поступают поздно.
Объявление
Swift
var alwaysDiscardsLateVideoFrames: BoolObjective C
@property(nonatomic) BOOL alwaysDiscardsLateVideoFramesОбсуждение
Когда значение этого свойства
YEStrue, объект сразу отбрасывает кадры, полученные, в то время как очередь отгрузки, обрабатывающая существующие кадры, блокируется вcaptureOutput:didOutputSampleBuffer:fromConnection:метод делегата.Когда значение этого свойства
NOfalse, делегатам разрешают больше времени для обработки старых кадров, прежде чем новые кадры будут отброшены, но использование памяти приложения может увеличиться значительно в результате.Значение по умолчанию
YEStrue.Оператор импорта
Objective C
@import AVFoundation;Swift
import AVFoundationДоступность
Доступный в OS X v10.7 и позже.
-
Указывает поддерживаемые видео форматы пикселя, которые могут быть указаны в
videoSettings. (только для чтения)Объявление
Swift
var availableVideoCVPixelFormatTypes: [AnyObject]! { get }Objective C
@property(nonatomic, readonly) NSArray *availableVideoCVPixelFormatTypesОбсуждение
Значение этого свойства является массивом
NSNumberобъекты можно использовать в качестве значений дляkCVPixelBufferPixelFormatTypeKeyвvideoSettingsсвойство. Первый формат в возвращенном списке является самым эффективным выходным форматом.Оператор импорта
Objective C
@import AVFoundation;Swift
import AVFoundationДоступность
Доступный в OS X v10.7 и позже.
См. также
-
Указывает поддерживаемые форматы видеокодека, которые могут быть указаны в
videoSettings. (только для чтения)Объявление
Swift
var availableVideoCodecTypes: [AnyObject]! { get }Objective C
@property(nonatomic, readonly) NSArray *availableVideoCodecTypesОбсуждение
Значение этого свойства является массивом
NSStringобъекты можно использовать в качестве значений дляAVVideoCodecKeyвvideoSettingsсвойство. Первый формат в возвращенном списке является самым эффективным выходным форматом.Оператор импорта
Objective C
@import AVFoundation;Swift
import AVFoundationДоступность
Доступный в OS X v10.7 и позже.
-
Устанавливает демонстрационного буферного делегата и очередь, на которую должны быть вызваны обратные вызовы.
Объявление
Swift
func setSampleBufferDelegate(_sampleBufferDelegate: AVCaptureVideoDataOutputSampleBufferDelegate!, queuesampleBufferCallbackQueue: dispatch_queue_t!)Objective C
- (void)setSampleBufferDelegate:(id<AVCaptureVideoDataOutputSampleBufferDelegate>)sampleBufferDelegatequeue:(dispatch_queue_t)sampleBufferCallbackQueueПараметры
sampleBufferDelegateОбъект, соответствующий
AVCaptureVideoDataOutputSampleBufferDelegateпротокол, который получит демонстрационные буферы после того, как они будут получены.sampleBufferCallbackQueueОчередь, на которую должны быть вызваны обратные вызовы. Необходимо использовать последовательную очередь отгрузки, чтобы гарантировать, что видеокадры будут поставлены в порядке.
sampleBufferCallbackQueue параметр может не быть
NULL, кроме тех случаев, когда установкаsampleBufferDelegateкnil.Обсуждение
Когда новый видео демонстрационный буфер получен, он отправляется демонстрационному буферному делегату, использующему
captureOutput:didOutputSampleBuffer:fromConnection:. Все методы делегата вызываются на указанную очередь отгрузки.Если очередь будет блокирована, когда новые кадры будут получены, то те кадры будут автоматически отброшены за один раз определенные значением
alwaysDiscardsLateVideoFramesсвойство. Это позволяет Вам обрабатывать существующие кадры на той же очереди, не имея необходимость управлять потенциальными увеличениями использования памяти, которые иначе произошли бы, когда та обработка неспособна не отставать от уровня входящих кадров.Если Ваша обработка кадра последовательно неспособна не отставать от уровня входящих кадров, необходимо рассмотреть использование
minFrameDurationсвойство, которое будет обычно приводить к лучшим показателям производительности и большему количеству непротиворечивых частот кадров, чем одно только отбрасывание кадра.Если необходимо минимизировать возможности отбрасываемых кадров, необходимо указать очередь, на которой достаточно мелкая сумма обработки делается за пределами получения демонстрационных буферов. Однако при миграции дополнительной обработки на другую очередь Вы ответственны за обеспечение, что использование памяти не растет без связанного от необработанных кадров.
Специальные замечания
Этот метод использование
dispatch_retainиdispatch_releaseуправлять очередью.Оператор импорта
Objective C
@import AVFoundation;Swift
import AVFoundationДоступность
Доступный в OS X v10.7 и позже.
-
sampleBufferDelegate sampleBufferDelegateСвойствоДелегат объекта получения. (только для чтения)
Объявление
Swift
var sampleBufferDelegate: AVCaptureVideoDataOutputSampleBufferDelegate! { get }Objective C
@property(nonatomic, readonly) id< AVCaptureVideoDataOutputSampleBufferDelegate > sampleBufferDelegateОбсуждение
Делегат получает демонстрационные буферы после того, как они будут получены.
Вы устанавливаете делегата, использующего
setSampleBufferDelegate:queue:.Оператор импорта
Objective C
@import AVFoundation;Swift
import AVFoundationДоступность
Доступный в OS X v10.7 и позже.
-
Очередь, на которую обратные вызовы делегата должны быть вызваны (только для чтения)
Объявление
Swift
var sampleBufferCallbackQueue: dispatch_queue_t! { get }Objective C
@property(nonatomic, readonly) dispatch_queue_t sampleBufferCallbackQueueОбсуждение
Вы устанавливаете использование очереди
setSampleBufferDelegate:queue:.Оператор импорта
Objective C
@import AVFoundation;Swift
import AVFoundationДоступность
Доступный в OS X v10.7 и позже.
