AVCaptureVideoDataOutputSampleBufferDelegate
Этот протокол определяет интерфейс для делегатов AVCaptureVideoDataOutput
объект получить полученные видео демонстрационные буферы и быть уведомленными относительно отброшенных последних демонстрационных буферов.
Делегат AVCaptureVideoDataOutput
объект должен принять AVCaptureVideoDataOutputSampleBufferDelegate
протокол. Методы в этом протоколе являются дополнительными.
Наследование
Не применимый
Оператор импорта
Swift
import AVFoundation
Objective C
@import AVFoundation;
Доступность
Доступный в OS X v10.7 и позже.
-
captureOutput (_: didOutputSampleBuffer:fromConnection:) - captureOutput:didOutputSampleBuffer:fromConnection:
Уведомляет делегата, что был записан новый видеокадр.
Объявление
Swift
optional func captureOutput(_
captureOutput
: AVCaptureOutput!, didOutputSampleBuffersampleBuffer
: CMSampleBuffer!, fromConnectionconnection
: AVCaptureConnection!)Objective C
- (void)captureOutput:(AVCaptureOutput *)
captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
Параметры
captureOutput
Выходной объект получения.
sampleBuffer
A
CMSampleBuffer
объект, содержащий данные видеокадра и дополнительную информацию о кадре, таком как его формат и время представления.connection
Соединение, из которого было получено видео.
Обсуждение
Делегаты получают это сообщение каждый раз, когда выходные получения и выводят новый видеокадр, декодируя или повторно кодируя его, как указано его videoSettings свойством. Делегаты могут использовать предоставленный видеокадр в сочетании с другим APIs для последующей обработки.
Этот метод вызывают на очереди отгрузки, указанной выводом
sampleBufferCallbackQueue
свойство. Это периодически вызывают, таким образом, должно быть эффективно предотвратить проблемы производительности получения, включая отброшенные кадры.Если необходимо сослаться
CMSampleBuffer
объект за пределами объема этого метода, Вы должны CFRetain это и затем CFRelease это, когда Вы закончены с ним.Для поддержания оптимальной производительности некоторая выборка буферизует непосредственно ссылочные пулы памяти, которая, возможно, должна быть снова использована системой устройства и другими вводами получения. Это часто имеет место для несжатого собственного получения устройства, где блоки памяти копируются как можно меньше. Если многократные демонстрационные буферы сошлются на такие пулы памяти слишком долго, то вводы больше не будут в состоянии скопировать новые выборки в память, и те выборки будут отброшены.
Если Ваше приложение заставляет выборки быть отброшенными путем сохранения предоставленного
CMSampleBufferRef
объекты слишком долго, но этому нужен доступ к демонстрационным данным в течение длительного периода времени, рассмотрите копирование данных в новый буфер и затем выпуск демонстрационного буфера (если это было ранее сохранено) так, чтобы могла быть снова использована память, на которую это ссылается.Оператор импорта
Objective C
@import AVFoundation;
Swift
import AVFoundation
Доступность
Доступный в OS X v10.7 и позже.
-
captureOutput (_: didDropSampleBuffer:fromConnection:) - captureOutput:didDropSampleBuffer:fromConnection:
Уведомляет делегата, что был отброшен видеокадр.
Объявление
Swift
optional func captureOutput(_
captureOutput
: AVCaptureOutput!, didDropSampleBuffersampleBuffer
: CMSampleBuffer!, fromConnectionconnection
: AVCaptureConnection!)Objective C
- (void)captureOutput:(AVCaptureOutput *)
captureOutput
didDropSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
Параметры
captureOutput
Выходной объект получения.
sampleBuffer
A
CMSampleBuffer
объект, содержащий информацию об отброшенном кадре, таком как его формат и время представления..Этот демонстрационный буфер не содержит ни одни из исходных видеоданных.
connection
Соединение, из которого было получено видео.
Обсуждение
Делегаты получают это сообщение каждый раз, когда отбрасывается последний видеокадр. Этот метод вызывают один раз для каждого отброшенного кадра. Это вызывают на очереди отгрузки, указанной выводом
sampleBufferCallbackQueue
свойство.sampleBuffer
будет содержать akCMSampleBufferAttachmentKey_DroppedFrameReason
присоединение, детализирующее, почему был отброшен кадр. Кадр может быть отброшен, потому что было поздно (kCMSampleBufferDroppedFrameReason_FrameWasLate
), обычно вызванный обработкой клиента, берущей слишком долго. Это может также быть отброшено, потому что обеспечение модуля структурирует, вне буферов (kCMSampleBufferDroppedFrameReason_OutOfBuffers
). Кадры могут также быть отброшены вследствие разрыва (kCMSampleBufferDroppedFrameReason_Discontinuity
), если модуль, обеспечивающий демонстрационные буферы, испытал разрыв, и было потеряно неизвестное число кадров. Это условие обычно вызывается системой, являющейся слишком занятым.Поскольку этот метод вызывают на той же очереди отгрузки, которая ответственна за вывод видеокадров, должно быть эффективно предотвратить дальнейшие проблемы производительности получения, такие как дополнительные отброшенные видеокадры.
Оператор импорта
Objective C
@import AVFoundation;
Swift
import AVFoundation
Доступность
Доступный в OS X v10.7 и позже.