Почему порт UDP не работает только в Docker? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть следующий докер, который выводит пример синусоиды wav через 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 и воспроизвести этот поток с моего хост-компьютера, используя потоковый URL-адрес rtp: // @: 1234 в соответствии с инструкциями VLC. Это ничего не играет. Silence. Однако, если я запускаю тот же cmd ffmpeg с хост-машины, он работает, и я могу услышать пример.

Есть идеи, что происходит?

1 Ответ

3 голосов
/ 11 июля 2019

Нашел проблему.Я думаю, что я неправильно понял RTP.Ожидается, что ffmpeg будет отправлять пакеты RTP на «сервер» (фактически, равноправный) вне контейнера (т.е. моего хост-компьютера).Он не «обслуживал» семпл аудио, как RTSP-сервер ...

Так что мне не нужно открывать какие-либо порты.Проблема заключалась в URL-адресе 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 может получить поток - без проблем.

...