Audio/Video Does Not Work On Desktop (Ok on Android to Andorid)

This is my first time using Talk and am running into an issue where if a user is on a desktop, the audio/video call never connects. But everyone works fine if both users are on their phones.
As a troubleshoot, I set-up a TURN server, but I’m facing the same issue.

Support intro

STUN Server: turn.mydomain.com:3478
TURN server: turn.mydomain.com:3478, w/Secret, UDP and TCP

Nextcloud version (eg, 24.0.1): 27.1.4
Talk Server version (eg, 14.0.2): 17.1.4
Custom Signaling server configured: no and version
Custom TURN server configured: yes
Custom STUN server configured: yes

In case the web version of Nextcloud Talk is involved:
Windows & Mac, Edge, Chrome, and Firefox

The issue you are facing:

Talk works fine with audio/video Android to Android.
But if it is desktop to desktop or desktop to Android, the connection never happens. The other person always appears with a constant spinning icon with no sound or video.

Is this the first time you’ve seen this error? (Y):

Steps to replicate it:

  1. Initiate a call on or to a user on a desktop
  2. Text chat works fine, but audio/video never loads
  3. After some spinning icon time, a message appears “Connection could not be established. Trying again…”

The output of your Nextcloud log in Admin > Logging or errors in nextcloud.log in /var/www/:

No recent or related errors

The output of your Apache/nginx/system log in /var/log/____:

No recent or related errors

Your browser log if relevant (javascript console log, network log, etc.):

localMediaStarted webrtc.js:1544:10
Changed quality to 4 VideoConstrainer.js:118:11
clearLastReadMessage because of isSticky token=zvkekome MessagesList.vue:922
Stop waiting sound sounds.js:33:10
Playing join sound because of self joining sounds.js:88:11
Stop waiting sound sounds.js:33:10
Playing join sound sounds.js:91:11
WebRTC: Using more than two STUN/TURN servers slows down discovery talk-main.js:2
Peer created jw/i2Ji862i1uDcLvQSAiZLu83yZ8nsobKuMqd8/0TKdi/U8UtVaWnd/Lf42ZO1QWqs6Xnf8h7s8QpEFoB1MMh9/StRamcqiarTkqJNRVmSjp83rDcv5bMNKhi9urQ3g9biEHQ2LGdYmg/XqZt7vHv0Q6NaELqtm1VsCd7juqYXQeGXVABzq1ji0QXgTre0/9pdt9de0E9CTnGeseABegZqtaEJv14uw3xmTcWPbu+LmfUegq3Ij4c3MC9Sso+E 
Object { id: Getter & Setter, parent: Getter & Setter, type: Getter & Setter, oneway: Getter & Setter, sharemyscreen: Getter & Setter, stream: Getter & Setter, receiverOnly: Getter & Setter, sendVideoIfAvailable: Getter & Setter, enableDataChannels: Getter & Setter, enableSimulcast: Getter & Setter, … }
webrtc.js:1196:10
ANSWER 
Object { to: "jw/i2Ji862i1uDcLvQSAiZLu83yZ8nsobKuMqd8/0TKdi/U8UtVaWnd/Lf42ZO1QWqs6Xnf8h7s8QpEFoB1MMh9/StRamcqiarTkqJNRVmSjp83rDcv5bMNKhi9urQ3g9biEHQ2LGdYmg/XqZt7vHv0Q6NaELqtm1VsCd7juqYXQeGXVABzq1ji0QXgTre0/9pdt9de0E9CTnGeseABegZqtaEJv14uw3xmTcWPbu+LmfUegq3Ij4c3MC9Sso+E", sid: "1703194693405", broadcaster: undefined, roomType: "video", type: "answer", payload: {…} }
signaling.js:478:10
Connecting to peer... jw/i2Ji862i1uDcLvQSAiZLu83yZ8nsobKuMqd8/0TKdi/U8UtVaWnd/Lf42ZO1QWqs6Xnf8h7s8QpEFoB1MMh9/StRamcqiarTkqJNRVmSjp83rDcv5bMNKhi9urQ3g9biEHQ2LGdYmg/XqZt7vHv0Q6NaELqtm1VsCd7juqYXQeGXVABzq1ji0QXgTre0/9pdt9de0E9CTnGeseABegZqtaEJv14uw3xmTcWPbu+LmfUegq3Ij4c3MC9Sso+E 
Object { id: Getter & Setter, parent: Getter & Setter, type: Getter & Setter, oneway: Getter & Setter, sharemyscreen: Getter & Setter, stream: Getter & Setter, receiverOnly: Getter & Setter, sendVideoIfAvailable: Getter & Setter, enableDataChannels: Getter & Setter, enableSimulcast: Getter & Setter, … }
webrtc.js:853:12
WebRTC: ICE failed, see about:webrtc for more details
Connection failed. jw/i2Ji862i1uDcLvQSAiZLu83yZ8nsobKuMqd8/0TKdi/U8UtVaWnd/Lf42ZO1QWqs6Xnf8h7s8QpEFoB1MMh9/StRamcqiarTkqJNRVmSjp83rDcv5bMNKhi9urQ3g9biEHQ2LGdYmg/XqZt7vHv0Q6NaELqtm1VsCd7juqYXQeGXVABzq1ji0QXgTre0/9pdt9de0E9CTnGeseABegZqtaEJv14uw3xmTcWPbu+LmfUegq3Ij4c3MC9Sso+E 
Object { id: Getter & Setter, parent: Getter & Setter, type: Getter & Setter, oneway: Getter & Setter, sharemyscreen: Getter & Setter, stream: Getter & Setter, receiverOnly: Getter & Setter, sendVideoIfAvailable: Getter & Setter, enableDataChannels: Getter & Setter, enableSimulcast: Getter & Setter, … }
webrtc.js:868:12
Conversations were saved to BrowserStorage. Estimated object size: 7.20 kB conversationsStore.js:405:10
Conversations were saved to BrowserStorage. Estimated object size: 7.20 kB conversationsStore.js:405:10
Remove disconnected peer jw/i2Ji862i1uDcLvQSAiZLu83yZ8nsobKuMqd8/0TKdi/U8UtVaWnd/Lf42ZO1QWqs6Xnf8h7s8QpEFoB1MMh9/StRamcqiarTkqJNRVmSjp83rDcv5bMNKhi9urQ3g9biEHQ2LGdYmg/XqZt7vHv0Q6NaELqtm1VsCd7juqYXQeGXVABzq1ji0QXgTre0/9pdt9de0E9CTnGeseABegZqtaEJv14uw3xmTcWPbu+LmfUegq3Ij4c3MC9Sso+E webrtc.js:421:10