ios swift avaudiosession

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

https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html

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ía AVAudioSessionCategoryAmbient solo en que interrumpe otro audio.