Я использую AVAssetWriter для сохранения перекодирования экрана в mp4 (без H.264
видео и aac
аудио кодирования). Все работает отлично, как и ожидалось, но некоторые пользователи жаловались на проблему размера видео 0 КБ, то есть данные не записываются в выходной файл.
Пытаясь снова и снова, я смог воспроизвести эту проблему. Это произошло после нескольких успешных операций записи (иногда после 2, иногда после 5, а на некоторых машинах этого не происходит) Я сравнил успешный поток и провал посмотрел журналы для него. Единственное, что я узнал, это
CMIO_Unit_Converter_Audio.cpp: 588: Сбой перестроенияAudioConverter AudioConverterSetProperty () (1886547824)
Где
kAudioFormatUnsupportedPropertyError = 1886547824
Что заставляет меня проверять аудиоформат в случае сбоя, но аудиоформат для AVAssetWriter был в полном порядке.
Я настраиваю вход звуковой записи как
Входы AVAssetWriter
[<AVAssetWriterInput: 0x600002047950, mediaType = vide, outputSettings = {
AVVideoCodecKey = avc1;
AVVideoHeightKey = 840;
AVVideoWidthKey = 1360;
}>, <AVAssetWriterInput: 0x60000205e740, mediaType = soun, outputSettings = {
AVFormatIDKey = 1633772320;
AVNumberOfChannelsKey = 2;
AVSampleRateKey = 44100;
}>]
Мой код для создания AVAssetWriterInput для видео и аудио выглядит следующим образом
Аудио AVAssetWriterInput
settings = [
AVFormatIDKey : kAudioFormatMPEG4AAC,
AVNumberOfChannelsKey : ch,
AVSampleRateKey : rate,
]
audioInput = AVAssetWriterInput(mediaType: .audio, outputSettings: settings)
Видео AVAssetWriterInput
var settings: [String : Any] = [
AVVideoWidthKey : cx,
AVVideoHeightKey : cy,
AVVideoCodecKey : AVVideoCodecType.h264,
]
videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: settings)
Я заметил, что ошибка в журнале появляется после запуска AVCaptureSession и до AVCaptureVideoDataOutputSampleBufferDelegate
captureOutput
. Я зарегистрировал входы и выходы AVCaptureSession, а также.
Входы AVCaptureSession
[<AVCaptureScreenInput: 0x6000022e18e0>, <AVCaptureDeviceInput: 0x6000022e0a00 [Built-in Microphone]>]
AVCaptureSession Выходы
[<AVCaptureAudioDataOutput: 0x6000022e1f40>, <AVCaptureVideoDataOutput: 0x60000228b7a0>]
Но опять же я не вижу здесь никаких проблем. Я пытался понять это в течение хороших нескольких дней, но не смог этого сделать. Я понятия не имею, что вызывает это, и даже когда все установлено правильно, он не может записать какой-либо вывод. Это происходит только с видео + аудио, если я пишу видео, только оно работает правильно.