我已经设置了一个AVCaptureSession和AVAudiEngine来录制视频和音频。我正在播放AVPlayer的结果,除了音频问题之外,它工作得很好。
这个问题只出现在我的iPhone上,iPad工作正常(可能是因为它没有接收器)。问题是,当我这样设置我的AVAudioSession时:
do {
try AVAudioSession.sharedInstance().setCategory(.playAndRecord, options: [.defaultToSpeaker])
try AVAudioSession.sharedInstance().setActive(true, options: .notifyOthersOnDeactivation)
} catch {
NSLog(logPrefix + "Could not set the category.")
}
音频来自接收器和扬声器,几乎听不见。如果我省略了这些选项,音频就会从接收器中出来(正如预期的那样)。如果我包括一个模式(voiceChat或videoChat),iPad不喜欢它(采样率没有同步)。
你知道有什么诡计能让它在扬声器上大声播放吗?
发布于 2021-12-11 00:27:01
虽然很奇怪,但对我有效的解决方案涉及两个关键步骤:
。
代码:
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(.playAndRecord,
mode: .videoChat,
options: [.defaultToSpeaker,
.allowAirPlay,
.allowBluetooth])
try audioSession.setActive(true)
let engine = AVAudioEngine()
try engine.inputNode.setVoiceProcessingEnabled(true)
let playerItem = AVPlayerItem(url: ...)
let player = AVPlayer(playerItem: playerItem)
var observer: NSKeyValueObservation? = nil
observer = playerItem.observe(\.status, options: [.new, .old], changeHandler: { (playerItem, change) in
if playerItem.status == .readyToPlay {
try? audioSession.overrideOutputAudioPort(.speaker)
}
}
player.play()
https://stackoverflow.com/questions/68513409
复制相似问题