externo - grabar pantalla y audio interno android sin root
Android> 4.0: ¿Ideas para grabar/capturar audio interno(por ejemplo, STREAM_MUSIC)? (1)
Hace algunos meses, con Android ICS (4.0), desarrollé un módulo de kernel de Android que interceptaba el "pcmC0D0p" -module para buscar todo el audio del sistema.
Mi objetivo es transmitir TODO el audio (o al menos la música reproducida) a un altavoz remoto a través de AirPlay.
El módulo kernel funcionó, pero hubo varios problemas (kernel-versions, root-privileges, etc.) así que dejé de trabajar en esto.
Ahora, tenemos Android 4.1 y 4.2 y ¡tengo una nueva esperanza!
¿Quién tiene una idea de cómo capturar el audio en Android?
Tenía las siguientes ideas:
Conéctese a través del Bluetooth al mismo teléfono, establezca el enrutamiento a BT y tome el audio en el "otro extremo": esto no debería funcionar
Intercepta el audio con un módulo kernel como lo hiciste antes: hardcore, haz que funcione pero no aplicable
Kit de conexión de audio JACK : lamentablemente Android usa "tinyALSA" y no "ALSA". TinyALSA NO admite ningún filtro como JACK (pero esto trajo la idea con el módulo kernel)
Use PulseAudio como reemplazo de AudioFlinger, pero esto tampoco es aplicable
EDITAR (los olvidó):
Recopilé "tinymix" (versión para bebés de ALSA-mixer) de tinyALSA (el ALSA en Android) y traté de encaminar el audio-out a la entrada de micrófono, pero sin éxito ( no comprensible para mí ). Y esto también necesita rooting: no aplicable
Probé OpenSL ES , pero no soy C-crack y terminó en "Puedo grabar micrófono, pero no más" (¿quizás estuve equivocado?)
Acabo de encontrar ROUTE_TYPE_LIVE_AUDIO :
Un dispositivo que admita el enrutamiento de audio en vivo permitirá que la transmisión de audio de los medios se dirija a los destinos admitidos. Esto puede incluir parlantes internos o tomas de audio en el dispositivo mismo, dispositivos A2DP y más.
Una vez iniciado, este enrutamiento es transparente para la aplicación. Todo el audio reproducido en la transmisión multimedia se enrutará al destino seleccionado.
Tal vez esto ayuda de alguna manera?
Me estoy quedando sin ideas, pero quiero "romper esta tuerca", ¿tal vez alguien me puede ayudar?
EDITAR:
Soy realmente nuevo en C & kernel-coding (pero creé con éxito un módulo de intercepción de audio de compilación cruzada), pero de ninguna manera es posible escuchar en el momento en que los datos PCM pasan del espacio de usuario (JAVA) , C-layer?) Al kernel-space (tinyALSA, kernel-module), sin hackear y rootear?
Debe pasar el tráfico de audio a través de su servidor de socket local:
Crear servidor de socket local
Modifique la dirección de flujo de http de audio a la ruta a través de su servidor de socket local, por ejemplo, para la dirección
http://example.com/stream.mp3 -> http://127.0.0.1:8888/http://example.com/stream.mp3
donde 8888 es su puerto de socket.
Jugar
http://127.0.0.1:8888/http://example.com/stream.mp3
con reproductor multimedia predeterminado
Lea todas las solicitudes entrantes al puerto 8888 en su servidor de socket local, analícelas y pase al servidor de example.com.
Lea la respuesta de example.com y páselo al cliente local (reproductor multimedia). AQUÍ puedes capturar la transmisión de audio