用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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...