Hi team,
We’ve been integrating Mediasoup into our online proctoring system with a React frontend and Node.js backend. Everything works perfectly in local development, including webcam and screen sharing (candidate → proctor). However, when deployed to our UAT server, neither webcam nor screen video shows up on the proctor side — despite the Mediasoup logs showing no errors.
Environment Overview:
- Local Setup (Works):
NODE_ENV=development- WebRTC works with webcam and screen sharing.
- STUN-only configuration is enough.
- UAT Server (Fails):
- Hosted behind NGINX (SSL Termination)
NODE_ENV=uatandUAT_ENVIRONMENT=true- WebSocket (
wss://...) connection is successful.
STUN + TURN servers configured (fallback included).- Candidate’s webcam stream shows
{ active: true, tracks: [...] }but video doesn’t render on proctor’s side.
What We’ve Verified So Far:
- Socket.io
new-producerevent emits successfully when candidate shares webcam. - Mediasoup
produceris created and logged with valid RTP parameters. - Consumer is created successfully (Mediasoup logs confirm this too).
- ICE and DTLS events show state transitions (connected/connected).
webcamStream.getTracks()logs correctly on candidate side.- No errors in
mediaSoupSocket.jsor server logs. - Mediasoup logs show no warnings/errors — all transports/producers/consumers created as expected.
Key Mediasoup Server Config (UAT)
// mediasoup/server.js
transportOptions = {
listenIps: [{ ip: process.env.UAT_LISTEN_IP || '0.0.0.0', announcedIp: process.env.UAT_ANNOUNCED_IP }],
enableUdp: true,
enableTcp: true,
preferUdp: true,
iceServers: [
{
urls: [
'stun:stun.l.google.com:19302',
'stun:stun1.l.google.com:19302',
...
]
},
{
urls: ['turn:localhost:3478'],
username: 'mediasoup',
credential: 'password123'
}
]
};
NGINX Config (UAT):
location /socket.io/ {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
WebSocket successfully connects (confirmed in browser).
What We Suspect:
- Could be firewall blocking UDP on server?
- Possible TURN server misconfiguration (although fallback exists)?
- Could we be missing
consumer.resume()at the right point? - Any known Mediasoup bug where tracks are
livebut not rendering?
What We Need Help With:
- What else should we validate if consumer is created, but video is black?
- How can we debug whether the media is reaching the proctor side correctly?
- Any must-have server-level ports or firewall rules needed for Mediasoup to relay media properly?
Here the attached screen of mediasoup’s log from server

