%20.png)
Ich versuche, eine Telefonübertragung über WLAN aufzubauen. Ich versuche, ein programmierbares WLAN-Headset (das gibt es eigentlich nicht, es ist eigentlich ein Linux-Computer) mit einem Mobiltelefon zu verbinden, das auch WLAN-fähig ist (das gibt es auch nicht und es ist ebenfalls ein Linux-Computer). Das ist wie der Fall, wenn man ein Mobiltelefon hat, das mit einem Bluetooth-Kopplungsgerät gekoppelt ist, und wenn man einen Anruf bekommt, kann man den Rufaufbau und -abbruch mit dem Headset selbst steuern. Der Unterschied besteht darin, dass ich WLAN statt Bluetooth verwenden möchte. Bisher habe ich also einen Medienstream in Gstreamer implementiert, der Stereo-Sprachsignale über IP senden kann (also VoIP in einem lokalen drahtlosen Netzwerk). 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 auf einem UDP-Port zu lauschen, die Sprachsignale zu empfangen, sie zu dekodieren und 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 ausführe, empfange ich meine Stereosignale und indem ich die beiden Pipelines so austausche, dass sie auf jedem Linux-Computer in einem separaten Terminal ausgeführt werden, kann ich eine Echtzeit-Sprachübertragung zwischen den beiden Linux-Computern durchführen.
Das Problem dabei ist, dass ich die Pipelines auf jedem Linux manuell ausführen muss, um eine bidirektionale Verbindung herzustellen, und wie wir alle bei einer Bluetooth-Kopplung wissen, müssen die Benutzer nach der Kopplung keine weiteren Schritte manuell ausführen, um das Mobiltelefon mit dem Headset zu verbinden. Es wird eine Art Signalisierung verwendet, die den Sende-/Empfangsvorgang an jedem Ende initialisiert. Das bedeutet, wenn das Mobiltelefon klingelt, wird das Headset benachrichtigt, dass auf dem Mobiltelefon ein Anruf eingeht.
Meine Frage ist nun, was der richtige Weg für diesen Automatisierungsprozess ist, damit, wenn ich einen Anruf von einem der Linux-Computer zum anderen herstellen möchte, das andere Ende benachrichtigt wird, dass ein Linux mit angegebenen Zeichen (z. B. xxx.xxx.xxx.xxx IP und xxxx Portnummer) versucht, eine Verbindung herzustellen, und nach der Bestätigung des anderen Endes die oben genannten Pipelines mit dem bidirektionalen Audio-Streaming beginnen und auflegen, wenn ein Ende das Gespräch beendet.