Seb*_*sas 5 avaudiosession avplayer swift
我有一个应用程序可以在用户同时播放视频时记录他们的音频会话,问题是视频的播放从扬声器中传出。
理想情况下,我想取消来自扬声器的音频,只通过麦克风记录用户的声音。
示例应用程序:FaceTime FaceTime 会在您进行 FaceTime 通话时取消您正在播放的音乐,并仅记录用户的声音 ( https://www.quora.com/How-does-an-iPhone-cancel-out-the-音乐你正在播放时你面对时间某人)
下面是我添加音频会话以记录用户的代码:
let audioInputDevice = AVCaptureDevice.default(
.builtInMicrophone,
for: .audio,
position: .unspecified
)
.default(for: AVMediaType.audio)!
let session = self.previewLiveCamera.cameraLayer!.session!
//TODO: fix Audio Input, do not mix with other video audio
do {
audioInput = try AVCaptureDeviceInput(device: audioInputDevice!)
session.addInput(audioInput!)
} catch {
print("failed to add audio input")
}
for output in session.outputs {
let connectionOutput = output as! AVCaptureMovieFileOutput
self.connectionOutput = connectionOutput
print("Started reacording to \(fileURL!)")
self.connectionOutput.startRecording(to: fileURL!, recordingDelegate: self)
}
Run Code Online (Sandbox Code Playgroud)
此外,我为用户同时观看的视频设置了视频播放器:
let postPlayer = AVPlayer(url: postVideoUrl!)
cell.playerLayer.player = postPlayer
Run Code Online (Sandbox Code Playgroud)
添加输入音频源后,您需要设置音频模式:
\ndo {\n audioInput = try AVCaptureDeviceInput(device: audioInputDevice!)\n session.addInput(audioInput!)\n} catch {\n print("failed to add audio input")\n}\n\n// Add the following lines:\ntry! AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .voiceChat)\ntry! AVAudioSession.sharedInstance().setActive(true)\n
Run Code Online (Sandbox Code Playgroud)\n.voiceChat 将使设备\xe2\x80\x99s 音调均衡针对语音进行优化,并且允许的音频路由集减少为仅适合语音聊天的路由
\nhttps://developer.apple.com/documentation/avfoundation/avaudiosession/mode/1616455-voicechat
\n如果在设置类别后音频中仍然存在过多扬声器音频,则您需要考虑启用主动回声消除 [AEC]。这是在 iOS 下执行此操作的示例:
\nhttps://github.com/twilio/video-quickstart-ios/blob/master/AudioDeviceExample/AudioDevices/ExampleAVAudioEngineDevice.m#L802请注意 VoiceProcessingIO 等人。
\n 归档时间: |
|
查看次数: |
2561 次 |
最近记录: |