我需要在两台 Linux 机器之间移动实时音频,它们都运行基于 Gstreamer 构建的自定义软件(我的)。(该软件已经通过单独的基于 TCP 的协议在机器之间进行了其他通信 - 我提到这一点是为了防止可靠的带外数据对解决方案产生影响)。
音频输入将是发送机器上的麦克风/线路输入,而正常音频输出将作为目的地上的接收器;alsasrc 和 alsasink 是最有可能的,尽管为了测试我一直在使用 audiotestsrc 而不是真正的麦克风。
GStreamer 提供了多种通过网络传输数据的方法——RTP、RTSP、GDP 负载、UDP 和 TCP 服务器、客户端和套接字等等。网络上也有很多流式传输音频和视频的例子——但实际上,它们似乎都不适合我;要么目标管道无法协商上限,要么我听到一个数据包然后管道停止,或者目标管道立即退出而没有可用数据。
在所有情况下,我都在命令行上进行测试,只是 gst-launch。无需压缩音频数据 - 原始音频或普通 WAV、uLaw 或 aLaw 编码都可以;更重要的是低延迟。