%20.png)
Я пытаюсь создать телефонную передачу через Wi-Fi. Я пытаюсь подключить программируемую гарнитуру Wi-Fi (ее на самом деле не существует, на самом деле это компьютер с Linux) к мобильному телефону, который также поддерживает Wi-Fi (его тоже не существует, и это тоже компьютер с Linux). Это похоже на случай, когда у кого-то есть мобильный телефон, сопряженный с устройством сопряжения Bluetooth, и когда вы получаете телефонный звонок, вы можете управлять установлением и прерыванием вызова с помощью самой гарнитуры. Разница в том, что я хочу использовать Wi-Fi вместо Bluetooth. Поэтому то, что я сделал до сих пор, это реализовал поток мультимедиа в Gstreamer, который может отправлять стереоголосовые сигналы по IP (т. е. VoIP в локальной беспроводной сети). Вот конвейер отправителя:
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
А на принимающей стороне я сделал следующее, чтобы прослушивать порт UDP для приема голосовых сигналов, декодировать и воспроизводить их:
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
Если я вручную запущу два потока на каждом конце, я получу стереосигналы и, поменяв местами два конвейера, чтобы они запускались в отдельном терминале на каждом компьютере Linux, я смогу организовать речевую связь в реальном времени между двумя компьютерами Linux.
Проблема в том, что мне приходится вручную запускать конвейеры на каждом Linux-устройстве, чтобы установить двунаправленное соединение, а как мы все знаем при сопряжении по Bluetooth, после сопряжения пользователям не нужно вручную выполнять никаких дополнительных шагов для подключения мобильного телефона к гарнитуре. Используется некий тип сигнализации, который инициализирует процесс отправки/приема на каждом конце. Это означает, что когда звонит мобильный телефон, гарнитура уведомляется о входящем вызове на мобильный телефон.
Теперь мой вопрос заключается в том, как правильно реализовать этот процесс автоматизации, чтобы, когда я хочу установить звонок с одного из компьютеров Linux на другой, другой конец был уведомлен о том, что Linux с указанными символами (например, IP-адрес xxx.xxx.xxx.xxx и номер порта xxxx) пытается подключиться, и после подтверждения другого конца вышеупомянутые конвейеры начинают потоковую передачу звука в двух направлениях и кладут трубку, когда один конец завершает разговор.