transférer de l'audio sur un réseau local en utilisant GStreamer

J'ai besoin de bouger en temps réel de l'audio entre deux machines Linux, qui sont à la fois l'exécution de logiciels personnalisés (de mine) qui s'appuie sur Gstreamer. (Le logiciel a déjà d'autres de la communication entre les machines, plus d'un distinct protocole basé sur TCP - j'en parle dans ce cas d'avoir fiables out-of-band de données permet de faire une différence pour la solution).

L'entrée audio sera un microphone /entrée de ligne sur l'envoi de la machine, et de normal de la sortie audio de l'évier sur le lieu de destination; alsasrc et alsasink sont le plus probable, bien que pour le test j'ai été en utilisant le audiotestsrc au lieu d'un vrai micro.

GStreamer offre une multitude de façons de déplacer des données ronde sur les réseaux - RTP, RTSP, le PIB payloading, UDP et TCP serveurs, les clients et les prises, et ainsi de suite. Il y a aussi de nombreux exemples sur le web de streaming audio et vidéo, mais aucun d'entre eux semblent fonctionner pour moi, dans la pratique; soit la destination, le pipeline ne parvient pas à négocier des chapeaux, ou j'entends un seul paquet, puis le pipeline stands, ou la destination pipeline écope immédiatement avec pas de données disponibles.

Dans tous les cas, je suis en essais sur la ligne de commande, juste le tps de lancement. Pas de compression des données audio est requis - audio raw, ou trivial WAV, format uLaw ou aloi encodage est très bien; ce qui est plus important est de basse-ish de latence.

Voici un exemple d'un pipeline qui ne produit pas d'erreurs, mais aussi ne produit aucune sortie; la destination de pipeline entre l'état de LECTURE, mais aucun son n'est entendu. Source pipeline: gst-launch-0.10 audiotestsrc ! audioconvert ! rtpL16pay ! udpsink port=5005 host=localhost Destination pipeline: gst-launch-0.10 udpsrc port=5005 ! rtpL16depay ! alsasink

OriginalL'auteur James Turner | 2010-04-26