Я использую Xcode 11.3 с iOS 13.1, установленным на моем iPhoneX. Мой iPhoneX подключен через Bluetooth-гарнитуру SONY WI-C400 с микрофоном. Я пытаюсь записать мультимедиа в формате QuickTimeMov ie с MPEG4AA C для звука с гарнитуры Bluetooth следующим образом:
У меня есть следующий код для настройки AVAssetWriterInput для захвата звука.
let assetWriter = try AVAssetWriter(outputURL: outputURL, fileType: AVFileType.mov)
assetWriter.movieFragmentInterval = CMTimeMakeWithSeconds(1.0, preferredTimescale: AudioSources.timescale)
let audioOutputSettings = [AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVNumberOfChannelsKey: 2, // stereo
AVSampleRateKey: 128000] as [String: Any]
let audioInput = AVAssetWriterInput(mediaType: AVMediaType.audio,
outputSettings: audioOutputSettings)
if assetWriter.canAdd(audioInput!) {
// canAdd is true
assetWriter.add(audioInput!)
}
Я могу успешно добавить audioInput в assetWriter. Но когда аудиопакеты добавляются в audioInput следующим образом, я получаю ошибку
if audioInput?.isReadyForMoreMediaData ?? false {
let success = audioInput?.append(sampleBuffer) ?? false
if !success {
if assetWriter?.status == AVAssetWriter.Status.failed {
if assetWriter?.error != nil {
print(assetWriter?.error)
// Control comes here and error is getting printed
}
}
}
}
Выводится ошибка
Optional(Error Domain=AVFoundationErrorDomain Code=-11861 "Cannot Encode Media" UserInfo={NSLocalizedFailureReason=The encoding parameters are not supported., NSLocalizedDescription=Cannot Encode Media, NSUnderlyingError=0x282f04ff0 {Error Domain=NSOSStatusErrorDomain Code=-12651 "(null)"}})
Чего мне здесь не хватает?