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