IceLink 3.0.10 has been released!
Nicknamed "Nitro" by our product development team, this release is the amalgamation of months of work towards reducing allocations and reusing memory as much as possible in the hot-path. This results in over 80% fewer allocations on the average conference call and reduces garbage collection significantly, which in-turn, improves overall audio and video quality, improves scalability, and reduces battery consumption on mobile devices.
With Apple deprecating Swift 2.3 and removing support in the latest versions of XCode, the examples have been upgraded to demonstrate how to use IceLink with Swift 3.
There's also been several bug fixes and a few breaking changes related to NACK, FEC, and the Trickle ICE API, so take a look below if you are using custom policies in that area.
- Upgraded macOS and iOS Examples to Swift 3, working around several XCode compiler issues;
- More data buffer pooling to prevent repeat allocations of large byte buffers, reducing GC runs;
- Drastically lowered the amount of allocations on the hotpath and elsewhere, further reducing GC runs;
- Strategically forced GC to prevent pauses during critical real-time operations;
- Enabled in-memory data transfer in FM.IceLink.TurnServer implementation that bypasses UDP sockets when connectivity is established between peers where both peers have allocations on the same server (primarily occurring when both peers require TCP connectivity);
- Modified Server Example to include bypass of the STUN server's public address resolution, which is useful for local testing when deploying TURN server on a network that has restrictive firewall. It is still possible to specify fallback public IP address and port in this case if needed;
- Exposed UdpSocket.DefaultReceiveBufferSize and UdpSocket.DefultSendBufferSize that allow to set buffer sizes that the application will attempt to set by default; in the case of failure, it will progressively lower buffer size by half three times before failing;
- Exposed Sdp.MediaDescription.QualityAttribute setter and getter;
- Exposed Error.ToString() method returning a string representation of this error;
- Exposed MediaStream.NackPolicy and MediaStream.RedFecPolicy;
- Sdp.MediaDescription.SetupAttribute is now a setter and a getter for consistency with the other MediaDescription modifiers;
- Added ability to stream microphone audio in Chrome when screen sharing;
- Cached encryption contexts to prevent recreating every frame prior to transport.
- Renamed Connection.TrickleIceSupport to Connection.TrickleIcePolicy and TrickleIceSupportPolicy enum to TrickleIcePolicy;
- Removed NackConfig.DisableBuffering setter. Use MediaStream.NackPolicy instead. Exposed MediaStream.NackEnabled;
- Removed FecConfig.Disabled setter. Use MediaStream.RedFecPolicy instead. Exposed MediaStream.RedFecEnabled. Renamed FecConfig to RedFecConfig.
- Fixed ActiveX installer where CAB was not being setup properly causing page refresh in the Example;
- Fixed a bug where binding TCP and UDP sockets in Gatherer to the same port resulted in an internal exception (occurs when candidate gathering port restrictions were particularly strict);
- Fixed a bug in Web Chat Example, where reconnection method was incorrectly invoked resulting in unrecognised method call at runtime on reconnection when IceLink detected a connectivity error;
- Fixed a bug causing null reference exception when connection creation failed due to setting stream or Connection properties to illegal values on Connection startup;
- Fixed a bug where a Connection remained in Connected state despite all previously connected CandidatePairs transitioning to Disconnected state (e.g. due to the loss of connectivity);
- FEC can now properly be negotiated and started;
- VideoToolbox can now again be added back to the media chain;
- Fixed a memory leak in iOS VideoToolbox;
- Recompiled ARM Linux native libraries to provide more platform support;
- Lowered default length of SendBuffer to prevent overlapping sequence numbers when large frames are being sent.
Head on over to the Downloads page to pick up the latest!