Estoy tratando de capturar una imagen durante una vista previa en vivo desde la cámara, por AVFoundation captureStillImageAsynchronouslyFromConnection . Hasta ahora el programa funciona como se esperaba. Sin embargo, ¿cómo puedo silenciar el sonido del obturador?
ios
iphone
cocoa-touch
camera
avfoundation
Oh ho
fuente
fuente
Respuestas:
Usé este código una vez para capturar el sonido del obturador predeterminado de iOS (aquí hay una lista de nombres de archivos de sonido https://github.com/TUNER88/iOSSystemSoundsLibrary ):
Luego utilicé una aplicación de terceros para extraer
photoShutter.caf
del directorio de documentos (DiskAid para Mac). El siguiente paso que abríphotoShutter.caf
en el editor de audio Audacity y apliqué el efecto de inversión, se ve así en el zoom alto:Luego guardé este sonido
photoShutter2.caf
e intenté reproducir este sonido justo antescaptureStillImageAsynchronouslyFromConnection
:¡Y esto realmente funciona! Ejecuto la prueba varias veces, cada vez que no escucho el sonido del obturador :)
Puede obtener un sonido ya invertido, capturado en iPhone 5S iOS 7.1.1 desde este enlace: https://www.dropbox.com/s/1echsi6ivbb85bv/photoShutter2.caf
fuente
Mi solución en Swift
Cuando llama al
AVCapturePhotoOutput.capturePhoto
método para capturar una imagen como el siguiente código.Se invocarán los métodos AVCapturePhotoCaptureDelegate. Y el sistema intenta reproducir el sonido del obturador después de
willCapturePhotoFor
invocado. Para que pueda deshacerse del sonido del sistema enwillCapturePhotoFor
method.Ver también
fuente
AudioServicesDisposeSystemSoundID(1108)
se llama. ¿Tiene alguna solución para esto? :)Método 1: No estoy seguro de si esto funcionará, pero intente reproducir un archivo de audio en blanco justo antes de enviar el evento de captura.
Para reproducir un clip, agregue el
Audio Toolbox
marco#include <AudioToolbox/AudioToolbox.h>
y reproduzca el archivo de audio de esta manera inmediatamente antes de tomar la foto:Aquí hay un archivo de audio en blanco si lo necesita. https://d1sz9tkli0lfjq.cloudfront.net/items/0Y3Z0A1j1H2r1c0z3n3t/blank.wav
________________________________________________________________________________________________________________________________________
Método 2: también hay una alternativa si esto no funciona. Siempre que no necesite tener una buena resolución, puede tomar un fotograma de la transmisión de video , evitando así el sonido de la imagen por completo.
________________________________________________________________________________________________________________________________________
Método 3: Otra forma de hacer esto sería tomar una "captura de pantalla" de su aplicación. Hacerlo de esta forma:
Si desea que esto llene toda la pantalla con una vista previa de la transmisión de video para que su captura de pantalla se vea bien:
fuente
Pude hacer que esto funcionara usando este código en la función snapStillImage y funciona perfectamente para mí en iOS 8.3 iPhone 5. También he confirmado que Apple no rechazará tu aplicación si usas esto (no rechazaron mía)
¡Solo recuerde ser amable y activarlo cuando vuelva su aplicación!
fuente
Vivo en Japón, así que no puedo silenciar el audio cuando tomamos fotos por motivos de seguridad. En video, sin embargo, el audio se apaga. No entiendo por qué.
La única forma en que tomo una foto sin el sonido del obturador es usando AVCaptureVideoDataOutput o AVCaptureMovieFileOutput. Para analizar imágenes fijas, AVCaptureVideoDataOutput es la única forma. En el código de muestra de AVFoundatation,
En mi 3GS es muy pesado cuando configuro CMTimeMake (1, 1); // Un fotograma por segundo.
En el código de muestra de WWDC 2010, FindMyiCone, encontré el siguiente código,
Cuando se utiliza esta API, no se concede el tiempo, pero la API se llama secuencialmente. Yo esta es la mejor solución.
fuente
También puede tomar un fotograma de una transmisión de video para capturar una imagen (no con resolución completa).
Se utiliza aquí para capturar imágenes a intervalos cortos:
fuente
Vea esta publicación para un tipo diferente de respuesta: Capture la imagen del búfer de imagen. La captura de pantalla durante la vista previa del video falla
fuente
La única solución alternativa que se me ocurre es silenciar el sonido del iPhone cuando presionan el botón "tomar foto" y luego desactivarlo un segundo más tarde.
fuente
Un truco común en tales casos es averiguar si el marco invoca un método determinado para este evento y luego sobrescribir ese método temporalmente, anulando así su efecto.
Lo siento, pero no soy lo suficientemente bueno como para decirte de inmediato si eso funciona en este caso. Puede probar el comando "nm" en los ejecutables del framework para ver si hay una función nombrada que tenga un nombre adecuado, o usar gdb con el Simulador para rastrear a dónde va.
Una vez que sepa qué sobrescribir, existen esas funciones de despacho de ObjC de bajo nivel que puede usar para redirigir la búsqueda de funciones, creo. Creo que lo hice hace un tiempo, pero no recuerdo los detalles.
Con suerte, puede usar mis sugerencias para buscar en Google algunas soluciones para esto. Buena suerte.
fuente