rtcbot icon indicating copy to clipboard operation
rtcbot copied to clipboard

/connect does not work on Safari

Open bestander opened this issue 5 years ago • 3 comments

When calling fetch('/connect') from JS server returns 500 error:

Traceback (most recent call last):
  File "/home/pi/.local/lib/python3.7/site-packages/aiohttp/web_protocol.py", line 422, in _handle_request
    resp = await self._request_handler(request)
  File "/home/pi/.local/lib/python3.7/site-packages/aiohttp/web_app.py", line 499, in _handle
    resp = await handler(request)
  File "server.py", line 59, in connect
    serverResponse = await conn.getLocalDescription(clientOffer)
  File "/home/pi/.local/lib/python3.7/site-packages/rtcbot/connection.py", line 416, in getLocalDescription
    await self._rtc.setLocalDescription(answer)
  File "/home/pi/.local/lib/python3.7/site-packages/aiortc/rtcpeerconnection.py", line 722, in setLocalDescription
    t._currentDirection = and_direction(t.direction, t._offerDirection)
  File "/home/pi/.local/lib/python3.7/site-packages/aiortc/rtcpeerconnection.py", line 239, in and_direction
    return sdp.DIRECTIONS[sdp.DIRECTIONS.index(a) & sdp.DIRECTIONS.index(b)]

Here is the offer on Safari (both on Mac and iPhone)

{'type': 'offer', 
'sdp': 'v=0\r\no=- 1263138098855072207 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0\r\na=msid-semantic: WMS\r\nm=application 58470 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=candidate:934711376 1 udp 2113937151 826782df-73ad-4a61-a685-f1f02d224ec9.local 58470 typ host generation 0 network-cost 999\r\na=candidate:842163049 1 udp 1677729535 24.18.206.87 58470 typ srflx raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=ice-ufrag:zSg7\r\na=ice-pwd:4oIXMXt1KzSnROb+edWyIcJC\r\na=ice-options:trickle\r\na=fingerprint:sha-256 38:2B:A6:D8:EB:6F:B8:4D:74:DE:52:38:71:1E:67:77:A4:2F:0E:F2:08:97:79:95:FE:5E:71:5A:46:43:CB:39\r\na=setup:actpass\r\na=mid:0\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n'}

Which is much smaller than what I get on Chrome on the same computer

{'type': 'offer', 
'sdp': 'v=0\r\no=- 5479937407617332623 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=msid-semantic: WMS\r\nm=video 64580 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 102 121 127 120 125 107 108 109 124 119 123 118 114 115 116\r\nc=IN IP4 24.18.206.87\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:934711376 1 udp 2113937151 3384c9f6-cfb9-48e6-9cbe-f7ffa4f18c49.local 64580 typ host generation 0 network-cost 999\r\na=candidate:842163049 1 udp 1677729535 24.18.206.87 64580 typ srflx raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=ice-ufrag:bzC6\r\na=ice-pwd:roJJcxyRW/acv4ZnkEdSgHbZ\r\na=ice-options:trickle\r\na=fingerprint:sha-256 18:C6:1A:A0:F4:ED:E5:EE:B9:4B:FE:E5:79:3E:47:52:57:A6:1D:3C:B8:D7:4A:36:4D:30:24:42:14:D6:4F:9C\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 urn:3gpp:video-orientation\r\na=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 VP9/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 profile-id=2\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:122 VP9/90000\r\na=rtcp-fb:122 goog-remb\r\na=rtcp-fb:122 transport-cc\r\na=rtcp-fb:122 ccm fir\r\na=rtcp-fb:122 nack\r\na=rtcp-fb:122 nack pli\r\na=fmtp:122 profile-id=1\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=102\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:120 rtx/90000\r\na=fmtp:120 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 H264/90000\r\na=rtcp-fb:108 goog-remb\r\na=rtcp-fb:108 transport-cc\r\na=rtcp-fb:108 ccm fir\r\na=rtcp-fb:108 nack\r\na=rtcp-fb:108 nack pli\r\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:124 H264/90000\r\na=rtcp-fb:124 goog-remb\r\na=rtcp-fb:124 transport-cc\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032\r\na=rtpmap:119 rtx/90000\r\na=fmtp:119 apt=124\r\na=rtpmap:123 H264/90000\r\na=rtcp-fb:123 goog-remb\r\na=rtcp-fb:123 transport-cc\r\na=rtcp-fb:123 ccm fir\r\na=rtcp-fb:123 nack\r\na=rtcp-fb:123 nack pli\r\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032\r\na=rtpmap:118 rtx/90000\r\na=fmtp:118 apt=123\r\na=rtpmap:114 red/90000\r\na=rtpmap:115 rtx/90000\r\na=fmtp:115 apt=114\r\na=rtpmap:116 ulpfec/90000\r\nm=application 54505 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 24.18.206.87\r\na=candidate:934711376 1 udp 2113937151 3384c9f6-cfb9-48e6-9cbe-f7ffa4f18c49.local 54505 typ host generation 0 network-cost 999\r\na=candidate:842163049 1 udp 1677729535 24.18.206.87 54505 typ srflx raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=ice-ufrag:bzC6\r\na=ice-pwd:roJJcxyRW/acv4ZnkEdSgHbZ\r\na=ice-options:trickle\r\na=fingerprint:sha-256 18:C6:1A:A0:F4:ED:E5:EE:B9:4B:FE:E5:79:3E:47:52:57:A6:1D:3C:B8:D7:4A:36:4D:30:24:42:14:D6:4F:9C\r\na=setup:actpass\r\na=mid:1\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n'}

bestander avatar Nov 27 '20 09:11 bestander

I searched a bit and someone mentioned that Safari is more restrictive in WebRTC features by default, e.g. https://stackoverflow.com/a/53914556. More info on my environment: web server is running on http://192.168.0.46 and I enabled "Allow Media Capture on Insecure Sites" in Safari

bestander avatar Nov 27 '20 09:11 bestander

Ok, I think I found. a workaround: https://github.com/webrtcHacks/adapter

Adding this to HTML fixes the issue for me

<script crossorigin src="https://webrtc.github.io/adapter/adapter-latest.js"></script>

bestander avatar Nov 27 '20 11:11 bestander

Thanks for the workaround! I'll try to look into the details here, but I don't know if I will have time to do so in the next week.

dkumor avatar Nov 28 '20 07:11 dkumor