iceConnectionState failed over Android Hotspot

I wrote an app on Android that creates a signalling server on the first phone, which has Android Hotspot (AP) enabled. The other phone is connected to this AP. The app on the phones connect to this server and exchange the Offer, Answer and ICE candidates, but then the iceConnectionState goes from checking to failed and the streams don’t get exchanged.

If I connect both phones to the same local network (no Android Hotspot), the same exchange takes place and the streams get exchanged successfully. I don’t use any TURN or STUN servers.

How is the wifi network different from Android AP network and how can I find out what the reason for iceConnectionState failed is? Is there something like chrome://webrtc-internals/ in RN?

The AP connection probably has a NAT, so you’d neet at least STUN.

Still not found a solution. Other than Android AP, also Wi-Fi Direct would be a viable solution for me, but it also doesn’t work.
Is it because of the WebRTC not supporting WiFi direct by default? Please see the last post here:
https://bugs.chromium.org/p/webrtc/issues/detail?id=7708