将AVCaptureDeviceInput添加到CaptureSession会重置/重新聚焦视频

Tan*_*usk 26 ios avaudiosession swift

录像应用程序.我希望它能够在不停止/暂停背景音乐的情况下工作(例如,当用户收听Apple Music时).这我可以设置类别做很好mixWithOthersAVAudioSession单.

设置类别后,我还需要添加AVCaptureDeviceInputAVCaptureSession(所以声音会被记录下来).这会导致背景音频的故障/打嗝以及视频重置/重新聚焦.

我已经调查过,似乎背景音频故障是无法避免的,但视频在添加输入时不应重置.视频重置的结果是录制视频的第一帧是暗/黑色,或者从失焦帧开始然后聚焦.

还检查Snapchat ios应用程序,他们在开始录制时也有音频故障,但视频开始顺利录制.我究竟做错了什么.

我的代码:

//Setting audio session to mixWithOthers upon startup
let session = AVAudioSession.sharedInstance()

do {
    try session.setCategory(AVAudioSessionCategoryPlayAndRecord,
                            with: [.mixWithOthers])
    if session.mode != AVAudioSessionModeVideoRecording {
        try session.setMode(AVAudioSessionModeVideoRecording)
    }
} catch let error {
    print("avsession category error: \(error)")
}
Run Code Online (Sandbox Code Playgroud)

然后:

//Just before recording starts will add audio input
let audioDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeAudio)
do
{
    let deviceInput = try AVCaptureDeviceInput(device: audioDevice) as AVCaptureDeviceInput
    if captureSession.canAddInput(deviceInput) {
        captureSession.addInput(deviceInput)
    }
    else {
        print("Could not add audio device input to the session")
    }


}
catch let error as NSError {
    print(error.localizedDescription)
    return
}
Run Code Online (Sandbox Code Playgroud)

是否有可能在没有任何故障的情况下这样做?如果没有那么我怎么能让它至少像Snapchat(在addInput调用时没有视频重置)?

BHe*_*cks -1

所以从你的问题来看,这句话具体是:

\n
\n

视频重置的结果是录制视频的第一帧是暗/黑的,或者是从失焦帧开始然后对焦的。

\n
\n

audioInput向我表明您正在开始视频录制后添加。是否可以audioInput在视频开始录制之前添加设备?我想当添加另一个输入源时,视频“冻结”是预期的行为,因为AVCaptureSession本质上或多或少只是接受输入并输出文件。我想添加audioInput在录制之前添加设备可以解决最终产品中的该问题,因为该操作不会最终出现在录制中!:)

\n

提到的另一条评论是:

\n
\n

您是否在更改输入之前在会话上调用 beginConfiguration / commitConfiguration ?

\n

\xe2\x80\x93 SeanLintern88 4 月 10 日 15:30

\n
\n

我认为问题作者没有解决这个问题,也可能是问题的原因。如这个问题/答案所示,您需要audioInputbegin/commit configuration

\n

一般来说,我找到了核心的苹果文档非常有帮助,并且可能会提供有关您可能想做的更多事情的更多信息。

\n