%20.png)
私は Wi-Fi 経由で電話伝送を構築しようとしています。私がやろうとしているのは、プログラム可能な Wi-Fi ヘッドセット (実際には存在せず、Linux コンピュータです) を、同じく Wi-Fi 対応の携帯電話 (これも存在せず、Linux コンピュータです) に接続することです。これは、Bluetooth ペアリング デバイスとペアリングされた携帯電話があり、電話がかかってきたときにヘッドセット自体を使用して通話の確立と中止を制御できる場合と似ています。違いは、Bluetooth ではなく Wi-Fi を使用することです。そのため、これまでに行ったことは、IP 経由でステレオ音声信号を送信できるメディア ストリームを Gstreamer に実装することです (つまり、ローカル ワイヤレス ネットワークの 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
両端で 2 つのストリームを手動で実行すると、ステレオ信号を受信し、2 つのパイプラインを各 Linux コンピューターの別のターミナルで実行するように切り替えることで、2 台の Linux コンピューター間でリアルタイムの音声を実現できます。
これの問題は、双方向接続を確立するために各 Linux でパイプラインを手動で実行する必要があることです。Bluetooth ペアリングでは、ペアリング後に携帯電話をヘッドセットに接続するためにユーザーが手動で行う手順はありません。各エンドでの送受信プロセスを初期化する何らかのタイプのシグナリングが使用されます。つまり、携帯電話が鳴ると、携帯電話に着信があることがヘッドセットに通知されます。
さて、私の質問は、Linux コンピューターの 1 台から別のコンピューターに通話を確立する場合、指定された文字 (たとえば、xxx.xxx.xxx.xxx IP と xxxx ポート番号) を持つ Linux が接続しようとしていることをもう一方の端に通知し、もう一方の端の確認応答後に上記のパイプラインが双方向でオーディオのストリーミングを開始し、一方の端が会話を終了すると切断するという、この自動化プロセスの適切な方法は何ですか。