Фон : Я записываю пользовательский экран с помощью startCapture
и stopCapture
методов ReplayKit. У меня есть один AVAssetWriter
с двумя AVAssetWriterInputs, по одному для .video и .audioMi c. Writer настроен для видео .h264 (.mov) и аудио LinearPCM. В обработчике завершения finishWriting автора, я вызываю метод, который экспортирует записанные файлы с использованием exportSession. Этот экспорт не удается случайно. Иногда это работает, иногда нет.
После отладки я обнаружил, что экспорт завершается неудачно, когда AVAsset
записанного файла НЕ имеет дорожек ИЛИ имеет только одну дорожку (т. Е. Одну из видео или аудио). треков). Я использовал loadAsynchronously
метод AVAsset
, чтобы убедиться, что дорожки загружены перед последующим вызовом, но он по-прежнему возвращает регистры, как и раньше. Поэтому я подозревал, что проблема должна быть с писателем. Я могу подтвердить, что CMSampleBufferData
добавляется к writerInputs
правильно. А в блоке завершения stopCapture
оба ввода записывающего устройства помечаются как завершенные, и вызывается finishWriting
на записывающем устройстве. Итак, я не уверен, почему существует неопределенное и случайное возникновение этой ошибки и как ее устранить.
Описание ошибки :
Error Domain=AVFoundationErrorDomain Code=-11822 "Cannot Open" UserInfo={NSLocalizedFailureReason=This media format is not supported., NSLocalizedDescription=Cannot Open, NSUnderlyingError=0x28885cc60 {Error Domain=NSOSStatusErrorDomain Code=-16976 "(null)"}}