Технические вопросы и ответы QA1600

Получение QTKit - Извлекающий информацию о Временном коде SMPTE из QTSampleBuffer

Q: Как может я извлекать информацию о временном коде SMPTE во время воспроизведения устройства с помощью QTCaptureFileOutput объект?

A: Как может я извлекать информацию о временном коде SMPTE во время воспроизведения устройства с помощью QTCaptureFileOutput объект?

Если устройство, от которого Вы получаете, обеспечивает временной код SMPTE, демонстрационный буфер (QTSampleBuffer) объекты, представленные при выводе, будут тегированы с метаданными временного кода, к которым можно получить доступ с помощью QTSampleBufferSMPTETimeAttribute ключ.

Например, оба QTCaptureFileOutput и QTCaptureDecompressedVideoOutput объектам вызвали метод делегата captureOutput:didOutputSampleBuffer:fromConnection: который вызывается каждый раз, когда вывод получает новый демонстрационный буфер. При помощи QTSampleBuffer attributeForKey: метод, временной код SMPTE может быть вытащен для каждого демонстрационного буфера, полученного как показано в Перечислении 1.

Перечисление 1  

- (void)captureOutput:(QTCaptureFileOutput *)captureOutput
                      didOutputSampleBuffer:(QTSampleBuffer *)sampleBuffer
                             fromConnection:(QTCaptureConnection *)connection
{
    NSValue *SMPTETime = [sampleBuffer attributeForKey:QTSampleBufferSMPTETimeAttribute];
    if (SMPTETime) {
        NSLog(@"SMPTE Time: %@", QTStringFromSMPTETime([SMPTETime SMPTETimeValue]));
    }
}

A QTSampleBuffer может иметь другие атрибуты также. Следующие атрибуты объявляются в QTSampleBuffer.h.

QTSampleBufferDateRecordedAttribute

Возвращает дату, на которую носители в буфере был первоначально зарегистрирован.

Значение NSDate.

@"dateRecorded" строковое значение может использоваться по ключевым путям для кодирования значения ключа, наблюдения значения ключа и привязки.

QTSampleBufferHostTimeAttribute

Если буфер из оперативного источника, этот атрибут возвращает время узла буфера.

Значение, возвращенное этим атрибутом, может быть по сравнению с возвращаемым значением CVGetCurrentHostTime или AudioGetCurrentHostTime определить, слишком опаздывает ли это в буфер, который будет обработан в режиме реального времени.

Значение NSNumber интерпретируемый как a UInt64.

@"hostTime" строковое значение может использоваться по ключевым путям для кодирования значения ключа, наблюдения значения ключа и привязки.

QTSampleBufferSMPTETimeAttribute

Возвращает временной код SMPTE для демонстрационного буфера, если это имеет тот.

Значение NSValue интерпретируемый как a SMPTETime (определенный в CoreAudio/CoreAudioTypes.h).

@"SMPTETime" строковое значение может использоваться по ключевым путям для кодирования значения ключа, наблюдения значения ключа и привязки.

QTSampleBufferSceneChangeTypeAttribute

Если буфер отмечает изменение сцены во входном содержании, возвращает постоянное Изменение Сцены. Возвращенная константа указывает тип изменения сцены.

@"sceneChangeType" строковое значение может использоваться по ключевым путям для кодирования значения ключа, наблюдения значения ключа и привязки.

QTSampleBufferExplicitSceneChange

Указывает, что изменение сцены было явно отмечено в демонстрационных буферных метаданных.

Эта константа возвращается QTSampleBufferSceneChangeTypeAttribute указание, какое изменение сцены, если таковые имеются, отмечено демонстрационным буфером.

QTSampleBufferTimeStampDiscontinuitySceneChange

Указывает, что сцена изменилась вследствие разрыва в метках времени между текущим демонстрационным буфером и предыдущим демонстрационным буфером.

Эта константа возвращается QTSampleBufferSceneChangeTypeAttribute указание, какая сцена chnage, если таковые имеются, отмечена демонстрационным буфером.

Ссылки



История версии документа


ДатаПримечания
17.03.2008

Новый документ, описывающий, как использовать QTSampleBufferSMPTETimeAttribute с демонстрационным буфером.