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:

  1. 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

  2. Intercepter l'audio avec un module du noyau comme fait avant: hardcore, obtenir travaillé mais Sans objet

  3. 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)

  4. utiliser PulseAudio comme un remplacement pour AudioFlinger, mais ce n'est pas non plus applicable


modifier (les oubliant):

  1. 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

  2. "
  3. 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?

37
demandé sur Community 2012-12-27 17:09:23

1 réponses

vous devez passer le trafic audio par votre serveur socket local:

  1. créer un serveur de socket local

  2. 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.

  3. Jouer

    http://127.0.0.1:8888/http://example.com/stream.mp3 
    

    par défaut media player

  4. Lisez toutes les requêtes entrantes au port 8888 dans votre serveur socket local, analysez-les et passez à example.com serveur.

  5. Lire la réponse de example.com et passez-le au client local (media player). Ici vous pouvez capturer le flux audio!

2
répondu Nik 2013-07-04 15:21:19