Android > 4.0: idées comment enregistrer/capturer l'audio interne (par ex. musique en flux)?
il y a quelques mois, avec Android ICS (4.0), j'ai développé un module du noyau android qui a intercepté le module"pcmC0D0p" -pour récupérer tout l'audio du système.
mon objectif est de diffuser tout l'audio (ou au moins la musique jouée) sur un haut-parleur distant via le temps D'antenne.
le module du noyau a fonctionné, mais là où plusieurs problèmes (kernel-versions, root-privilèges etc.) donc j'ai arrêté de travailler sur ce.
maintenant, nous avons Android 4.1 et 4.2 et j'ai de nouveau de l'espoir!
qui a une idée comment capturer l'audio dans Android?
j'avais les idées suivantes:
-
connecter via bluetooth au même téléphone, Définir le routage vers BT et saisir l'audio sur "l'autre extrémité": cela ne devrait pas fonctionner
-
Intercepter l'audio avec un module du noyau comme fait avant: hardcore, obtenir travaillé mais Sans objet
-
JACK Audio Connection Kit : Android utilise tristement "tinyALSA"et non "ALSA". TinyALSA ne supporte aucun filtre comme JACK (mais cela a amené l'idée avec le module du noyau)
-
utiliser PulseAudio comme un remplacement pour AudioFlinger, mais ce n'est pas non plus applicable
modifier (les oubliant):
-
j'ai compilé "tinymix" (version Bébé D'ALSA-mixer) à partir de tinyALSA (L'ALSA sur Android) et essayé d'acheminer l'audio-out à mic-in-mais sans succès ( pas compréhensible pour moi ). Sans objet
"
-
j'ai testé ouvre , mais je ne suis pas un c-crack et il s'est terminé par "je peux enregistrement micro, mais pas plus" (peut-être que j'avais tort?)
je viens de trouver ROUTE_TYPE_LIVE_AUDIO :
un dispositif qui prend en charge le routage audio en direct permettra aux médias audio flux à acheminer vers les destinations prises en charge. Cela peut inclure haut-parleurs internes ou prises audio sur l'appareil lui-même, les appareils A2DP, et de plus en plus.
une fois initié ce routage est transparente pour l'application. Tout audio joué sur le flux des médias sera acheminé à l'sélectionnés destination.
peut-être que ça aide d'une façon ou d'une autre?
je suis à court d'idées mais si vous voulez "casser cette noix", peut-être que quelqu'un peut m'aider?
EDIT:
je suis vraiment nouveau dans C & kernel-coding ( mais j'ai réussi à créer un audio-interception-module compilé) - mais n'est-il pas possible d'écouter les données PCM à partir de L'espace utilisateur (JAVA, C-layer)?) à l'espace du noyau (tinyALSA, Kernel-module), sans piratage & enracinement?
1 réponses
vous devez passer le trafic audio par votre serveur socket local:
-
créer un serveur de socket local
-
modifier l'adresse du flux http audio vers le chemin est à travers votre serveur socket local, par exemple pour l'adresse
http://example.com/stream.mp3 -> http://127.0.0.1:8888/http://example.com/stream.mp3
où 8888 est votre port socket.
-
Jouer
http://127.0.0.1:8888/http://example.com/stream.mp3
par défaut media player
-
Lisez toutes les requêtes entrantes au port 8888 dans votre serveur socket local, analysez-les et passez à example.com serveur.
-
Lire la réponse de example.com et passez-le au client local (media player). Ici vous pouvez capturer le flux audio!