Bytes are transferred but no real audio stream is received

In my tests it sometimes happens that data is transferred while no audio stream is received. Everything seems fine, no error, no warning but also no audio is heard. What does that mean?

Consumer:



Producer:

I could reproduce the issue with one producer and two consumers. One of the consumers is receiving audio with no problem while the other one is receiving invalid RTP data.

If this would be a real bug in mediasoup it would happen often. However I’ve never seen it. If you can spot the issue specifics please report it as a bug. If you can reproduce it using the mediasoup-demo that would help. However I cannot figure out why that happens in your scenario.

The issue always happens when producing in iOS/Safari. I tried opus and PCMU codecs with no luck. As you can see in the picture below the codec name in the receiver side is unknown.

Tested with mediasoup demo, the audio stream from iOS is not received at all!

I cannot test in iOS/Safari right now. I understand that not having googCodecName is strange, but it says absolutely nothing to me.

Get producer stats in server side, check if the browser is sending anything to the server or not, etc.

BTW I don’t know if you are enabling server side logs/tags, etc.

No, zero data is sent by the producer. It seems to be a different issue than my first post which data was being transferred but no real audio is received.

BTW in one of my test attempts it worked once and audio was received with no problem! So I included the two logs here, the successful one and the unsuccessful one. Let me know if I can provide more details.

Successful:

  mediasoup:Router createWebRtcTransport() +57s
  mediasoup:Channel[pid:33603] request() [method:router.createWebRtcTransport, id:6] +57s
  mediasoup:Channel[pid:33603] request succeeded [method:router.createWebRtcTransport, id:6] +1ms
  mediasoup:Transport constructor() +57s
  mediasoup:WebRtcTransport constructor() +57s
  mediasoup:WebRtcTransport setMaxIncomingBitrate() [bitrate:1500000] +0ms
  mediasoup:Channel[pid:33603] request() [method:transport.setMaxIncomingBitrate, id:7] +0ms
  mediasoup:Channel[pid:33603] request succeeded [method:transport.setMaxIncomingBitrate, id:7] +1ms
  mediasoup:WebRtcTransport connect() +193ms
  mediasoup:Channel[pid:33603] request() [method:transport.connect, id:8] +192ms
  mediasoup:Channel[pid:33603] request succeeded [method:transport.connect, id:8] +1ms
  mediasoup:Transport produce() +288ms
  mediasoup:Channel[pid:33603] request() [method:transport.produce, id:9] +95ms
  mediasoup:Channel[pid:33603] request succeeded [method:transport.produce, id:9] +1ms
  mediasoup:Producer constructor() +0ms
  mediasoup:worker[pid:33603] RTC::IceServer::HandleTuple() | transition from state 'new' to 'connected' +4m
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +0ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +1ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::MayRunDtlsTransport() | running DTLS transport in local role 'client' +0ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::OnDtlsTransportConnecting() | DTLS connecting +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::Run() | running [role:client] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | DTLS handshake start +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'before SSL initialization'] +1ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write client hello'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | role: client, waiting:'SSLv3/TLS write client hello'] +0ms
  mediasoup:Transport consume() +9ms
  mediasoup:Channel[pid:33603] request() [method:transport.consume, id:10] +8ms
  mediasoup:worker[pid:33603] RTC::SimpleConsumer::CreateRtpStream() | [ssrc:374000672, payloadType:100] +3ms
  mediasoup:worker[pid:33603] RTC::SimpleConsumer::CreateRtpStream() | in band FEC enabled +0ms
  mediasoup:Channel[pid:33603] request succeeded [method:transport.consume, id:10] +0ms
  mediasoup:Consumer constructor() +0ms
  mediasoup:WebRtcTransport connect() +115ms
  mediasoup:Channel[pid:33603] request() [method:transport.connect, id:11] +11ms
  mediasoup:Channel[pid:33603] request succeeded [method:transport.connect, id:11] +1ms
  mediasoup:worker[pid:33603] RTC::IceServer::HandleTuple() | transition from state 'new' to 'connected' +166ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +2ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +0ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::MayRunDtlsTransport() | running DTLS transport in local role 'server' +0ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::OnDtlsTransportConnecting() | DTLS connecting +2ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::Run() | running [role:server] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | DTLS handshake start +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'before SSL initialization'] +1ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | role: server, waiting:'before SSL initialization'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'before SSL initialization'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read client hello'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write server hello'] +1ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write certificate'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write key exchange'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write certificate request'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write server done'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | role: server, waiting:'SSLv3/TLS write server done'] +1ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write server done'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read client certificate'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read client key exchange'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read certificate verify'] +1ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read change cipher spec'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read finished'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write change cipher spec'] +4ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | DTLS handshake done +1ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::CheckRemoteFingerprint() | valid remote fingerprint +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::GetNegotiatedSrtpProfile() | chosen SRTP profile: SRTP_AES128_CM_SHA1_80 +0ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::OnDtlsTransportConnected() | DTLS connected +0ms
  mediasoup:worker[pid:33603] RTC::IceServer::HandleTuple() | transition from state 'connected' to 'completed' +36ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write client hello'] +183ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read server hello'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read server certificate'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read server key exchange'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read server certificate request'] +1ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read server done'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write client certificate'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write client key exchange'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write certificate verify'] +1ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write change cipher spec'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | role: client, waiting:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33603] RTC::IceServer::HandleTuple() | transition from state 'connected' to 'completed' +0ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | role: client, waiting:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | role: client, waiting:'SSLv3/TLS write finished'] +1ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | role: client, waiting:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write finished'] +14ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read change cipher spec'] +1ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read finished'] +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::OnSslInfo() | DTLS handshake done +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::CheckRemoteFingerprint() | valid remote fingerprint +0ms
  mediasoup:worker[pid:33603] RTC::DtlsTransport::GetNegotiatedSrtpProfile() | chosen SRTP profile: SRTP_AES128_CM_SHA1_80 +0ms
  mediasoup:worker[pid:33603] RTC::WebRtcTransport::OnDtlsTransportConnected() | DTLS connected +0ms
  mediasoup:worker[pid:33603] RTC::Producer::CreateRtpStream() | [ssrc:1569528685, rid:, payloadType:111] +461ms
  mediasoup:worker[pid:33603] RTC::Producer::CreateRtpStream() | in band FEC enabled +0ms
  mediasoup:worker[pid:33603] RTC::SimpleConsumer::SendRtpPacket() | sending sync packet [ssrc:374000672, seq:1, ts:1884254750] from original [seq:15894] +1ms
  mediasoup:worker[pid:33603] RTC::RtpStreamRecv::GetRtcpReceiverReport() | using worst remote fraction lost:1 +9s

