- From: Robin Raymond <robin@hookflash.com>
- Date: Sun, 13 Apr 2014 00:00:32 -0400
- To: "public-ortc@w3.org" <public-ortc@w3.org>
ICE requires freezing for 'related' candidates between components. For example, should RTP and RTCP use different ports, you should unfreeze the RTCP candidate searches based upon the success of the RTP ports to avoid needless candidate searching. The question is to add an API call to make the freezing/unfreezing association explicit, or have some kind of magic under the hood that automatically freezes / unfreezes based upon foundation local:remote matching rules. Freezing ICE candidate searches must be possible based on foundation / component pairing. The trouble is how to correctly know the sessions are related and which is the base ICE component and which is the derived ICE component. If the local:remote ICE candidate foundation pairing match across `RtcIceTransport` sessions, you can automatically determine which `RtcIceTransport` candidate search is frozen based on a simple rule like "last constructed `RtcIceTransport` object candidate search is frozen based upon previously constructed `RtcIceTransport` where the local:remote foundations match". There's only one issue with these rules when freezing is used. While not technical required, a requirement has historically been that freezing components use the same usernameFrag / password across ICE components (e.g. RTP port and RTCP port must share the same usernameFrag/password). If we make the entire local:remote foundation pairing freezing automatic but fail to set the same usernameFrag/password we will not have the correct behaviour. Making every `RtcIceTransport` constructed using the same usernameFrag/password to get around this problem is not a good solution. So the option I can see is make freezing/unfreezing automatic / implicit based upon foundations local:remote matching rules and base the freezing upon order of construction but have the usernameFrag/password reuse based upon an explicit API call. For example, to share usernameFrag/password add a factory method to the `RtcIceListener`: ```` partial interface RtcIceListener { static ICEListener createUsingCredentialsFrom(RtcIceListener existingListener); }; e.g.: RtcIceListener rtpListener = RtcIceListener.create(); RtcIceListener rtcpListener = RtcIceListener.createUsingCredentialsFrom(rtpListener); ```` The question I have: Do people think implicit auto-freezing rules based upon foundation local:remote matching rules are a good idea? Should the freezing relationship be more explicit (e.g. explicit relationships between `RtcIceTransport` objects? Issue filed as: https://github.com/openpeer/ortc/issues/57 -Robin
Received on Sunday, 13 April 2014 04:01:02 UTC