Pulseaudio将RTP输出到互联网

时间:2013-01-22 06:18:00

标签: vlc alsa pulseaudio

我希望pulseaudio(远程实例)通过互联网将发送到主alsa设备的音频直接推送到RTP,以便我可以在家用电脑上的VLC上收听它。

在我的/etc/pulse/default.pa

load-module module-rtp-send source=alsa_output.0.analog-stereo.monitor destination=x.x.x.x port=8080 loop=1

其中x.x.x.x是我服务器的互联网IP

启动pulseaudio后,netstat显示(我无法从远程VLC连接到此)

udp        0      0 10.170.94.16:58606      x.x.x.x:9875      ESTABLISHED 2109/pulseaudio
udp        0      0 10.170.94.16:35597      x.x.x.x:8080      ESTABLISHED 2109/pulseaudio

它与cvlc一起产生预期的结果(我可以从删除VLC连接到此)

cvlc -vvv pulse://alsa_output.0.analog-stereo.monitor --sout '#transcode{acodec=mpga,ab=32,channels:1}:rtp{sdp=rtsp://0.0.0.0:8080/test.sdp}'

产生

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1944/pulseaudio

我可以连接到它。

所以我认为我理解的是pulseaudio工作正常,并且正在将音频发送到端口8080.但是,它并没有侦听将数据路由到的传入连接。如何判断pulseaudio或设置路由,以便端口8080在发生入站连接时传输rtp提供的音频。我也看到cvlc使用rtsp作为源。

还是有点困惑..

1 个答案:

答案 0 :(得分:0)

RTP使用无状态UDP协议作为传输方式:它不需要目的地端来确认任何传入的数据包。它不能告诉您是否实际上已经建立了连接,除了远端是否明确拒绝了连接之外。此功能允许在LAN上进行广播,因为多个客户端可以根据需要侦听数据包,但这会使调试单播连接稍微复杂些。

在进行单播UDP时(就像您正在尝试实现的那样),一旦它在Internet上发布,它应该到达目的地。你有防火墙吗?除非您的计算机直接连接到调制解调器,否则很有可能至少具有网络地址转换,这将阻止数据包到达计算机。在您的网关/路由器配置中查找端口转发。

您可以使用tcpdump测试您是否实际上正在接收数据包。运行它时,您会看到来自其他连接的一些噪音以及像这样的数据包:

08:19:38.483895 IP y.y.y.y.zzzz > x.x.x.x:8080: UDP, length 1292

此外,PulseAudio不使用RTSP,因此VLC仅需要打开RTP流。只需键入rtp://0.0.0.0:8080即可。