Да вместо kCMTimeZero. Причина, по которой я полагаю, что ваш график будет отличаться между двумя вызовами. KCMTimeZero имеет шкалу времени 0, где, поскольку ваш следующий вызов имеет шкалу времени 600. Я не уверен, что это будет иметь значение, так как 0 / шкала времени в любом случае равна 0. В любом случае, я бы попробовал, так как AVFoundation может использовать временную шкалу напрямую (например, для установки свойств в заголовке файла MOV).

у некоторые кадры для видео сAVAssetWriterInputPixelBufferAdaptorи поведение w.r.t. время не то, что я ожидал.

Если я напишу только один кадр:

 [videoWriter startSessionAtSourceTime:kCMTimeZero];
 [adaptor appendPixelBuffer:pxBuffer withPresentationTime:kCMTimeZero];

это дает мне видео нулевой длины, чего я и ожидаю.

Но если я продолжу добавлять второй кадр:

 // 3000/600 = 5 sec, right?
 CMTime nextFrame = CMTimeMake(3000, 600); 
 [adaptor appendPixelBuffer:pxBuffer withPresentationTime:nextFrame];

Я получаю десять секунд видео, где я ожидаю пять.

Что тут происходит? Есть лиwithPresentationTime каким-то образом установить как начало кадра, так и продолжительность?

Обратите внимание, что я не звонюendSessionAtSourceTime, только чтоfinishWriting.

Ответы на вопрос(2)

Ваш ответ на вопрос