【发布时间】:2020-01-09 15:40:57
【问题描述】:
我正在开发一个带有接收器录音功能的音频流应用程序。
我卡在了用户想要在接收端录制音频流的地方。
下面是我的代码 初始化
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)
}
我正在尝试使用耳机录音,但它不起作用
【问题讨论】:
-
WebRTC 在接收端不提供任何录制选项。
-
请与我们分享您尝试过的和无效的。还可以考虑重新提出您的问题。 “谁能帮忙?”不是right way of asking。
-
@normanius 我尝试使用 AVAudioEngine 从耳机录制声音,但它不起作用
标签: ios objective-c swift webrtc