Issue with mediasoup: Peer cannot see/hear others until they refresh the page

Hello everyone,

I’m using mediasoup in an Express project to build a video conferencing application. However, I’m facing an intermittent issue where a peer joins the room but cannot see/hear others (video/audio streams from other peers are not displayed). The issue is resolved when the peer refreshes the page. Here are the details of my problem:

Problem Description

  • When a peer joins the room, they do not receive video/audio streams from other peers.
  • The names of other peers are visible, but the streams are missing (displayed as “black squares”).
  • The issue is resolved when the peer refreshes the page.

Mediasoup Logs

I enabled mediasoup logs, and here are the errors I’m seeing:

2025-02-03T08:54:13.764Z mediasoup:WARN:Channel [pid:1436684] RTC::Producer::ReceiveRtpPacket() | no stream found for received packet [ssrc:603892996]
2025-02-03T08:58:58.305Z mediasoup:WARN:Channel [pid:1436684] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:731891105, payloadType:97]
2025-02-03T08:58:58.737Z mediasoup:WARN:Channel [pid:1436684] RTC::Producer::ReceiveRtpPacket() | no stream found for received packet [ssrc:731891105]
2025-02-03T08:59:24.627Z mediasoup:WARN:Channel [pid:1436684] RTC::Producer::ReceiveRtpPacket() | no stream found for received packet [ssrc:1189021310]
2025-02-03T08:59:25.430Z mediasoup:WARN:Channel [pid:1436684] RTC::Producer::ReceiveRtpPacket() | no stream found for received packet [ssrc:3901521563]
2025-02-03T08:59:27.005Z mediasoup:WARN:Channel [pid:1436684] RTC::Producer::ReceiveRtpPacket() | no stream found for received packet [ssrc:2881710948]
2025-02-03T08:59:53.510Z mediasoup:WARN:Channel [pid:1436684] RTC::IceServer::OnTimer() | ICE consent expired due to timeout, moving to ‘disconnected’ state
2025-02-03T08:59:54.540Z mediasoup:WARN:Channel [pid:1436684] RTC::WebRtcTransport::SendSctpData() | DTLS not connected, cannot send SCTP data

Context

  • mediasoup version: v3
  • Environment: Node.js with Express
  • Browser: Chrome (latest version)
  • mediasoup configuration: I’m using a standard configuration for WebRTC transports and routers.

Hypotheses

Based on the logs, I suspect the issue might be related to:

  1. SSRC desynchronization: RTP packets are not correctly associated with streams.
  2. DTLS/SCTP connection issues: The DTLS or SCTP connection is not established properly.
  3. Bandwidth instability: Bandwidth fluctuations might be causing interruptions.
  4. ICE connection issues: The ICE connection is timing out or failing.

Question

  • Do you have any ideas about what could be causing this issue?
  • How can I better diagnose and resolve this problem?
  • Are there any best practices for handling SSRC, DTLS/SCTP connections, or bandwidth issues in mediasoup?

Thank you in advance for your help!

You will see same “errors” if you check the logs when everything goes fine.

Yours is probably a “browser auto-play policy” issue (Google it please). And check chrome://webrtc-stats to verify that, indeed, RTP is being received for those streams.

Thanks for your suggestion! While I agree that the browser’s autoplay policy can often be the cause of problems like this, I don’t think it’s the primary cause in my case. Here’s why:

Random Occurrence: The problem occurs randomly, even with peers who are familiar with the application and have already successfully logged in several times.

If you like, I can give you the media logs for the peer who has this error… but I can’t see anything wrong, the producers are well created, the consumers too…

There must be necessarily something wrong in your server or client code and perhaps transports or consumers creation is not robust and fails randomly. I cannot guess why. But I guarantee it’s not a bug in mediasoup libraries.

Your logs look great it’s doing what’s intended. Users will close connection and a receiver may request further update; no concerns in the logs.

Your code/logic would be the culprit, nothing more. :slight_smile:

