###前提・実現したいこと
xcode7.3にて、iphoneから録音した音声をリアルタイムに送信したい。
録音はAVCaptureSessionで行い、captureOutputにて得られるsampleBuffer(llcm)をformat:AAC,16000Khzにエンコード。
エンコードは以下のライブラリを使用。
エンコードライブラリ
###発生している問題・エラーメッセージ・疑問点
AAC decode failed
7/6 正常に動いたものにコード書き換え
encodeは上記ライブラリ使用
16000KHzのためAACEncoderのfreqIdx = 8
captureClass var audioConnection:AVCaptureConnection? var sessions = AVCaptureSession() var aacEncoder: AACEncoder = AACEncoder() func setupMicrophone() { let audio_output = AVCaptureAudioDataOutput() let audioSession:AVAudioSession = AVAudioSession.sharedInstance() try! audioSession.setCategory(AVAudioSessionCategoryRecord) try! audioSession.setPreferredSampleRate(16000.0) try! audioSession.setPreferredIOBufferDuration(1024.0/16000.0) try! audioSession.setActive(true) self.sessions.beginConfiguration() self.sessions = AVCaptureSession() self.sessions.automaticallyConfiguresApplicationAudioSession = false self.sessions.commitConfiguration() sessions.sessionPreset = AVCaptureSessionPresetLow let mic = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeAudio) var mic_input: AVCaptureDeviceInput! audio_output.setSampleBufferDelegate(self, queue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) do { mic_input = try AVCaptureDeviceInput(device: mic) } catch { return } sessions.addInput(mic_input) sessions.addOutput(audio_output) audioConnection = audio_output.connectionWithMediaType(AVMediaTypeAudio) } func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) { if connection == audioConnection { aacEncoder.encodeSampleBuffer(sampleBuffer) { (data:NSData!, error:NSError!) in if data != nil{ 送信処理(data) NSLog("complete data.length %d", data.length) } } }
###考えられる原因
・nsDataへの変換に問題がある?
###試したこと
・adtsヘッダのfreqIdxを変更。
・ACCaptureのsampleRate,IOBufferDurationを変更。
・音楽ファイル.aacをnsDataとして読み込み、adtsヘッダをつけて送信したところ正しく再生された。
当方、xcodeを触り始めて間もない初心者ですが、どなたかご教授願いします。
回答2件
あなたの回答
tips
プレビュー