如何解决用AVAssetWriter创建的音频文件未被AVAudioPlayer识别
我在ARSession期间捕获了一些CMSampleBuffer音频。我想将其另存为文件,以便稍后在应用程序中由AVAudioPlayer播放。
该应用程序正在运行,但音频播放器处于静音状态,并且我得到的错误是Domain=NSOSStatusErrorDomain Code=2003334207 "(null)"
检查是否已存在该文件,然后返回true,所以我认为问题在于如何创建该文件。数据未正确保存,或者我使用的格式设置不兼容。
启动/停止AVAssetWriter的代码:
func startRecording() {
let directoryURL = FileManager.default.urls(for: .documentDirectory,in: .userDomainMask)[0]
let audioOutputURL = URL(fileURLWithPath: "audio",relativeTo: directoryURL).appendingPathExtension("caf")
do {
assetWriter = try AVAssetWriter(outputURL: audioOutputURL,fileType: AVFileType.caf)
} catch {
print(error)
}
let audioOutputSettings = [
AVFormatIDKey : kAudioFormatMPEG4AAC,AVNumberOfChannelsKey : 2,AVSampleRateKey : 44100.0,AVEncoderBitRateKey : 16000.0,] as [String : Any]
audioInput = AVAssetWriterInput(mediaType: AVMediaType.audio,outputSettings: audioOutputSettings)
audioInput?.expectsMediaDataInRealTime = true
assetWriter?.add(audioInput!)
assetWriter?.startWriting()
}
func stopRecording() {
assetWriter?.finishWriting(completionHandler: {print("file finished writing")})
}
ARSession委托方法,其中生成CMSampleBuffer:
func session(_ session: ARSession,didOutputAudioSampleBuffer audioSampleBuffer: CMSampleBuffer) {
let sourceTime = CMSampleBufferGetPresentationTimeStamp(audioSampleBuffer)
assetWriter?.startSession(atSourceTime: sourceTime)
audioInput?.append(audioSampleBuffer)
}
谁能知道问题出在哪里(知道我可能有几个)?
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。