2011-05-10 4 views
5

Je suis en train de créer une application qui recueille la parole via un microphone en tant que fichiers wav. Ces enregistrements doivent être streamés sur un serveur et sauvegardés (comme les fichiers wav, je sais qu'ils sont gros mais ils doivent être wav). J'ai aussi besoin de diffuser de l'audio (il peut s'agir de mp3) du serveur à l'application web pour être joué par l'utilisateur. Je n'ai aucune idée de comment implémenter cela, mais j'aimerais utiliser une application Java EE parce que je suis familier avec Java et c'est plus facile à maintenir que Flex (nous avons des problèmes avec l'ancien code Flex au travail). Mes préoccupations sont les suivantes:Diffusion audio avec Java

  1. Comment tamponner la transmission pour que les utilisateurs puissent entendre le fichier entier sans interruption? Transférer le fichier entier et le lire est très bien aussi, mais savoir comment le faire serait bien.
  2. Comment vérifier les transmissions sur le serveur? Puis-je envoyer des paquets et vérifier/renvoyer par paquet?
  3. Existe-t-il des API pour cela (s'il vous plaît!) Ou dois-je écrire cela à la main?
+0

On ne sait pas, de votre question, combien sont impliqués des composants dans votre application générale. Vous avez écrit "J'ai aussi besoin de diffuser de l'audio depuis le serveur vers l'application web pour être joué par l'utilisateur". Cela implique qu'il existe une application web * et * un serveur, et les deux sont disparates. Si cela est correct, il serait utile que vous fournissiez des informations sur ce qui existe actuellement. – Isaac

Répondre

1

Comme j'ai commenté votre question, il n'est pas clair si vous avez déjà décidé quels composants existent dans la topologie. En particulier, il n'est pas clair si vous avez déjà un processus serveur chargé de stocker ces fichiers audio. Par conséquent, je vais devoir faire quelques hypothèses dans ma réponse. N'hésitez pas à commenter, et je ferai de mon mieux pour m'adapter.

  1. La seule façon de assurer qu'un fichier audio est joué (par l'utilisateur final) sans interruption induite par réseau est d'avoir l'utilisateur final (ou une application en cours d'exécution à côté de l'utilisateur final, comme un code JavaScript) lire le flux audio après qu'il a été téléchargé dans son intégralité. À moins que vous ne le fassiez, vous pouvez seulement réduire le risque de pauses; vous ne pouvez pas l'éliminer. Même l'algorithme de mise en mémoire tampon le plus sophistiqué ne peut pas gérer une panne de réseau de 99,99% dans la mise en mémoire tampon du flux entier. Comme je ne suis pas sûr si vous avez une application côté client impliqué dans cela, je ne peux pas conseiller force le côté client pour télécharger le fichier entier plutôt que de le jouer "comme il vient"; dans le cas le plus simple, vous pouvez vous contenter d'utiliser l'Content-Disposition en-tête: http://en.wikipedia.org/wiki/MIME#Content-Disposition

  2. La réponse à cette question, encore une fois, dépend de la façon dont vous avez conçu la solution. En général, cependant, tant que vous utilisez des API de flux standard (telles que Java IO), je ne m'inquiéterais pas trop de vérifier le contenu des erreurs. La correction d'erreur est déjà fournie plus bas dans la pile de mise en réseau (par exemple, le pilote réseau de votre système d'exploitation).

  3. Apache Commons de chargement d'un fichier peut être utile - encore une fois, en fonction de votre architecture: http://commons.apache.org/fileupload/