IceLink 3.0.8 has been released!
The main feature added in this release is the ability to renegotiate the direction of media streams. This is useful for requesting remote streams to start and stop their media streams in scenarios where you would like to enable screen sharing, for example, or to hold/resume a call. To accomplish this, first call FM.IceLink.Stream.ChangeDirection(FM.IceLink.StreamDirection) and then signal the new offer/answer using FM.IceLink.WebSync4.ClientExtensions.Renegotiate(). If you're not using the WebSync4 extension you can manually signal the new offer/answer in a similar way that you would the original offer/answer. If you'd like more information about SDP Renegotiation, don't hesitate to reach out to firstname.lastname@example.org and we'll be happy to answer any questions you have.
There are also several additions to the API in this release, as well as some bug fixes related to network and media quality. Note that there is also a breaking change as outlined below along with a deprecation related to FM.IceLink.Sdp.
- Support for SDP Renegotiation of MediaStream Direction;
- Exposed SignallingState on Connection object on all platforms;
- Web example now uses responsive design to support mobile browsers;
- AES is back on software encryption after results from load testing with multiple peers;
- Media Add/Remove track methods are now virtual to allow overriding;
- Added Promise.All(Future<T> promises) that resolves when all passed in promises resolve;
- Added MediaConfig.IsEquivalent;
- Added Tag to MediaPipe/Sink/Source/Stream to assist with identification of media elements in pipeline JSON;
- Updated MediaPipe to always process through sinks that are not disabled, even if the input/output formats are identical - it's up to the pipe itself to decide whether it can bypass processing, since there are valid use cases for transforming or modifying media without a difference between the input/output format;
- Added default constructors to Opus Decoder/Encoder/Depacketizer/Packetizer;
- Added default constructors to Pcmu/Pcma Encoder/Depacketizer/Packetizer;
- Added constructor overload for AudioTrack and VideoTrack that takes an array of tracks and converts them to an AudioBranch/VideoBranch respectively, eliminating this step from being necessary in custom track-building code;
- SDP Connection and SDP Media attributes now contain ip address and port of the local candidate of the currently active candidate pair if one is set.
- Fixed the bug where connections were sometimes not removed from ConnectionCollection in ClientExtensions when connections closed or failed;
- Fixed the bug where the Gatherer does not generate an error when all the ports are in use, preventing opening new sockets;
- Fixed the video depacketizers so they no longer allow corrupt frames to go through in some scenarios;
- Android x86 libraries should now be available;
- Initial setViewScale value no longer ignored by DomVideoSink;
- macOS example now more closely follows .NET example.
- FM.IceLink.Sdp.Ice.NetworkProtocol is now FM.IceLink.Sdp.Ice.TransportProtocol.
- FM.IceLink.Sdp.MediaDescription.InsertMediaAttribute(FM.IceLink.Sdp.Attribute, int) is deprecated in favour of FM.IceLink.Sdp.MediaDescription.AddMediaAttribute(FM.IceLink.Sdp.Attribute).
Head on over to the Downloads page to pick up the latest!