Да вместо 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
.