After turning on the debug mode on JS Web and reading logs below, I have one more question to clarify.
PeerJS: SkyWay TURN Server is unavailable
PeerJS: Socket open
PeerJS: startConnection from DataConnection
PeerJS: Creating RTCPeerConnection.
PeerJS: Listening for ICE candidates.
PeerJS: Listening for `negotiationneeded`
PeerJS: Listening for data channel
PeerJS: Listening for remote stream
PeerJS: `negotiationneeded` triggered
PeerJS: Created offer.
PeerJS: Set localDescription: offer for: WEjC8T1TGkiFUmbu
PeerJS: Generated ICE candidate for: WEjC8T1TGkiFUmbu RTCIceCandidate {candidate: "candidate:2011871526 1 udp
2122260223 192.168.44.1…765 typ host generation 0 ufrag Kkpf network-id 1", sdpMid: "data", sdpMLineIndex: 0}
PeerJS: Generated ICE candidate for: WEjC8T1TGkiFUmbu RTCIceCandidate {candidate: "candidate:963200470 1 tcp 1518280447 192.168.44.16…ptype active generation 0 ufrag Kkpf network-id 1", sdpMid: "data", sdpMLineIndex: 0}
PeerJS: Generated ICE candidate for: WEjC8T1TGkiFUmbu RTCIceCandidate {candidate: "candidate:
3144124085 1 udp 1686052607 114.136.64.2… rport 64765 generation 0 ufrag Kkpf network-id 1", sdpMid: "data", sdpMLineIndex: 0}
PeerJS: Generated ICE candidate for: WEjC8T1TGkiFUmbu RTCIceCandidate {candidate: "candidate:
3433799847 1 udp 41885439 66.228.45.110 …3 rport 6881 generation 0 ufrag Kkpf network-id 1", sdpMid: "data", sdpMLineIndex: 0}
PeerJS: ICE candidates gathering complete for: WEjC8T1TGkiFUmbu
PeerJS: Setting remote description RTCSessionDescription {type: "answer", sdp: "v=0
↵o=- 8354801686297600149 2 IN IP4 127.0.0.1
↵s…id:data
↵a=sctpmap:5000 webrtc-datachannel 1024
↵"}
PeerJS: Set remoteDescription: ANSWER for: WEjC8T1TGkiFUmbu
PeerJS: Added ICE candidate for: WEjC8T1TGkiFUmbu
PeerJS: Data channel connection success
// above is OK on data connection; after this point, mediaconnection is invoked by the other end--iOS APP--with peer.call()
PeerJS: startConnection from MediaConnection
PeerJS: MediaConnection created in OFFER
Uncaught TypeError: Cannot read property 'addIceCandidate' of undefined(…)
PeerJS: startConnection from answer step
PeerJS: Creating RTCPeerConnection.
PeerJS: Listening for ICE candidates.
PeerJS: Listening for `negotiationneeded`
PeerJS: Listening for data channel
PeerJS: Listening for remote stream
PeerJS: Setting remote description RTCSessionDescription {type: "offer", sdp: "v=0
↵o=- 5704071456554484345 2 IN IP4 127.0.0.1
↵s…slabel:ARDAMS
↵a=ssrc:2747919655 label:ARDAMSv0
↵"}
PeerJS: `negotiationneeded` triggered
PeerJS: onnegotiationneeded triggered when not stable. Is another connection being established?
PeerJS: Set remoteDescription: OFFER for: WEjC8T1TGkiFUmbu
PeerJS: Received remote stream
PeerJS: Receiving stream MediaStream {id: "ARDAMS", active: true, onactive: null, oninactive: null, onaddtrack: null…}
-- local audio track added
PeerJS: Created answer.
PeerJS: Set localDescription: answer for: WEjC8T1TGkiFUmbu
PeerJS: Generated ICE candidate for: WEjC8T1TGkiFUmbu RTCIceCandidate {candidate: "candidate:2011871526 1 udp
2122260223 192.168.44.1…431 typ host generation 0 ufrag iRsS network-id 1", sdpMid: "audio", sdpMLineIndex: 0}
PeerJS: Generated ICE candidate for: WEjC8T1TGkiFUmbu RTCIceCandidate {candidate: "candidate:963200470 1 tcp 1518280447 192.168.44.16…ptype active generation 0 ufrag iRsS network-id 1", sdpMid: "audio", sdpMLineIndex: 0}
PeerJS: Generated ICE candidate for: WEjC8T1TGkiFUmbu RTCIceCandidate {candidate: "candidate:
3144124085 1 udp 1686052607 114.136.64.2… rport 64431 generation 0 ufrag iRsS network-id 1", sdpMid: "audio", sdpMLineIndex: 0}
PeerJS: Generated ICE candidate for: WEjC8T1TGkiFUmbu RTCIceCandidate {candidate: "candidate:
3433799847 1 udp 41885439 66.228.45.110 …3 rport 6547 generation 0 ufrag iRsS network-id 1", sdpMid: "audio", sdpMLineIndex: 0}
PeerJS: ICE candidates gathering complete for: WEjC8T1TGkiFUmbu
PeerJS: iceConnectionState is disconnected, closing connections to WEjC8T1TGkiFUmbu
PeerJS: Cleaning up PeerConnection to WEjC8T1TGkiFUmbu
PeerJS: DataChannel closed for: WEjC8T1TGkiFUmbu
Thanks again for any help you can provide.