ios - Agregar AVCaptureDeviceInput a CaptureSession restablece/vuelve a enfocar el video
swift avaudiosession (2)
Así que de su pregunta, esta oración específicamente:
El resultado del reinicio del video es que el primer cuadro del video grabado es oscuro / negro o comienza con el cuadro fuera de foco y luego enfoca.
Me indica que está agregando el audioInput
después de haber comenzado la grabación de video. ¿Es posible agregar el dispositivo audioInput
antes de que el video comience a grabar? Me imagino que el comportamiento esperado del video se "congela" cuando se agrega otra fuente de entrada, ya que AVCaptureSession
esencialmente solo toma entradas y genera un archivo, más o menos. Me imagino que agregar el dispositivo audioInput
antes de la grabación resolvería ese problema en el producto final, ya que esa acción no terminaría en la grabación. :)
Otro comentario que se mencionó fue:
¿Está llamando a beginConfiguration / commitConfiguration en la sesión antes de cambiar las entradas?
- SeanLintern88, 10 de abril a las 15:30.
Creo que esto no fue abordado por el autor de la pregunta, y también podría ser la causa de los problemas. Como se muestra en esta pregunta / respuesta , debe agregar el dispositivo audioInput
entre una llamada de begin/commit configuration
.
En general, considero que los documentos principales de Apple son muy útiles, y probablemente tendrá más información para más cosas que probablemente querrá hacer.
Una aplicación de grabación de video. Quiero que funcione sin detener / pausar la música de fondo (cuando el usuario escucha Apple Music, por ejemplo). Esto se puede hacer muy bien con la configuración de la categoría de mixWithOthers
en AVAudioSession
singleton.
Después de configurar la categoría, también necesito agregar AVCaptureDeviceInput
a AVCaptureSession
(para que el audio se grabe). Esto da como resultado una falla / hipo en el audio de fondo y también el reinicio / reajuste de video.
He investigado y parece que la falla de audio en el fondo es algo que no se puede evitar, pero el video no debe restablecerse cuando se agrega la entrada. El resultado del reinicio del video es que el primer cuadro del video grabado es oscuro / negro o comienza con el cuadro fuera de foco y luego enfoca.
También verificaron la aplicación Snapchat ios y también tienen problemas de audio al iniciar la grabación, pero el video comienza a grabar sin problemas. Qué estoy haciendo mal.
Mi código:
//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)")
}
Y entonces:
//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
}
¿Sería posible hacer esto sin fallas en absoluto? Si no es así, ¿cómo podría hacerlo al menos como Snapchat (sin reinicio de video en la llamada addInput)?
He notado que AVCaptureSession addInput
restablece el silencio establecido por AVAudioSession AVAudioSessionCategory(Solo)Ambient
Categoría de AVAudioSession AVAudioSessionCategory(Solo)Ambient
Category Silenced Interrupts
AVAudioSessionCategoryAmbient Yes No
AVAudioSessionCategorySoloAmbient Yes Yes
AVAudioSessionCategoryMultiRoute No Yes
AVAudioSessionCategoryPlayAndRecord No Yes
AVAudioSessionCategoryPlayback No Yes
AVAudioSessionCategoryRecord No Yes
Cuando el usuario mueve el interruptor Silencio (o el interruptor Timbre / Silencio en el iPhone) a la posición "silenciosa", su audio se silencia.
AVAudioSessionCategoryAmbient
reproducción solamente. Reproduce sonidos que agregan brillo o interés, pero no son esenciales para el uso de la aplicación. Al usar esta categoría, su audio se silencia con el interruptor Timbre / Silencio y cuando la pantalla se bloquea.
AVAudioSessionCategorySoloAmbient
- (Predeterminado) Reproducción solamente. Silencia el audio cuando el usuario cambia el interruptor de timbre / silencio a la posición "silenciosa" y cuando la pantalla se bloquea. Esta categoría difiere de la categoríaAVAudioSessionCategoryAmbient
solo en que interrumpe otro audio.