我用 Docker 审查了这个 mediasoup v3并且有一些稍微不同的地方,因为我得到了一个不同的错误:
ERROR: for voice_server Cannot start service voice_server: Ports are not available: listen tcp 0.0.0.0:49163: bind: address already in use
(端口随负载变化)
在使用 mediasoup 运行容器化版本的服务器时,与没有将其容器化时相比,我也会丢失音频输出。我试图将network_mode
主机设置为避免转发端口无济于事的一种方式。谢谢!docker compose 文件如下:
services:
voice_server:
build: ./voice
environment:
- WEBRTC_LISTEN_IP=127.0.0.1
- RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672
restart: unless-stopped
ports:
- 3000:3000
- "40000-49999:40000-49999"
backend:
build: ./backend
env_file: ./backend/.env
restart: unless-stopped
ports:
- 4001:4001
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: rabbitmq
volumes:
- ./.docker/rabbitmq/data/:/var/lib/rabbitmq/
- ./.docker/rabbitmq/logs/:/var/log/rabbitmq/
environment:
RABBITMQ_ERLANG_COOKIE: ${RABBITMQ_ERLANG_COOKIE}
ports:
- 5672:5672
- 15672:15672
语音服务器的 dockerfile 是:
FROM node:12
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm i
COPY . .
RUN npm run build
ENV NODE_ENV production
CMD [ "node", "dist/index.js" ]
USER node
mediasoup 的配置是
export const config = {
httpIp: "0.0.0.0",
httpPort: 3000,
httpPeerStale: 360000,
mediasoup: {
worker: {
rtcMinPort: 40000,
rtcMaxPort: 49999,
logLevel: "debug",
logTags: [
"info",
"ice",
"dtls",
"rtp",
"srtp",
"rtcp",
] as WorkerLogTag[],
},
router: {
mediaCodecs: [
{
kind: "audio",
mimeType: "audio/opus",
clockRate: 48000,
channels: 2,
},
] as RtpCodecCapability[],
},
webRtcTransport: {
listenIps: [
{
ip: process.env.WEBRTC_LISTEN_IP,
announcedIp: undefined,
},
{
ip: listenIp,
announcedIp: undefined,
},
] as TransportListenIp[],
initialAvailableOutgoingBitrate: 800000,
},
},
} as const;