Приложение для записи видео. Я хочу, чтобы он работал без остановки/приостановки фоновой музыки (например, когда пользователь прослушивает Apple Music). Это можно сделать с настройкой категории mixWithOthers
на AVAudioSession
singleton.
После установки категории я также должен добавить AVCaptureDeviceInput
в AVCaptureSession
(так что звук будет записан). Это приводит к сбою/искажению фонового звука, а также к сбросу/переоценке видео.
Я исследовал, и кажется, что фоновый звуковой сбой - это то, чего нельзя избежать, но при добавлении ввода видео не должно reset. Результатом сброса видео является то, что первый кадр записанного видео либо темный/черный, либо начинается с фокусного кадра, а затем фокусируется.
Также проверено приложение 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)")
}
И затем:
//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
}
Можно ли сделать это без каких-либо сбоев? Если нет, то как я могу сделать это, по крайней мере, как Snapchat (нет видео reset при вызове addInput)?