Unsuccessful:

mediasoup:Router createWebRtcTransport() +18s
  mediasoup:Channel[pid:33604] request() [method:router.createWebRtcTransport, id:6] +18s
  mediasoup:Channel[pid:33604] request succeeded [method:router.createWebRtcTransport, id:6] +1ms
  mediasoup:Transport constructor() +18s
  mediasoup:WebRtcTransport constructor() +18s
  mediasoup:WebRtcTransport setMaxIncomingBitrate() [bitrate:1500000] +0ms
  mediasoup:Channel[pid:33604] request() [method:transport.setMaxIncomingBitrate, id:7] +0ms
  mediasoup:Channel[pid:33604] request succeeded [method:transport.setMaxIncomingBitrate, id:7] +1ms
  mediasoup:WebRtcTransport connect() +235ms
  mediasoup:Channel[pid:33604] request() [method:transport.connect, id:8] +234ms
  mediasoup:Channel[pid:33604] request succeeded [method:transport.connect, id:8] +0ms
  mediasoup:Transport produce() +256ms
  mediasoup:Channel[pid:33604] request() [method:transport.produce, id:9] +21ms
  mediasoup:Channel[pid:33604] request succeeded [method:transport.produce, id:9] +1ms
  mediasoup:Producer constructor() +2m
  mediasoup:worker[pid:33604] RTC::IceServer::HandleTuple() | transition from state 'new' to 'connected' +17m
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +0ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +1ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::MayRunDtlsTransport() | running DTLS transport in local role 'client' +1ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::OnDtlsTransportConnecting() | DTLS connecting +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::Run() | running [role:client] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | DTLS handshake start +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'before SSL initialization'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write client hello'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | role: client, waiting:'SSLv3/TLS write client hello'] +0ms
  mediasoup:Transport consume() +7ms
  mediasoup:Channel[pid:33604] request() [method:transport.consume, id:10] +6ms
  mediasoup:worker[pid:33604] RTC::SimpleConsumer::CreateRtpStream() | [ssrc:967834319, payloadType:100] +3ms
  mediasoup:worker[pid:33604] RTC::SimpleConsumer::CreateRtpStream() | in band FEC enabled +0ms
  mediasoup:Channel[pid:33604] request succeeded [method:transport.consume, id:10] +1ms
  mediasoup:Consumer constructor() +3m
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write client hello'] +5ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read server hello'] +1ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read server certificate'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read server key exchange'] +1ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read server certificate request'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read server done'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write client certificate'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write client key exchange'] +1ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write certificate verify'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write change cipher spec'] +1ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | role: client, waiting:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33604] RTC::IceServer::HandleTuple() | transition from state 'connected' to 'completed' +519ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +1ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | role: client, waiting:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | role: client, waiting:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | role: client, waiting:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read change cipher spec'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:client, action:'SSLv3/TLS read finished'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | DTLS handshake done +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::CheckRemoteFingerprint() | valid remote fingerprint +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::GetNegotiatedSrtpProfile() | chosen SRTP profile: SRTP_AES128_CM_SHA1_80 +0ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::OnDtlsTransportConnected() | DTLS connected +0ms
  mediasoup:WebRtcTransport connect() +604ms
  mediasoup:Channel[pid:33604] request() [method:transport.connect, id:11] +576ms
  mediasoup:Channel[pid:33604] request succeeded [method:transport.connect, id:11] +1ms
  mediasoup:worker[pid:33604] RTC::IceServer::HandleTuple() | transition from state 'new' to 'connected' +199ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +0ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +1ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::MayRunDtlsTransport() | running DTLS transport in local role 'server' +1ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::OnDtlsTransportConnecting() | DTLS connecting +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::Run() | running [role:server] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | DTLS handshake start +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'before SSL initialization'] +1ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | role: server, waiting:'before SSL initialization'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'before SSL initialization'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read client hello'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write server hello'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write certificate'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write key exchange'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write certificate request'] +1ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write server done'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | role: server, waiting:'SSLv3/TLS write server done'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write server done'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read client certificate'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read client key exchange'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read certificate verify'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read change cipher spec'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS read finished'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write change cipher spec'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | [role:server, action:'SSLv3/TLS write finished'] +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::OnSslInfo() | DTLS handshake done +0ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::CheckRemoteFingerprint() | valid remote fingerprint +1ms
  mediasoup:worker[pid:33604] RTC::DtlsTransport::GetNegotiatedSrtpProfile() | chosen SRTP profile: SRTP_AES128_CM_SHA1_80 +0ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::OnDtlsTransportConnected() | DTLS connected +0ms
  mediasoup:worker[pid:33604] RTC::IceServer::HandleTuple() | transition from state 'connected' to 'completed' +44ms
  mediasoup:worker[pid:33604] RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +0ms

