Wie kann ich eine Wi-Fi-Sprachübertragung steuern? (gstreamer)
Ich versuche, eine Telefonübertragung über Wi-Fi aufzubauen. Was ich versuche, ist, ein programmierbares Wi-Fi-Headset (es gibt es nicht wirklich, es ist eigentlich ein Linux-Computer) mit einem Mobiltelefon, das auch Wi-Fi ist, anzuschließen aktiviert (dies existiert auch nicht und ist auch ein Linux-Computer). Dies ist wie bei einem Mobiltelefon, das mit einem Bluetooth-Pairing-Gerät gekoppelt ist. Wenn Sie einen Anruf erhalten, können Sie den Anrufaufbau und den Abbruch über das Headset selbst steuern. Der Unterschied ist, dass ich WLAN anstelle von Bluetooth verwenden möchte. Was ich bisher getan habe, ist die Implementierung eines Media-Streams in Gstreamer, der Stereosprachsignale über IP (dh VoIP in einem lokalen drahtlosen Netzwerk) senden kann. Hier ist die Sender-Pipeline:
gst-launch -v alsasrc ! audioconvert ! audio/x-raw-int, channels=2,depth=16,width=16,rate=44100 ! rtpL16pay ! udpsink host=192.168.178.110 port=5000 //sender
Und auf der Empfangsseite habe ich folgendes getan, um einen UDP-Port zu hören, um die Sprachsignale zu empfangen und die Dekodierung durchzuführen und sie wiederzugeben:
gst-launch udpsrc port=5000 ! "application/x-rtp,media=(string)audio, clock-rate=(int)44100, encoding-name=(string)L16, channels=(int)2, payload=(int)96" ! rtpL16depay ! audioconvert ! alsasink //receiver
Wenn ich die beiden Streams an jedem Ende manuell starte, empfange ich meine Stereosignale und durch Austauschen der beiden Pipelines in einem separaten Terminal auf jedem Linux-Computer kann ich eine Echtzeit-Sprache zwischen den beiden Linux-Computern haben.
Das Problem dabei ist, dass ich die Pipelines unter jedem Linux manuell ausführen muss, um eine bidirektionale Verbindung herzustellen, und wie wir alle bei einer Bluetooth-Kopplung wissen, müssen nach dem Pairing keine weiteren Schritte manuell von den Benutzern zur Verbindung des Mobiltelefons ausgeführt werden Mit dem Headset wird eine Art Signalisierung verwendet, die den Sende- / Empfangsprozess an jedem Ende initialisiert. Das heißt, wenn das Mobiltelefon klingelt, wird das Headset benachrichtigt, dass ein eingehender Anruf auf dem Mobiltelefon eingeht.
Nun ist meine Frage, was der richtige Weg für diesen Automatisierungsprozess ist, wenn ich einen Anruf von einem der Linux-Computer zum anderen herstellen möchte, wird das andere Ende darauf hingewiesen, dass ein Linux mit den angegebenen Zeichen (beispielsweise xxx.xxx). xxx.xxx (IP- und xxxx-Portnummer) versucht, eine Verbindung herzustellen, und nach Bestätigung des anderen Endes beginnen die oben genannten Pipelines, das Audio bidirektional zu streamen und nach einem Ende aufhören die Konversation zu beenden.
0 Antworten auf die Frage
Verwandte Probleme
-
6
Wie kann ich Rauschen aus einer Audioaufnahme entfernen?
-
9
Was ist der Unterschied zwischen den Befehlen "su -s" und "sudo -s"?
-
4
Gutes freies Ubuntu Server-VMWare-Image benötigt
-
4
Was sind die Unterschiede zwischen den großen Linux-Distributionen? Werde ich es merken
-
2
Begrenzung der CPU-Auslastung für Flash in Firefox?
-
2
Wie kann ich mein Mikrofon unter Debian GNOME zum Laufen bringen?
-
2
Conky-Setups - Beispiele / Ideen?
-
2
Erinnert sich Windows 7 Home Premium an Netzwerkfreigaben-Passwörter?
-
3
Was sind die Unterschiede zwischen Linux Window Managern?
-
5
XP-Netzwerkverbindung ohne Neustart freigeben?