CMSampleBufferGetSampleTimingInfo: нет продолжительности?

У меня есть прямая трансляция, и CMSampleBufferGetSampleTimingInfo дает продолжительность с CMTime(value=0, timescale=0) для видео.

Для аудио я получаю 1024 сэмпла за раз, но CMSampleBufferGetSampleTimingInfo(sampleBuffer, index, &timingInfo) дает точно такую ​​же презентациюTimeStamp для каждого отдельного индекса в сэмпле.

Как я могу получить точную информацию о продолжительности видеокадров во время прямой трансляции и как получить фактическое время аудиосэмпла в CMSampleBufferRef?


person Stefan Kendall    schedule 22.11.2015    source источник


Ответы (1)


Вы можете полагаться только на presentationTimeStamps, поэтому вы не можете знать продолжительность текущего видеокадра, пока не появится следующий кадр. Это имеет смысл для потокового вещания, поскольку частота кадров при захвате варьируется и зависит от освещения и т. д., но это также верно, когда буферы сэмплов берутся из файла.

Длительность можно рассчитать так:

CMTimeSubtract(timingInfoNext.presentationTimeStamp, timingInfoCurrent.presentationTimeStamp)
person Rhythmic Fistman    schedule 22.11.2015
comment
Думаю, это имеет смысл, но усложняет другую математику. Средней длительности между кадрами может хватить для моих нужд. - person Stefan Kendall; 23.11.2015