fix(livekit): 统一信令/媒体端口为 17880/17881/17882,修复接听后双方网络错误

根因:LiveKit 的 config/livekit.yaml 媒体端口(7881/7882)与宿主实际映射(17881/17882)不一致,
信令走 17880 能通,但媒体被宣告到 7881/7882 连不上。

- config/livekit.yaml: port/tcp_port/udp_port -> 17880/17881/17882
- docker-compose.yaml: 容器侧端口与宿主侧一致(1788x),不再重映射
- .env.example: 默认端口改为 1788x 并注明三处需一致
- scripts/selftest.sh: LK_PORT 默认值改为 17880
- scripts/fix-livekit-ports.sh: 一键备份+对齐 .env+仅重建 livekit 的修复脚本
- README: 更新端口表、客户端接入参数与排障说明

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
编码工程师
2026-08-18 00:31:08 +08:00
co-authored by multica-agent
parent 8391e6a7b4
commit 5cc2685f03
6 changed files with 85 additions and 18 deletions
+6 -4
View File
@@ -370,7 +370,9 @@ services:
# LiveKit:语音/视频通话的 SFUApache 2.0,自部署。
# 客户端通过 ws://<SERVER_IP>:<LIVEKIT_PORT> 连接,凭 LIVEKIT_API_KEY/SECRET 签发的 token 进房。
# 三个宿主端口都可在 .env 调整(7880/7881/7882 被其他服务占用时改映射即可,容器内端口不变)。
# 三个端口必须与 config/livekit.yaml 里容器监听的端口完全一致(默认 17880/17881/17882),
# 即“宿主侧 = 容器侧”,不要在宿主侧做重映射;LiveKit 向客户端宣告媒体地址时只认
# config/livekit.yaml 里的端口,重映射会导致信令通、媒体不通。
livekit:
image: ${LIVEKIT_IMAGE}
container_name: livekit
@@ -379,9 +381,9 @@ services:
environment:
LIVEKIT_KEYS: "${LIVEKIT_API_KEY}: ${LIVEKIT_API_SECRET}"
ports:
- "${LIVEKIT_PORT:-7880}:7880" # HTTP / WebSocket 信令
- "${LIVEKIT_RTC_TCP_PORT:-7881}:7881" # RTC over TCPUDP 不通时的备用通道)
- "${LIVEKIT_RTC_UDP_PORT:-7882}:7882/udp" # RTC 媒体(UDP 复用端口)
- "${LIVEKIT_PORT:-17880}:17880" # HTTP / WebSocket 信令
- "${LIVEKIT_RTC_TCP_PORT:-17881}:17881" # RTC over TCPUDP 不通时的备用通道)
- "${LIVEKIT_RTC_UDP_PORT:-17882}:17882/udp" # RTC 媒体(UDP 复用端口)
volumes:
- ./config/livekit.yaml:/etc/livekit.yaml
networks: