为什么UDP端口仅在Docker中失败?

时间:2019-07-11 19:52:33

标签: docker ffmpeg udp rtp

我有以下泊坞窗,它通过UDP端口1234输出一些示例正弦波:

from ubuntu
RUN apt update
RUN apt install -y ffmpeg
EXPOSE 1234/udp
CMD ffmpeg -re -f lavfi -i aevalsrc="sin(400*2*PI*t)" -ar 8000 -f mulaw -f rtp rtp://localhost:1234

我使用以下容器运行容器:

docker run -p 127.0.0.1:1234:1234/udp xxxx

现在,我尝试打开VLC并按照VLC的说明使用流URL rtp:// @:1234从主机上播放该流。它什么都不玩。安静。但是,如果我在主机上运行相同的ffmpeg cmd,则它可以正常工作,并且可以听到示例。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

发现了问题。我想我误解了RTP。 ffmpeg应该将RTP数据包发送到容器(即我的主机)外部的“服务器”(实际上是对等)。它不是像RTSP服务器那样“提供”示例音频...

所以我不需要公开任何端口。问题是容器端的rtp网址-它应以主机的IP为目标:

ffmpeg -re -f lavfi -i aevalsrc="sin(400*2*PI*t)" -ar 8000 -f mulaw -f rtp rtp://$HOST_MACHINE_IP:1234

及其实际上是对等方的VLC应用程序。完成后,VLC可以接收流-没问题。