Audio track issue iOS version < 13 :(

Hi there, I’ve been using this library for the quite a while now with no problems.

As of late something quite strange has happened. When in a call I can share video tracks perfectly without fail but when I go to share audio to another device I get nothing.

So a step by step reproduction of this:

  1. Answer incoming call triggered by android ( everything works fine on android ).
  2. Attempt to share audio tracks back to Android caller.
  3. And we get nothing.
  • Android build of same app can send audio & video perfectly.

The same code has always worked & still does on android, if I upgrade my phones version to iOS 13 or greater the audio tracks work again. Quite confused as to what is has happening & would appreciate any help, been scratching my head for a while on this.

Additional Info:

React - 16.8.3
React-native - 0.59.1
React-native-webrtc - 1.75.2
Iphone Version - 12.4.3

Can you paste the SDP exchanges you get in both cases?

The initial Offer from iOS to another device SDP:

"v=0
o=- 1748344144277929720 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video data
a=msid-semantic: WMS 132C0486-9372-4065-B044-337325AC3942
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:fDZf
a=ice-pwd:YNB95jjBRx39rIbhvdB2nhqA
a=ice-options:trickle renomination
a=fingerprint:sha-256 A6:47:9B:5B:9A:A8:47:22:A7:E3:90:22:56:C4:2C:EC:B7:03:B0:D9:A5:32:74:85:B5:2A:1A:A0:A6:B8:EF:7C
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=sendrecv
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:102 ILBC/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
a=ssrc:3481670060 cname:DaHHZpDII6hjA7v1
a=ssrc:3481670060 msid:132C0486-9372-4065-B044-337325AC3942 4DA394BA-D322-4FB9-A1A1-C42C17254F4A
a=ssrc:3481670060 mslabel:132C0486-9372-4065-B044-337325AC3942
a=ssrc:3481670060 label:4DA394BA-D322-4FB9-A1A1-C42C17254F4A
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 123 125 122 124
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:fDZf
a=ice-pwd:YNB95jjBRx39rIbhvdB2nhqA
a=ice-options:trickle renomination
a=fingerprint:sha-256 A6:47:9B:5B:9A:A8:47:22:A7:E3:90:22:56:C4:2C:EC:B7:03:B0:D9:A5:32:74:85:B5:2A:1A:A0:A6:B8:EF:7C
a=setup:actpass
a=mid:video
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:13 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 urn:3gpp:video-orientation
a=extmap:2 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07
a=extmap:9 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=sendrecv
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640c2a
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 H264/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e02a
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:127 VP9/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=rtpmap:123 rtx/90000
a=fmtp:123 apt=127
a=rtpmap:125 red/90000
a=rtpmap:122 rtx/90000
a=fmtp:122 apt=125
a=rtpmap:124 ulpfec/90000
a=ssrc-group:FID 1851072697 492105686
a=ssrc:1851072697 cname:DaHHZpDII6hjA7v1
a=ssrc:1851072697 msid:132C0486-9372-4065-B044-337325AC3942 557DABC7-1619-404F-A1FC-161CBE7B1464
a=ssrc:1851072697 mslabel:132C0486-9372-4065-B044-337325AC3942
a=ssrc:1851072697 label:557DABC7-1619-404F-A1FC-161CBE7B1464
a=ssrc:492105686 cname:DaHHZpDII6hjA7v1
a=ssrc:492105686 msid:132C0486-9372-4065-B044-337325AC3942 557DABC7-1619-404F-A1FC-161CBE7B1464
a=ssrc:492105686 mslabel:132C0486-9372-4065-B044-337325AC3942
a=ssrc:492105686 label:557DABC7-1619-404F-A1FC-161CBE7B1464
m=application 9 DTLS/SCTP 5000
c=IN IP4 0.0.0.0
a=ice-ufrag:fDZf
a=ice-pwd:YNB95jjBRx39rIbhvdB2nhqA
a=ice-options:trickle renomination
a=fingerprint:sha-256 A6:47:9B:5B:9A:A8:47:22:A7:E3:90:22:56:C4:2C:EC:B7:03:B0:D9:A5:32:74:85:B5:2A:1A:A0:A6:B8:EF:7C
a=setup:actpass
a=mid:data
a=sctpmap:5000 webrtc-datachannel 1024
"

Another thing to note was that we tested out the same functionality using this example but via the browser -> https://webrtc.github.io/samples/src/content/peerconnection/pc1/

Open safari on the effected device and connect to the example, video tracks share but audio dont same issue as I’m seeing in my app. Tried with other devices 13+ and it worked fine, I think the problem we are seeing could be related to the Safari version ?

Doing the above test, In Safari when get no feedback from the audio we don’t see any info, but If we run the same test via google chrome we see and error message - “getUserMedia() error: TypeError”

Also aside from this every release we have submitted to the AppStore returns a warning about the UIWebview being deprecated, does this utility not house the getUserMedia function ?

You need to send 4 SDPs: sender and receiver, both when it works and when it doesn’t. Otherwise we can’t see the whole picture here.

This is unrelated. Safari uses a different WebRTC implementation, which no longer supports plan B. Also, this plugin doesn’t use UIWebVIew, so the warning is unrelated to this.