我使用设备麦克风录制音频,其中AVAssetExportSession
以 .caf 格式返回文件,该格式仅可在Apple设备上播放,但不能在Android设备上播放。由于Apple不支持 .mp3 文件,因此我希望在上传到服务器之前将其转换为 .mp4 格式。
.mp4 仅适用于音频吗?我可以使用func setupAudioRecorder ()
{
let fileMgr = FileManager.default
let dirPaths = fileMgr.urls(for:.documentDirectory,
in:.userDomainMask)
let soundFileURL = dirPaths[0].appendingPathComponent("myaudio.caf")
let recordSettings =
[AVEncoderAudioQualityKey: AVAudioQuality.min.rawValue,
AVEncoderBitRateKey: 16,
AVNumberOfChannelsKey: 2,
AVSampleRateKey: 44100.0] as [String : Any]
do {
try audioSession.setCategory(
AVAudioSessionCategoryPlayAndRecord)
} catch let error as NSError {
print("audioSession error: \(error.localizedDescription)")
}
do {
try audioRecorder = AVAudioRecorder(url: soundFileURL,
settings: recordSettings as [String : AnyObject])
audioRecorder?.prepareToRecord()
} catch let error as NSError {
print("audioSession error: \(error.localizedDescription)")
}
}
转换它吗?
以下是录音机代码:
{{1}}
答案 0 :(得分:4)
经过大量搜索,我可以使用这段代码将 .caf 转换为 .mp4
let audioURL = ".caf audio file url"
let fileMgr = FileManager.default
let dirPaths = fileMgr.urls(for: .documentDirectory,
in: .userDomainMask)
let outputUrl = dirPaths[0].appendingPathComponent("audiosound.mp4")
let asset = AVAsset.init(url: audioURL)
let exportSession = AVAssetExportSession.init(asset: asset, presetName: AVAssetExportPresetHighestQuality)
// remove file if already exits
let fileManager = FileManager.default
do{
try? fileManager.removeItem(at: outputUrl)
}catch{
print("can't")
}
exportSession?.outputFileType = AVFileTypeMPEG4
exportSession?.outputURL = outputUrl
exportSession?.metadata = asset.metadata
exportSession?.exportAsynchronously(completionHandler: {
if (exportSession?.status == .completed)
{
print("AV export succeeded.")
// outputUrl to post Audio on server
}
else if (exportSession?.status == .cancelled)
{
print("AV export cancelled.")
}
else
{
print ("Error is \(String(describing: exportSession?.error))")
}
})
答案 1 :(得分:0)
您可以直接在MPEG4 AAC中录制而无需添加步骤进行转换。将AVFormatIDKey
与kAudioFormatMPEG4AAC
值一起使用,并将采样率降至8000或16000。