Hi @mkh. Honestly I was not asking for as more logs as possible. I was just indicating that, by checking mediasoup provided logs and RTC producer stats, you should be able to figure out what happens.

In those logs there are 2 WebRTC connections, audio/video producers and consumers. I don’t know what is going on there regarding just audio sent by iOS Safari.

Connect a simple iOS Safari client to mediasoup, just enable audio sending, and check audioProducer.getStats() in the server.

But it’s just audio :thinking:. One producer and one consumer. Which part of the log indicates it’s a video producer?

Regarding audioProducer.getStats() it returns an empty array!

Ok, it’s just that honestly I do not want to check logs. They are there for users to check them :slight_smile:

If getStats() returns empty array it means that no RTP has been received. So that’s an issue in iOS/Safari. I have no idea.

I discovered that closing and re-opening the browser (Safari here) fixes the problem. But only for the first call and further attempts to produce fail. There is a bug saying iOS calling getUserMedia() again kills video display of first getUserMedia() but not sure if is related since it’s about video not audio.

Update: hard reload or clearing the cache has the same effect.

It seems to be an issue in iOS Safari then.

It turned out that if the audio stream be in use some how, then the next call to getUserMedia() will not return proper audio (iOS only).

I am using Hark for detecting the speaker user and apparently it does not release the stream even after calling track.stop(). And I wonder why reloading the page does not help, but deep reload!

It seems that that explains the issue (which is an iOS issue, not mediasoup related). :slight_smile:

I’ve reported two similar issues here indeed and I was thinking that they are the same, which I was wrong. In the first one, that happens rarely, bytes are produced and transferred but in the second one, that happens only on iOS, no bytes are produced/transferred.

About the first issue I’m not sure if it is related to mediasoup or not and the worse is that I still don’t know how to reproduce it :confused:.

Hard to figure out what happens in those cases. No iOS right now to check.