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.
OriginalL'auteur James Turner | 2010-04-26
Vous devez vous connecter pour publier un commentaire.
Pour déboguer les problèmes de ce genre, je voudrais essayer:
gst-launch audiotestsrc ! alsasink
à checkthat sons œuvresfakesink
oufilesink
pour voir si nous recevons des tamponsGST_DEBUG
, par exemple vérifier les bouchons avecGST_DEBUG=GST_CAPS:4
ou de vérifier l'utilisation de*:2
pour obtenir toutes les erreurs/avertissementsCes pipelines de travail pour moi:
avec RTP:
avec TCP::
OriginalL'auteur tilljoel
Pouvez-vous poster une partie de la tps-lancement des pipelines vous avez essayé? Qui pourrait nous aider à comprendre pourquoi vous rencontrez des problèmes. En général, RTP/RTSP devrait fonctionner assez facilement.
Edit:
Quelques éléments que je peux penser à est de
1. changement de host=localhost host= où est la véritable adresse ip de l'autre machine linux
2. ajouter caps="application/x-rtp, media=(string)audio pour la udpsrc élément dans le récepteur.
OriginalL'auteur Sid Heroor
Ma solution est très similaire à tilljoel mais je suis en utilisant le Microphone (qui est ce que vous avez besoin) comme source d'Où quelques réglages dans le pipeline gstreamer.
Décodage Audio à partir du Microphone à l'aide de TCP:
L'encodage de l'Audio à partir du Microphone à l'aide de TCP:
Décodage Audio à partir du Microphone à l'aide de RTP:
L'encodage de l'Audio à partir du Microphone à l'aide de RTP:
Vous devez utiliser demux évidemment. Jetez un oeil à stackoverflow.com/questions/13904975/...
pouvez-vous m'envoyer le backend.m fichier
qui m fichier? MATLAB? Pourquoi n'utilisez-vous pas demux. comme je l'ai dit plus tôt. Voir Audio+Vidéo de la section de trac.gateworks.com/wiki/Yocto/gstreamer/streaming . Vous devrez simplement utiliser mon au-dessus de pipelines et de les adapter avec demux. de l'élément. Il y a des tonnes d'exemples en ligne.
OriginalL'auteur enthusiasticgeek