0
votes

I wanna use Ice-Lite in Android webrtc.
I want to know

  1. Is Ice-Lite a server-side component or client side?
  2. How Ice-Lite is implemented on Android?
  3. If Ice-Lite is used, do we still need the STUN server?
  4. How the ice-candidate is embedded in the SDP when Ice-Lite is used for Android?

I tried inserting a=ice-lite in SDP after c=IN IP4 0.0.0.0 and passing only the STUN server to RTCConfig but that doesn't seems to work! Also, I sent the offer and answer only after the IceGathering is complete.

Is there anything I need to do in order to implement Ice-Lite for Android?

Thanks!

3

3 Answers

2
votes
  1. Is Ice-Lite a server-side component or client side?

    Neither. ICE is independent of the "side", since it's made for p2p, everything is called "client" in the spec. However, given that it is used only for clients that have a persistent, static public IP (which is extremely rare for what you call call client in a client-server connection that runs over the public internet) it is de-facto applying only to gateway and servers.

  2. How Ice-Lite is implemented on Android?

    It is not. However, several libraries implement the specs (lib nice, ....).

  3. If Ice-Lite is used, do we still need the STUN server?

    Yes and No. You do not need a STUN server to get reflexive candidates on a client that is on a public IP (duh!), However, if the other client is behind a NAT, that other client will need a STUN, possibly TURN, server to establish the connection with the ice-life client.

  4. How the ice-candidate is embedded in the SDP when Ice-Lite is used for Android?

    The same way as any other client. Read the Specs. You need more than adding a flag in SDP to enable ice-lite anyway. Much more.

1
votes

You should read RFC 5245, which describes ICE-lite in very readable terms.

ICE-lite is expected to be a stepping stone to a full ICE implementation only. If an endpoint has a full implementation, that endpoint probably will not support ICE-lite operation.

In order for ICE to be used in a call, both agents need to support it. However, certain agents will always be connected to the public Internet and have a public IP address at which it can receive packets from any correspondent. To make it easier for these devices to support ICE, ICE defines a special type of implementation called LITE (in contrast to the normal FULL implementation). A lite implementation doesn't gather candidates; it includes only host candidates for any media stream. Lite agents do not generate connectivity checks or run the state machines, though they need to be able to respond to connectivity checks. When a lite implementation connects with a full implementation, the full agent takes the role of the controlling agent, and the lite agent takes on the controlled role. When two lite implementations connect, no checks are sent.

For guidance on when a lite implementation is appropriate, see the discussion in Appendix A.

It is important to note that the lite implementation was added to this specification to provide a stepping stone to full implementation. Even for devices that are always connected to the public Internet, a full implementation is preferable if achievable.

ICE-lite is something you would run on a server. You can get away without STUN if your server uses ICE-lite and you can configure the server to send a reachable address.

I don't think Android has an ICE-lite implementation. Android devices are expected to have changing addresses, and Android already has full ICE, so there would seem little point in having ICE-lite for Android.

0
votes

Ah Sorry, I messed up with Aggressive nomination and ICE-Lite of ICE. Following answers are for ICE aggressive nomination procedure. Just consider these as additional information. Aggressive nomination is a procedure which defines how caller should finalise the selected candidate by sending USE-CANDIDATE.

Correct answer for this post: In ICE lite procedure, client doesn't gathers all the candidates but only the local host candidate. This is basically designed for end point which is behind public IP address, when a client is behind a public IP where there is no NAT, it can connect with any other candidate even if that other end is behind Symmetric NAT. ICE-Lite doesn't require STUN/TURN server. You can not achieve this using the SDP line as ICE-Lite procedure comes first before you get the candidates. So if you don't set STUN/TURN server then it will work as ICE-Lite (though its not formal way of having ICE-lite, ICE client should have the defined way to set ICE-Full or ICE-Lite) as now it will just gather the host candidates. But if your end point is behind some NAT and other end point is out of the network then it will not work. So better if you could determine if the client is behind public IP or not.