WebRTC iOS:使用 WebRTC 录制远程音频流 [英] WebRTC iOS: Record Remote Audio stream using WebRTC

查看:378
本文介绍了WebRTC iOS:使用 WebRTC 录制远程音频流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发具有接收器录音功能的音频流应用程序.

I am working on an audio streaming application with recording functionality for a receiver.

我遇到了用户想要在接收器端录制音频流的问题.

I got stuck at the point where the user want to record audio stream on the receiver side.

下面是我的代码初始化

Below is my code Initialisation

var engine = AVAudioEngine()
var recordingFile: AVAudioFile?
var audioPlayer: AVAudioPlayer?
let player = AVAudioPlayerNode()
var isRecording: Bool = false

初始化音频引擎

func initializeAudioEngine() {

        let input = self.engine.inputNode
        let format = input.inputFormat(forBus: 0)

        self.engine.attach(self.player)
        let mainMixerNode = self.engine.mainMixerNode
        self.engine.connect(input, to:mainMixerNode, format: format)
        self.engine.prepare()

        do {
            try self.engine.start()
            self.startRecording()
        } catch (let error) {
            print("START FAILED", error)
        }
    }

开始录制

func startRecording() {

        self.createRecordingFile()

        self.engine.mainMixerNode.installTap(onBus: 0,
                                         bufferSize: 1024,
                                         format: self.engine.mainMixerNode.outputFormat(forBus: 0)) { (buffer, time) -> Void in
            do {
                self.isRecording = true
                try self.recordingFile?.write(from: buffer)
            } catch (let error) {
                print("RECORD ERROR", error);
            }
            return
        }
    }

创建缓冲区

private func createBuffer(forFileNamed fileName: String) -> AVAudioPCMBuffer? {
        var res: AVAudioPCMBuffer?

        if let fileURL = Bundle.main.url(forResource: fileName, withExtension: "caf") {
            do {
                let file = try AVAudioFile(forReading: fileURL)
                res = AVAudioPCMBuffer(pcmFormat: file.processingFormat, frameCapacity:AVAudioFrameCount(file.length))
                if let _ = res {
                    do {
                        try file.read(into: res!)
                    } catch (let error) {
                        print("ERROR read file", error)
                    }
                }
            } catch (let error) {
                print("ERROR file creation", error)
            }
        }
        return res
    }

停止录制

func stopRecording() {
   self.engine.mainMixerNode.removeTap(onBus: 0)
}

我正在尝试使用耳机录音,但它不起作用

I am trying to record using earphone, but It's not working

推荐答案

它会起作用,因为一旦你设置了

Its will work because once you setup

let audiosession = AVAudioSession()

作为 AVAudioSessionCategoryPlayAndRecord 并设置

audiosession.setActive(true)

它将开始记录任何音频转储到设备.

It will start recording whichever audio dump to device.

这篇关于WebRTC iOS:使用 WebRTC 录制远程音频流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