2010-11-14 5 views
5

J'écris actuellement un programme qui est une sorte de client VoIP. J'essaie d'établir une connexion entre 2 clients et envoyer et recevoir des données, qui est enregistrée à partir du microphone.MediaRecorder et UDP (DatagramSocket) dans Android

J'utilise actuellement des fichiers, mais il ressemble à une mise en œuvre terrible:

L'enregistreur commence à enregistrer dans un fichier temporaire. Une minuterie démarre, arrête l'enregistreur, regarde la taille du fichier, puis envoie le contenu en utilisant un DatagramPacket.

Il semble terriblement mauvais. Je me demande si la classe MediaRecorder et MediaPlayer ont un moyen de prendre une socket UPD comme c'est la sortie et l'entrée du fichier respectivement (c'est-à-dire, un DatagramSocket).

Je peux utiliser un descripteur de fichier à partir d'une socket, mais les sockets utilisent TCP. Je voulais utiliser UDP, donc je suppose que DatagramSocket, mais je n'arrive pas à trouver un moyen de l'utiliser dans ma classe MediaRecorder et MediaPlayer.

Quelqu'un peut-il avoir une bonne solution pour cela?

Merci beaucoup

Répondre

0

Tous,

Une façon vous pouvez faire est de mettre en œuvre un second fil qui met en place un LocalServerSocket dans l'espace abstrait (UNIX nommée socket). Dans le premier thread, vous créez ensuite un LocalSocket qui se connecte à LocalServerSocket. Après cette étape, vous pouvez obtenir le FileDescriptor du LocalSocket dans le premier thread et le définir comme OutputFile pour MediaRecorder. Dans le deuxième thread, vous venez de lire à partir du LocalSocket décollé, puis d'écrire dans votre DatagramSocket. Ez Pz.

Bonne chance, B-Rad

+0

Ceci est complètement faux! Vous devez encoder les données dans un flux, ce qui n'est pas pris en charge par Natif par android. --- Vous avez raison de dire que vous pouvez simplement faire sauter les images sur UDP, mais ce n'est pas un flux, ce sont des images brutes (vidéo/audio)! – debracey

3

Vous êtes probablement intéressé par un ParcelFileDescriptor, puis plus précisément la fonction fromDatagramSocket(...), vous pouvez alors utiliser la fonction getFileDescriptor pour régler la DataSource du joueur

* Mise à jour : cela ne fonctionne que si vous avez Android 4.0 ou supérieur: voir la limite de l'API

Questions connexes