Wie kann ich eine Wi-Fi-Sprachübertragung steuern? (gstreamer)

263
fer y

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.

1

0 Antworten auf die Frage