android - samsung - ¿Cómo algunas aplicaciones superan las restricciones de grabación del teléfono?
grabar pantalla android con audio interno (0)
Fondo
La grabación del teléfono no es realmente compatible con Android, aunque algunos dispositivos lo admiten en cierta medida.
Esto hizo que varias aplicaciones de grabación de llamadas recopilen la mayor cantidad de información posible sobre los dispositivos y lo que se les debería hacer, y decidan qué hacer.
Algunos incluso ofrecen soluciones de raíz.
Un ejemplo de ello es la aplicación boldbeast Call Recorder , que ofrece muchas configuraciones diferentes para cambiar:
"modo de grabación". Muestra 14 modos para dispositivos no rooteados, y hasta 34 para rooteados. También muestra "Modo Alsa" como una opción para él, para dispositivos rooteados.
Tiene "Tune Audio Effect (" sintonizar automáticamente un grupo de parámetros ").
Tiene "Tune Audio Route", con los valores posibles de "Disabled", "Group1", "Group2", "Group3"
Para dispositivos rooteados:
"cambiar los controles de audio" ("cambiar automáticamente los controles de audio")
"cambiar el controlador de audio" (cambiar la configuración de la unidad de audio para habilitar el modo de grabación 21,22,23,24,31,32,33,34 ")
Para dispositivos rooteados: "iniciar flujo de entrada"
El problema
Si tengo la necesidad de crear una aplicación de grabación de llamadas, no hay otra manera que encontrar varias soluciones para varios dispositivos, pero como parece, otras aplicaciones usan términos que no aparecen en la API.
No puedo encontrar ninguna de las aplicaciones que he mencionado, por ejemplo.
Lo que he encontrado
Aparte de las toneladas de preguntas sobre cómo grabar llamadas en Android, que muestran que no funciona en todos los dispositivos, podría encontrar algunas cosas interesantes. Aquí están mis intentos y perspectivas hasta ahora:
Hay algunas fuentes de grabación de audio que podemos usar mientras preparamos la grabación (docs here ), pero lamentablemente en cada dispositivo puede ser diferente. Para algunos, VOICE_CALL funciona, y para algunos, otros. Pero al menos podemos intentarlo ...
En OnePlus 2 con Android 6.0.1, las llamadas entrantes se pueden grabar usando VOICE_CALL , pero no puedo grabar las llamadas salientes allí, a menos que use MIC como fuente de audio junto con el altavoz activado. De alguna manera, la aplicación que he mencionado tiene éxito grabándola sin ningún problema. Estoy seguro de que veré otros problemas con otros dispositivos Android, ya que he tratado de abordar todo este tema en el pasado. Actualización: he encontrado este proyecto de muestra (también here ), que por alguna razón se suspende durante 2 segundos en el subproceso de la interfaz de usuario entre
prepare
estart
llamadas del mediaRecorder. Funciona bien, y cuando hice algo similar (espere usando Handler.postDelayed por 1 segundo), también funcionó bien. El comentario que se escribió allí es "A veces, la preparación lleva algún tiempo para completarse".En el Galaxy S7 con Android 8, no pude obtener el sonido del otro lado para las llamadas salientes Y las llamadas entrantes (incluso con MIC y el altavoz), no importa lo que hice, sin embargo, la aplicación que mencioné funcionó bien.
Para permitirte probar mi POC de grabación de llamadas, he publicado un repositorio de github de código abierto here , con una muestra que grabará una sola llamada y te permitirá escuchar la más reciente, si todo funciona bien.
Este SDK "ViktorDegtyarev - CallRecLib" , que no parece funcionar en absoluto, se bloquea en varias versiones de Android
Estos 2 proyectos de muestra antiguos: rvoix , esnyder-callrecorder , ambos fallan en la grabación. El segundo ni siquiera parece funcionar en un dispositivo Android 6.0.1, que se supone que debe admitir.
aykuttasil - muestra de CallRecorder y axet - muestra de android-call-recorder - ambos, al igual que en mi POC, no tienen ningún ajuste excepto para AudioSource, y debido a esto no pueden grabar en algunos casos, como la salida del OnePlus 2 Audio de llamadas salientes.
La mayoría de las aplicaciones de terceros solo ofrecen el ajuste de AudioSource, pero algunas (como "boldbeast") sí ofrecen más. Un ejemplo es " Automatic Call Recorder " que tiene "configuración" (10 valores para elegir, primero es "predeterminado") y "método" (5 valores para elegir, primero es "predeterminado"). Es probable que esas aplicaciones no quieran que otros entiendan lo que significan esas configuraciones, por lo que ponen nombres generales. O bien, es demasiado complicado para todos (especialmente para los usuarios), por lo que generalizan los nombres.
Aquí hay una API de "setMode", pero no parece cambiar al llamarlo. Estaba pensando en cambiar el "canal" de donde se usa la llamada, de esta manera, pero no funciona. Permanece en el valor de "2" durante la llamada, que es MODE_IN_CALL .
Hay parámetros personalizados que están disponibles para varios dispositivos (cada OEM y sus propios parámetros), que se pueden configurar here y tal vez incluso a través de JNI ( here y here ), pero no obtengo de dónde obtener esta información (lo que significa pares de clave-valor están disponibles). He buscado en muchos lugares, pero no pude encontrar ningún sitio web que habla sobre los posibles parámetros disponibles y para qué dispositivos.
Estaba pensando en utilizar AudioRecord lugar de la clase MediaRecorder para grabar, pensando que es un nivel un poco bajo, por lo que podría darme más poder y acceso a capacidades personalizadas, pero parece ser muy similar a MediaRecorder, e incluso usar el mismo audio fuentes (ejemplo here ).
Otro intento que tuve con la API de bajo nivel, fue aún más, de usar JNI (OpenSL ES para Android). Para esto, no pude encontrar mucha información (excepto here y here ), y solo encontré las 2 muestras de Google here (llamadas "eco de audio" y "audio nativo"), que no son sobre la grabación de sonido, o al menos yo No los veo ocurrir.
Android P podría tener una forma oficial de grabar llamadas (lea here y here ). Probando en mi dispositivo Android P DP3 (Pixel 2), podría grabar bien ambas partes tanto en las llamadas entrantes como en las salientes, usando "DEFAULT" como fuente de audio, por lo que quizás la API finalmente sea oficial y funcione en todas las versiones de Android. Escribí sobre esto here y here .
Estaba pensando que tal vez la clase de Visualizer podría ser una solución alternativa de grabación, pero de acuerdo con alguna publicación de StackOverflow ( here ), la calidad es extremadamente baja, por lo que decidí que tal vez no debería probarlo. Además no pude encontrar una muestra de cómo grabar.
He encontrado algunos parámetros que podrían estar disponibles en algunos dispositivos, here (que se encuentra here ), todos comienzan con "AUDIO_PARAMETER_", pero las pruebas en Galaxy S7, todas devolvieron una cadena vacía. También encontré este sitio web , que me dio la idea de usar
audioManager.setParameters("noise_suppression=off")
junto con la fuente de audio MIC, pero esto no parece hacer nada en el caso del Galaxy S7.
Las preguntas
A diferencia de otras preguntas similares sobre este tema, no estoy preguntando cómo grabar llamadas. Ya sé que es un problema muy problemático y complejo. Ya sé que tendré que abordar varias configuraciones, y que probablemente usaré un servidor para almacenarlas y encontrar allí la mejor combinación para cada una.
Lo que quiero preguntar es más sobre los ajustes y las soluciones:
¿Hay una lista de configuraciones para los distintos dispositivos, las versiones de Android y qué elegir para cada uno?
Además de la fuente de audio, ¿qué otra configuración se puede utilizar?
¿Qué parámetros son posibles para los distintos dispositivos y versiones de Android? ¿Hay algún sitio web de los OEM que los describa?
¿Cuáles son los diversos términos en la aplicación que he mencionado? ¿Dónde puedo encontrar información de cómo cambiarlos?
¿Qué herramientas están disponibles para dispositivos rooteados?
¿Es posible saber qué dispositivo admite la grabación de llamadas y cuál no, utilizando la API?
Acerca de la solución de OnePlus 2, esperar un momento hasta que comencemos a grabar, ¿por qué es necesario? ¿Es necesario en todas las versiones de Android? ¿Es un problema conocido? ¿Sería suficiente 1 segundo?
¿Cómo es posible que en el Galaxy S7 no haya podido grabar el otro lado incluso cuando uso el MIC y el altavoz?