gpt4 book ai didi

audio-streaming - 使用 GStreamer 通过本地网络移动音频

转载 作者:行者123 更新时间:2023-12-04 06:56:15 24 4
gpt4 key购买 nike

我需要在两台 Linux 机器之间移动实时音频,它们都运行(我的)自定义软件,该软件构建在 Gstreamer 之上。 (该软件已经通过单独的基于 TCP 的协议(protocol)在机器之间进行其他通信 - 我提到这一点是为了防止可靠的带外数据对解决方案产生影响)。

音频输入将是发送方机器上的麦克风/线路输入,而正常音频输出将是目标方的接收器; alsasrc 和 alsasink 是最有可能的,尽管为了测试我一直在使用 audiotestsrc 而不是真正的麦克风。

GStreamer 提供了多种在网络上移动数据的方法——RTP、RTSP、GDP 有效负载、UDP 和 TCP 服务器、客户端和套接字等等。网络上也有很多流式传输音频和视频的例子——但在实践中,它们似乎都不适合我;目标管道无法协商上限,或者我听到一个数据包然后管道停止,或者目标管道立即退出但没有可用数据。

在所有情况下,我只是在命令行上测试 gst-launch。不需要对音频数据进行压缩——原始音频或普通的 WAV、uLaw 或 aLaw 编码都可以;更重要的是低延迟。

最佳答案

要调试这类问题,我会尝试:

  1. 运行 gst-launch audiotestsrc ! alsasink 检查声音是否正常
  2. 使用fakesinkfilesink 查看我们是否得到任何缓冲区
  3. 尝试使用 GST_DEBUG 查找管道问题,例如使用 GST_DEBUG=GST_CAPS:4 检查上限或检查使用 *:2 以获取所有错误/警告
  4. 使用wireshark查看是否发包

这些管道对我有用:

使用 RTP:

gst-launch-0.10 -v udpsrc port=5000 ! "application/x-rtp,media=(string)audio, clock-rate=(int)44100, width=16, height=16, encoding-name=(string)L16, encoding-params=(string)1, channels=(int)1, channel-positions=(int)1, payload=(int)96" ! rtpL16depay ! audioconvert ! alsasink sync=false

gst-launch-0.10 audiotestsrc ! audioconvert ! audio/x-raw-int,channels=1,depth=16,width=16,rate=44100 ! rtpL16pay ! udpsink host=localhost port=5000

使用 TCP::

gst-launch-0.10 tcpserversrc host=localhost port=3000 ! audio/x-raw-int, endianness="(int)1234", signed="(boolean)true", width="(int)16", depth="(int)16", rate="(int)44100", channels="(int)1" ! alsasink

gst-launch-0.10 audiotestsrc ! tcpclientsink host=localhost port=3000

关于audio-streaming - 使用 GStreamer 通过本地网络移动音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2715257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com