gpt4 book ai didi

iOS 相机 : `AVCaptureAudioDataOutput` activate audio session on the fly, 避免背景音乐卡顿

转载 作者:行者123 更新时间:2023-12-04 11:14:13 29 4
gpt4 key购买 nike

我使用 AVFoundation 创建了一个相机,它能够使用 AVCaptureVideoDataOutput 录制视频和音频和 AVCaptureAudioDataOutput .我创建我的捕获 session ,连接所有输入以及视频和音频数据输出,然后相机处于空闲状态。用户现在可以开始视频录制。
问题
问题在于,在我开始捕获 session ( captureSession.startRunning() ) 后,背景音乐立即断断续续。我认为这是因为一旦捕获 session 开始运行,AVCaptureAudioDataOutput内部激活 AVAudioSession ( AVAudioSession.setActive(...) ),我不希望它这样做。我希望它处于空闲状态(并且不提供任何音频输出缓冲区),直到我明确激活 Audio Session (一旦用户开始录制)。
这真的很烦人,因为相机是我们应用程序的开始屏幕,每次用户打开或关闭应用程序时,他的音乐都会断断续续。
我知道这在某种程度上是可能的,因为 Snapchat 就是这样工作的——你打开应用程序,背景音频继续流畅地播放。开始录制后,背景音乐会出现轻微的卡顿,但是一旦短暂的卡顿结束,相机就会顺利运行并开始录制。
我的代码:

func configureSession() {

captureSession.beginConfiguration()

// Video, Photo and Audio Inputs
...

// Video Output
...

// Audio Output
audioOutput = AVCaptureAudioDataOutput()
guard captureSession.canAddOutput(audioOutput!) else {
throw CameraError.parameter(.unsupportedOutput(outputDescriptor: "audio-output"))
}
audioOutput!.setSampleBufferDelegate(self, queue: audioQueue)
captureSession.addOutput(audioOutput!)

try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord,
options: [.mixWithOthers,
.allowBluetoothA2DP,
.defaultToSpeaker,
.allowAirPlay])

captureSession.commitConfiguration()
}
我试过的
延迟配置 AVAudioSession.sharedInstance()我尝试先配置 AVAudioSession.sharedInstance与类别 AVAudioSession.Category.playback ,然后切换到 .playAndRecord一旦我想开始录制音频。
这不起作用, AVCaptureSessionRuntimeError事件在启动相机后立即被调用,错误代码为 -10851 ,这意味着 kAudioUnitErr_InvalidPropertyValue .我认为这意味着 AVCaptureAudioDataOutput不允许从 Audio Session 录制,但我现在不想这样做 - 它应该只是闲置。
延迟添加 AVCaptureAudioDataOutput输出
我试图在开始时不添加音频输出( AVCaptureAudioDataOutput ),并且只在用户开始录制后“按需”添加它,虽然这对背景音乐效果很好(开始时没有口吃,只有短暂的口吃一旦用户开始录制,正是我想要的),它使预览卡住了很短的时间(因为捕获 session 正在通过 beginConfiguration + 音频输出添加 + commitConfiguration 重新配置)
有谁知道如何实现我在这里尝试做的事情 - 或者 Snapchat 是如何做到的?任何帮助表示赞赏,谢谢!

最佳答案

终于想通了。我只是创建了一个单独的 AVCaptureSession专门用于与主捕获 session 的 masterClock 同步的音频输入/输出.然后我可以即时启动/停止辅助捕获 session (在开始录制前不久)

关于iOS 相机 : `AVCaptureAudioDataOutput` activate audio session on the fly, 避免背景音乐卡顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67807394/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com