Вам необходимо экспортировать запись, используя AVAssetExportSession
. Вот хороший метод, который сделает это за вас:
func export(fileType: AVFileType = .m4a, completion: @escaping (() -> Void)) {
let asset = AVAsset(url: recordingFileURL))
guard let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetAppleM4A) else { return }
exportSession.outputFileType = fileType
exportSession.metadata = asset.metadata
exportSession.shouldOptimizeForNetworkUse = true
exportSession.outputURL = exportOutputURL
exportSession.exportAsynchronously {
print("Export finished.")
completion()
}
}
Где exportOutputURL
может быть любым URL, который вы создаете в каталоге документов. Например, мы можем определить его как вычисляемое свойство:
var exportOutputURL: URL? {
let pathURL = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
return pathURL?.appendingPathComponent("my_exported_recording")
}
Теперь у вас будет экспортированный файл m4a в вашем exportOutputURL
.
В зависимости от того, что API ожидает от параметра в быть, вы можете преобразовать в данные следующим образом:
do {
let data = try Data(contentsOf: exportOutputURL)
} catch { ... }
И в base64
строку:
let base64String = data.base64EncodedString()