2010-12-01 6 views
4

Ce que le titre dit vraiment. J'ai besoin de diffuser l'audio du microphone sur le téléphone et le lire dans une application de bureau (également le code Java) sur un ordinateur.Diffusion audio depuis Android vers une application de bureau

L'utilisation de UDP ou de TCP n'a pas d'importance pour moi, quoi que ce soit qui fonctionne le mieux. Le téléphone et l'ordinateur seront sur le même NAT de toute façon, donc la transmission fonctionnera correctement.

J'ai une bonne idée de la façon d'envoyer les données de flux de l'appareil en utilisant ce code:

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

String host = "10.0.2.2"; 
int port = 5740; 

Socket socket = null; 
try { 
    socket = new Socket(InetAddress.getByName(host), port); 

    ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); 
    recorder.setOutputFile(pfd.getFileDescriptor()); 
    recorder.prepare(); 
    recorder.start(); 

    Log.d(TAG, "Sending audio for 20 seconds.."); 
    Thread.sleep(20000); 

    } catch (Exception e) {  
    // TODO Auto-generated catch block 
     e.printStackTrace(); 
      } 

Le problème est, comment puis-je jouer ce flux dans mon application Java sur le PC? Ou y at-il une meilleure façon de diffuser le son?

J'ai fait des recherches sur Internet pour obtenir des informations à ce sujet, mais sans de bons résultats, mais sûrement quelqu'un doit avoir accompli cela avant?

Merci d'avance pour toute sorte d'aide!

Répondre

1

Pouvez-vous écrire un client qui se connecte simplement à votre téléphone sur ce port et reçoit des données?

Maintenant, il n'y a pas de décodeurs mp4 java, vous aurez donc besoin d'utiliser un autre format. Jetez un oeil à quelques exemples d'applications en utilisant JavaLayer ou JOgg. Ils fonctionnent tous les deux avec n'importe quel InputStream, aussi longtemps que vous pouvez ouvrir un socket, vous pouvez lire votre flux.

En outre, je ne suis pas sûr d'Android, mais n'avez-vous pas besoin d'ouvrir une ServerSocket et d'attendre les connexions?

+0

On dirait que le téléphone est le client ici, et l'ordinateur de bureau est le serveur, c'est là que ServerSocket serait utilisé. – Nick

+0

@Nick: je suppose que cela n'a pas d'importance dans ce cas. –

+0

Oui, comme le dit Nick, le PC de bureau est le serveur ici. Mais merci pour les conseils sur les applications de décodage. Je vais jeter un coup d'oeil à ceux-ci. –

2

J'ai fait quelque chose de très proche de ce que vous avez essayé de faire. J'utilise gstreamer sur mon serveur en écoutant un port UDP. Il y a aussi un serveur relais écrit en Java qui n'est en fait rien de plus qu'un socket loopback. Il y a un port serveur qui attend une connexion client mobile, lors de la réception des données, il les déverse tous en utilisant DatagramPackets (classe java pour les paquets udp) dans le port udp de gstreamer. La seule prise est de trouver le décodeur approprié pour votre pipeline gstreamer.

Questions connexes