¿Cómo controlar una transmisión de voz por Wi-Fi? (gstreamer)

¿Cómo controlar una transmisión de voz por Wi-Fi? (gstreamer)

Estoy tratando de construir una transmisión telefónica a través de Wi-Fi. Lo que estoy tratando de hacer es conectar un auricular Wi-Fi programable (en realidad no existe, en realidad es una computadora con Linux) con un teléfono celular que también es Wi-Fi. habilitado. (Esto tampoco existe y también es una computadora con Linux). Esto es como el caso en el que uno tiene un teléfono móvil que está emparejado con un dispositivo de emparejamiento Bluetooth y cuando recibe una llamada puede controlar el establecimiento de la llamada y su interrupción utilizando el propio auricular. La diferencia es que quiero usar Wi-Fi en lugar de Bluetooth. Entonces, lo que he hecho hasta ahora es implementar una transmisión de medios en Gstreamer que puede enviar señales de voz estéreo a través de IP (es decir, VoIP en una red inalámbrica local). Aquí está el canal del remitente:

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

Y en el extremo receptor, hice lo siguiente: escuchar en un puerto UDP para recibir las señales de voz, decodificarlas y reproducirlas:

    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

Si ejecuto las dos transmisiones manualmente en cada extremo, recibo mis señales estéreo y, al intercambiar las dos canalizaciones para que se ejecuten en una terminal separada en cada computadora con Linux, puedo tener una conversación en tiempo real entre las dos computadoras con Linux.

El problema con esto es que tengo que ejecutar las canalizaciones manualmente en cada Linux para establecer una conexión bidireccional y, como todos sabemos, en un emparejamiento Bluetooth, después del emparejamiento, los usuarios no deben realizar más pasos manualmente para conectar el teléfono celular. con el auricular. Se utiliza algún tipo de señalización que inicializa el proceso de envío/recepción en cada extremo. Eso significa que cuando suena el teléfono celular, se notifica al auricular que está llegando una llamada entrante al teléfono celular.

Ahora mi pregunta es cuál es la forma correcta de realizar este proceso de automatización: cuando quiero establecer una llamada desde una de las computadoras Linux a la otra, se notifica al otro extremo que hay un Linux con caracteres específicos (por ejemplo, xxx.xxx. xxx.xxx IP y número de puerto xxxx) está intentando conectarse, y después del reconocimiento del otro extremo, las canalizaciones mencionadas anteriormente comienzan a transmitir el audio, bidireccionalmente y cuelgan cuando uno finaliza, finaliza la conversación.

información relacionada