2015-11-25 2 views
1

Наше приложение использует AVFoundation для захвата видео, отображения, управления и экспорта видео с помощью буферов с образцами. Я пытаюсь понять, что на самом деле представляет CMTime CMSampleBufferGetPresentationTimeStamp(_:).Что представляет собой время представления образца CMSampleBuffer?

Например, когда начинается видеозапись, время представления первого образца составляет 93 часа и 5 минут. Я не понимаю, откуда взялось это значение. Использование времени представления первого образца для запуска сеанса AVAssetWriter создает 93 часа черных кадров до начала воспроизведения видео.

+0

Можете ли вы опубликовать пример значения «CMTime», который вы видите, возвращаемого как 93 часа? – JAL

+0

@JAL Вот представление в секундах: '347851.930463783' ... и представление CMTime:' {value = 347957883945123, timescale = 1000000000} ' –

ответ

1

Он основан на механическом времени, что означает количество тиков от последней перезагрузки. Вы можете создать такой CMTime с помощью этого кода:

mach_timebase_info_data_t timeInfo; 
    mach_timebase_info(&timeInfo); 
    CMTime time = CMTimeMake(mach_absolute_time() * timeInfo.numer/timeInfo.denom, 1000000000); 

Или используйте это, чтобы оно было преобразовано в количество секунд.
double seconds = CACurrentMediaTime();

Смежные вопросы