Hi Jonas,
sorry for my late reply, I've been quite busy.
Thank you for your answer! I'll reply point by point.
1) This is for p2p application, a VoIP calling SDK
2) This is interesting, I noticed that "Ice gathering state" stays "gathering" all the time (it seems it never transitions to "complete", and this came as a surprise to me), but I never heard about "continuous gathering". I guess "continuous gathering" is the reason why ICE Restart is needed so rarely, like you said.
3) No I did NOT add an empty remote candidate (is it supposed to work e.g. on iOS? None of my attempts seemed to achieve "end of candidates" effects, but maybe I just have to try harder). In the example I reported in my first message, ICEConnectionState first goes to "Disconnected", and finally to "Failed" after a few seconds, and according to the docs this seems expected (I may be wrong here).
My main question here is around "ICEConnectionState == Failed" being a recoverable state without ICE Restart, or not. Maybe is "continuous gathering" taking effect here as well?
Thanks a lot for you time,
/Giovanni