![如何控制 Wi-fi 语音传输?(gstreamer)](https://linux22.com/image/1388111/%E5%A6%82%E4%BD%95%E6%8E%A7%E5%88%B6%20Wi-fi%20%E8%AF%AD%E9%9F%B3%E4%BC%A0%E8%BE%93%EF%BC%9F%EF%BC%88gstreamer%EF%BC%89.png)
我正在尝试通过 Wi-Fi 构建电话传输我想做的是,将一个可编程的 Wi-Fi 耳机(它实际上并不存在,它实际上是一台 Linux 计算机)与一台也支持 Wi-Fi 的手机连接起来。(这也不存在,它也是一台 Linux 计算机)。这就像一个人有一部与蓝牙配对设备配对的手机,当你接到电话时,你可以使用耳机本身控制呼叫的建立和终止。不同之处在于我想使用 Wi-Fi 而不是蓝牙。所以到目前为止我所做的是在 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 上手动运行管道来建立双向连接,并且众所周知,在蓝牙配对后,用户无需手动执行进一步的步骤来将手机与耳机连接。使用某种类型的信令来初始化两端的发送/接收过程。这意味着当手机响铃时,耳机会收到手机有来电的通知。
现在我的问题是,这个自动化过程的正确方法是什么,当我想要从一台 Linux 计算机建立到另一台计算机的呼叫时,另一端会收到通知,说一个具有指定字符的 Linux(例如 xxx.xxx.xxx.xxx IP 和 xxxx 端口号)正在尝试连接,并且在另一端确认后,上述管道开始双向传输音频,并在一端结束对话时挂断。