【发布时间】:2022-06-16 13:40:52
【问题描述】:
我正在开发一个视频/音频通话应用程序,我需要提供四个与音频输出相关的选项:
扬声器,内置麦克风,任何支持音频的 BLE 设备,无音频输出
以下我使用过的函数:
static func setBuiltInMic() {
let outputs = audioSession.availableInputs
for output in outputs! {
if output.portType.rawValue == AVAudioSession.Port.builtInMic.rawValue {
do {
try audioSession.setPreferredInput(output)
} catch let error {
print("Setting Built in Mic Port: \(error.localizedDescription)")
}
}
}
}
static func setAndCheckBLEAudioPort() -> Bool {
let outputs = audioSession.availableInputs
for output in outputs! {
if output.portType.rawValue == AVAudioSession.Port.bluetoothHFP.rawValue {
do {
try audioSession.setPreferredInput(output)
return true
} catch let error {
print("Setting BLE Port: \(error.localizedDescription)")
return false
}
}
}
return false
}
static func setupAudioSession(isSpeakerEnabled: Bool) {
do {
try audioSession.setCategory(.playAndRecord)
try audioSession.setMode(.voiceChat)
try audioSession.overrideOutputAudioPort(isSpeakerEnabled ? .speaker : .none)
try audioSession.setActive(true, options: [])
} catch let error as NSError {
print("Fail: \(error.localizedDescription)")
}
}
但这不起作用即使我尝试使用 setupAudioSession 将其静音,音频仍然来自不同的来源,例如扬声器。
有人有什么想法或参考可以让我研究一下吗?
【问题讨论】:
-
我没有调试这个,但
let outputs = audioSession.availableInputs对我来说似乎是错误的。 -
这通常会返回端口类型,就像我打开了 airpods 一样,然后返回蓝牙类型和 airpods 的名称,如果不是,则返回为扬声器。如果这对您来说似乎是错误的,您是否有任何参考资料可供我尝试。
-
您正在将输入分配给输出设备,这对我来说似乎很奇怪。但没有参考。
-
如果我能得到,我可以尝试输出,但两者都会引用将被分配的端口。
标签: ios swift avaudiosession twilio-video videocall