OK thanks again for your answers ! Any idea which way I can look?

Here are the output logs of the server ;

[INFO] Room(id=679a046e24d6d88b3b221b63 name=room)._createConsumer() transport.consume(), producerPeer: [object Object], consumerPeer [object Object]
[INFO] Room(id=679a046e24d6d88b3b221b63 name=room)._createConsumer() transport.consume(), producerPeer: [object Object], consumerPeer [object Object]
[INFO] DTLS state changed for transport 19502f32-48d5-4f90-a1eb-00956faeec17: connected
[INFO] SCTP state changed for transport 19502f32-48d5-4f90-a1eb-00956faeec17: connecting
2025-02-03T08:59:20.067Z mediasoup:Consumer resume()
2025-02-03T08:59:20.067Z mediasoup:Channel request() [method:CONSUMER_RESUME]
2025-02-03T08:59:20.067Z mediasoup:Channel request succeeded [method:CONSUMER_RESUME, id:51]
2025-02-03T08:59:20.070Z mediasoup:Consumer resume()
2025-02-03T08:59:20.070Z mediasoup:Channel request() [method:CONSUMER_RESUME]
2025-02-03T08:59:20.070Z mediasoup:Channel request succeeded [method:CONSUMER_RESUME, id:52]
[INFO] DTLS state changed for transport 2487c71b-6aa8-4b26-9b75-6df8ed70324f: connecting
[INFO] DTLS state changed for transport 2487c71b-6aa8-4b26-9b75-6df8ed70324f: connected
[INFO] SCTP state changed for transport 2487c71b-6aa8-4b26-9b75-6df8ed70324f: connecting
[INFO] Removed peer peer_d from network trouble users
[INFO] Producer 031b5b65-c842-4a7d-b401-41d4a1f62828 score update:
[INFO] Attempting to produce data for transportId: 2487c71b-6aa8-4b26-9b75-6df8ed70324f
2025-02-03T08:59:20.136Z mediasoup:Transport produceData()
2025-02-03T08:59:20.136Z mediasoup:Channel request() [method:TRANSPORT_PRODUCE_DATA]
2025-02-03T08:59:20.137Z mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE_DATA, id:53]
2025-02-03T08:59:20.137Z mediasoup:DataProducer constructor()
[INFO] Data producer with id 987d1c97-0e0b-4acc-b038-815f41877698 created and added to peer data.
[INFO] SCTP state changed for transport 2487c71b-6aa8-4b26-9b75-6df8ed70324f: connected
[INFO] Producer a540fae6-ee05-4461-8fa7-e5292cbca999 score update:
[INFO] Producer 031b5b65-c842-4a7d-b401-41d4a1f62828 score update:
[INFO] Sending RTP capabilities to peer peer_black_screen
[INFO] Creating WebRTC transport for peer peer_black_screen
2025-02-03T08:59:23.271Z mediasoup:Router createWebRtcTransport()
2025-02-03T08:59:23.271Z mediasoup:Channel request() [method:ROUTER_CREATE_WEBRTCTRANSPORT]
2025-02-03T08:59:23.272Z mediasoup:Channel request succeeded [method:ROUTER_CREATE_WEBRTCTRANSPORT, id:54]
2025-02-03T08:59:23.273Z mediasoup:Transport constructor()
2025-02-03T08:59:23.273Z mediasoup:WebRtcTransport constructor()
2025-02-03T08:59:23.273Z mediasoup:Transport setMaxIncomingBitrate() [bitrate:1500000]
2025-02-03T08:59:23.273Z mediasoup:Channel request() [method:TRANSPORT_SET_MAX_INCOMING_BITRATE]
2025-02-03T08:59:23.274Z mediasoup:Channel request succeeded [method:TRANSPORT_SET_MAX_INCOMING_BITRATE, id:55]
[INFO] Set max incoming bitrate for transport 0333620e-1cec-4ee3-9090-e118ade1eeb2
[INFO] Creating WebRTC transport for peer peer_black_screen
2025-02-03T08:59:23.293Z mediasoup:Router createWebRtcTransport()
2025-02-03T08:59:23.294Z mediasoup:Channel request() [method:ROUTER_CREATE_WEBRTCTRANSPORT]
2025-02-03T08:59:23.295Z mediasoup:Channel request succeeded [method:ROUTER_CREATE_WEBRTCTRANSPORT, id:56]
2025-02-03T08:59:23.296Z mediasoup:Transport constructor()
2025-02-03T08:59:23.296Z mediasoup:WebRtcTransport constructor()
2025-02-03T08:59:23.296Z mediasoup:Transport setMaxIncomingBitrate() [bitrate:1500000]
2025-02-03T08:59:23.297Z mediasoup:Channel request() [method:TRANSPORT_SET_MAX_INCOMING_BITRATE]
2025-02-03T08:59:23.297Z mediasoup:Channel request succeeded [method:TRANSPORT_SET_MAX_INCOMING_BITRATE, id:57]
[INFO] Set max incoming bitrate for transport b75bc243-37bf-4ffa-bfb7-97b907ff3ac2
[INFO] Peer peer_black_screen joined successfully
2025-02-03T08:59:23.308Z mediasoup:Transport consume()
2025-02-03T08:59:23.309Z mediasoup:Channel request() [method:TRANSPORT_CONSUME]
2025-02-03T08:59:23.310Z mediasoup:Transport consume()
2025-02-03T08:59:23.311Z mediasoup:Channel request() [method:TRANSPORT_CONSUME]
2025-02-03T08:59:23.311Z mediasoup:Transport consume()
2025-02-03T08:59:23.312Z mediasoup:Channel request() [method:TRANSPORT_CONSUME]
2025-02-03T08:59:23.312Z mediasoup:Transport consume()
2025-02-03T08:59:23.313Z mediasoup:Channel request() [method:TRANSPORT_CONSUME]
2025-02-03T08:59:23.313Z mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME, id:58]
2025-02-03T08:59:23.313Z mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME, id:59]
2025-02-03T08:59:23.313Z mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME, id:60]
2025-02-03T08:59:23.313Z mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME, id:61]
2025-02-03T08:59:23.313Z mediasoup:Consumer constructor()
2025-02-03T08:59:23.313Z mediasoup:Consumer constructor()
2025-02-03T08:59:23.313Z mediasoup:Consumer constructor()
2025-02-03T08:59:23.313Z mediasoup:Consumer constructor()
[INFO] Room(id=679a046e24d6d88b3b221b63 name=room)._createConsumer() transport.consume(), producerPeer: [object Object], consumerPeer [object Object]
[INFO] Room(id=679a046e24d6d88b3b221b63 name=room)._createConsumer() transport.consume(), producerPeer: [object Object], consumerPeer [object Object]
[INFO] Room(id=679a046e24d6d88b3b221b63 name=room)._createConsumer() transport.consume(), producerPeer: [object Object], consumerPeer [object Object]
[INFO] Room(id=679a046e24d6d88b3b221b63 name=room)._createConsumer() transport.consume(), producerPeer: [object Object], consumerPeer [object Object]
[INFO] Attempting to connect WebRtcTransport with transportId: b75bc243-37bf-4ffa-bfb7-97b907ff3ac2
[INFO] Connecting transport b75bc243-37bf-4ffa-bfb7-97b907ff3ac2 with provided DTLS parameters.
2025-02-03T08:59:23.477Z mediasoup:WebRtcTransport connect()
2025-02-03T08:59:23.477Z mediasoup:Channel request() [method:WEBRTCTRANSPORT_CONNECT]
2025-02-03T08:59:23.478Z mediasoup:Channel request succeeded [method:WEBRTCTRANSPORT_CONNECT, id:62]
[INFO] Transport b75bc243-37bf-4ffa-bfb7-97b907ff3ac2 connected successfully.
2025-02-03T08:59:23.497Z mediasoup:Consumer resume()
2025-02-03T08:59:23.497Z mediasoup:Channel request() [method:CONSUMER_RESUME]
2025-02-03T08:59:23.497Z mediasoup:Channel request succeeded [method:CONSUMER_RESUME, id:63]
[INFO] DTLS state changed for transport b75bc243-37bf-4ffa-bfb7-97b907ff3ac2: connecting
[INFO] DTLS state changed for transport b75bc243-37bf-4ffa-bfb7-97b907ff3ac2: connected
[INFO] SCTP state changed for transport b75bc243-37bf-4ffa-bfb7-97b907ff3ac2: connecting
2025-02-03T08:59:23.539Z mediasoup:Consumer resume()
2025-02-03T08:59:23.539Z mediasoup:Channel request() [method:CONSUMER_RESUME]
2025-02-03T08:59:23.539Z mediasoup:Channel request succeeded [method:CONSUMER_RESUME, id:64]
2025-02-03T08:59:23.548Z mediasoup:Consumer resume()
2025-02-03T08:59:23.548Z mediasoup:Channel request() [method:CONSUMER_RESUME]
2025-02-03T08:59:23.548Z mediasoup:Channel request succeeded [method:CONSUMER_RESUME, id:65]
[INFO] Attempting to produce media: kind=video, transportId=8323c504-1df5-4077-9c81-6796c17dc651
[INFO] Producing media with transportId: 8323c504-1df5-4077-9c81-6796c17dc651
2025-02-03T08:59:23.885Z mediasoup:Transport produce()
2025-02-03T08:59:23.887Z mediasoup:Channel request() [method:TRANSPORT_PRODUCE]
2025-02-03T08:59:23.887Z mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE, id:66]
2025-02-03T08:59:23.887Z mediasoup:Producer constructor()
[INFO] Producer created successfully with id: 953786b5-2ab8-4a0d-9862-4394f2b481cb, peerId: peer_b
[INFO] Creating consumer for producer 953786b5-2ab8-4a0d-9862-4394f2b481cb for peer peer_d
2025-02-03T08:59:23.888Z mediasoup:Transport consume()
2025-02-03T08:59:23.889Z mediasoup:Channel request() [method:TRANSPORT_CONSUME]
[INFO] Creating consumer for producer 953786b5-2ab8-4a0d-9862-4394f2b481cb for peer peer_c
2025-02-03T08:59:23.890Z mediasoup:Transport consume()
2025-02-03T08:59:23.890Z mediasoup:Channel request() [method:TRANSPORT_CONSUME]
[INFO] Creating consumer for producer 953786b5-2ab8-4a0d-9862-4394f2b481cb for peer peer_black_screen
2025-02-03T08:59:23.890Z mediasoup:Transport consume()

Thanks in advance, I going to check my code again !

Can you verify you are not using localhost IP address as part of your listen info IPs

Thanks for your suggestion.
I’m using the ip of my server defined in my env variables, launched with pm2.

  webRtcTransportOptions :
  {
  	listenIps :
  	[
  		{
  			ip          : process.env.MEDIASOUP_LISTEN_IP || '1.2.3.4',
  			announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
  		}
  	],
  	initialAvailableOutgoingBitrate : 1000000,
  	minimumAvailableOutgoingBitrate : 600000,
  	maxSctpMessageSize              : 262144,
  	// Additional options that are not part of WebRtcTransportOptions.
  	maxIncomingBitrate              : 1500000
  },
  // mediasoup PlainTransport options for legacy RTP endpoints (FFmpeg,
  // GStreamer).
  // See https://mediasoup.org/documentation/v3/mediasoup/api/#PlainTransportOptions
  plainTransportOptions :
  {
  	listenIp :
  	{
  		ip          : process.env.MEDIASOUP_LISTEN_IP || '1.2.3.4',
  		announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
  	},
  	maxSctpMessageSize : 262144
  }