Я вручную пишу видеомагнитофон.К сожалению, это необходимо, если вы хотите записывать видео и одновременно использовать ARKit.Я понял большую часть этого, но теперь мне нужно немного его оптимизировать, потому что мой телефон довольно сильно работает с ARKit, Vision и этим рекордером одновременно.
Чтобы сделать рекордер, вам нужноиспользуйте AVAssetWriter
с AVAssetWriterInput
(и AVAssetWriterInputPixelBufferAdaptor
).Вход имеет свойство isReadyForMoreMediaData
, которое необходимо проверить, прежде чем вы сможете написать другой кадр.Я записываю в режиме реального времени (или как можно ближе).
Прямо сейчас, когда ARKit.ARSession
дает мне новый сеанс, я немедленно передаю его на AVAssetWriterInput
.То, что я хочу сделать, это добавить его в очередь, и проверить цикл, чтобы увидеть, есть ли образцы для записи.Что касается жизни, я не могу понять, как это сделать эффективно.
Я хочу просто запустить цикл while, как это, но кажется, что это плохая идея:
func startSession() {
// …
while isRunning {
guard !pixelBuffers.isEmpty && writerInput.isReadyForMoreMediaData else {
continue
}
// process sample
}
}
Могу ли я запустить этот отдельный поток из ARSession.delegateQueue
?Я не хочу сталкиваться с проблемами с CVPixelBuffer
s из-за слишком долгого удержания камеры.