IceLink 3 Release Notes

3.1.0.121 - 2017-08-10

New Features:

  • Exposed FM.IceLink.TrickleIcePolicy.HalfTrickle, which indicates that Trickle ICE will only be used when a client is in answering role and the peer has indicated that it supportes Trickle-Ice. This feature speeds up connectivity in the cases when support for Trickle Ice cannot be verified prior to the call establishment and, therefore, is preferred to TrickleIcePolicy.NotSupported. Continue to use TrickleIcePolicy.FullTrickle for the connections where Trickle Ice is known to be supported prior to the call establishment;
  • Exposed Stream.SdesPolicy which indicates whether SDES Crypto attributes should be sent in session descriptions associated with compatible streams (i.e. only for the Audio and Video streams). If communicating with legacy Chrome versions (i.e. Chrome 58), sending crypto attributes in the offer may cause crashes. Stream.SdesPolicy should be set to Disabled if communicating with Chrome 58.
  • Updated the AudioProcessing library to be able to use any arbitrary sample rate.

Breaking Changes:

Bug Fixes:

  • Fixed a regression in 3.0.14.119, where SCTP Cookie could not be authenticated preventing connections with DataStreams from being established;
  • Fixed a bug causing memory leak with CandidatePair objects during the ICE discovery process;
  • Fixed a bug where Icelink did not attempt binding sockets to alternative ports when a bind operation failed due to the WSAEACCES 10013 error. Previously, binding to the alternative ports proceeded only if WSAEADDRINUSE 10048 was encountered. Socket implementations in Cocoa and Java continue operating as expected;
  • Fixed a bug in TCP socket in Java, where TCP socket in server mode was not properly shut down under certain conditions, which resulted in 100% CPU load on Java-based relay servers in unnecessary threads.
  • Fixed a bug where audio was not being transmitted on some Android devices.
  • Fixed a bug causing stop of audio transmission on iOS when audio source was changed while streaming.
  • Fixed a bug causing crash if multiple codecs are enabled.

3.0.14.119 - 2017-07-07

New Features:

  • Exposed Stream.OnDirectionChange event that is raised when a change in stream direction has occurred (e.g. as a result of the direction renegotiation);
  • Exposed FM.IceLink.IcePolicy.Negotiated, which indicates that ICE connectivity checks will be conducted only if supported by the other party;
  • Exposed FM.IceLink.Sdp.MediaDescription.SupportsIce indicating whether the SDP Media Description suggests support for Ice (by evaluating whether it contains Ice Ufrag and Ice Password SDP attributes);
  • Added additional logging for UdpSocket in .NET indicating reasons for the failure to bind UdpSockets to specific addresses.

Breaking Changes:

  • Modified the names of the following enums without affecting their functionality: FM.IceLink.EncryptionPolicy.Preferred to FM.IceLink.EncryptionPolicy.Negotiated, FM.IceLink.MultiplexPolicy.Negotiate to FM.IceLink.MultiplexPolicy.Negotiated, FM.IceLink.MultiplexPolicy.Require to FM.IceLink.MultiplexPolicy.Required;

Bug Fixes:

  • Fixed a bug where SDP processing was crashing when a media stream did not contain any payload types;
  • Switched back to the SAVPF profile from SAVP profile for the Audio streams;
  • SSRC is no longer verified for the media streams where no synchronization sources were reported in the media components of the remote SDP messages;
  • RTP/RTCP multiplexing support is now assumed if no RTCP attribute appears in the remote SDP message;
  • Fixed a bug where Active Candidate Pair was not set when connectivity was re-established on the existing connections, causing "video-freezing";
  • An excess of PLC packets were generated by PCMU/PCMA on first frame in the receiver. No more;
  • SoundConverter was not re-calculating timestamps if the clock rate changed, resulting in bad audio playback at the receiver. It is re-calculating now as needed;
  • MediaRecorder (Matroska, Ogg, and Ivf) starts its timestamp at 0 now, avoiding extra calculation effort in post-processing;
  • Fixed a bug preventing establishing TCP relay sessions over Java-based TURN servers;
  • Fixed a bug in internal string processing in Cocoa, where third party Category extensions to NSString could overwrite method indexOf preventing proper string processing.

3.0.13.116 - 2017-06-28

Bug Fixes:

  • Fixed a bug where when StreamDirection was set to SendOnly, Audio/Video was not being transmitted;
  • Fixed a bug where if network connectivity was lossed for 2-10 seconds, Audio/Video/Data were not being transmitted when connectivity was re-established on prior or new active candidate pairs;
  • Fixed an issue hindering TCP connectivity over relay connections on Java and .NET platforms.

3.0.13.107 - 2017-06-26

New Features:

  • Added plugin-free Safari support for iOS 11 and Safari 11 (preview 32+);
  • MediaStream now waits for Rtp.Transport to start before setting it's InputFormats to ensure the first keyframe is not being thrown out at the transport layer, speeding up time-to-first-frame and apparent connection startup time significantly;
  • Well-known media format descriptions (RTP payload types) reported in the media lines (m-lines) of SDP messages are now parsed in the cases when RTP Map attributes containing these payload types are not present. Required for the interop with the legacy systems;
  • Candidates reported in the media and connection (i.e. m and c) lines of SDP messages are now parsed if these candidates are not reported separately in the SDP message. Required for the interop with the legacy systems;
  • Exposed Connection.IcePolicy indicating whether ICE connectivity checks are required;
  • Exposed FMIceLinkCocoaAVCaptureSource.videoConfig getter and setter;
  • Demonstrated custom signalling via ManualSignalling object in Examples on all platforms;
  • Removed DataChannels from Examples so that all platforms can interop with the Edge browser by default;
  • Exposed Stream.EncryptionPolicy indicating whether encryption is required, preferred or disabled on a given stream;
  • Exposed VideoCaptureDevice in AForge.CameraSource;
  • Connection state transitions are now logged as Info-level messages;
  • RTP Media Transport Profiles are now appropriately set in the SDP messages indicating whether encryption and feedback (e.g. NACK PLI) is used;
  • Exposed Stream.OnDirectionChange event that is raised when a change in stream direction has occurred (e.g. as a result of the direction renegotiation);
  • Reduced compile time warnings in iOS and macOS examples;
  • Added AecContext to ActiveX API.

Bug Fixes:

  • Fixed a bug, where messages transmitted over ReliableData Transport were not properly buffered prior to ReliableTransport transitioning to the Opening and Open states resulting in Connection shutting down when messages were being sent in New state, just prior to the transport being open;
  • Fixed a bug where under certain conditions switching active candidate pair that just lost connectivity led to reset of encryption transports leading to the eventual overall loss of connectivity;
  • Fixed a couple possible null-ref exceptions in RTCP Transport;
  • Fixed a bug in IPv6 where private IPs were paired with public;
  • Resolved IPv6 exceptions when ICE tries to gather candidates for special purpose (reserved) IPv6 addresses;
  • Added a fix preventing runtime exception when loading icelink.js and plugin.install was not called;
  • Special purpose IPv6 addresses were not being ignored causing exceptions when attempting to create candidate pairs with valid IPv6 addresses;
  • Resolved a NullPointerException with no exception message in ReliableChannel when attempting to sendDataBytes on a connection that is not yet connected;
  • Added null check to WebRtcConnection to avoid exception thrown when local has no tracks and remote peer joins with tracks;
  • Ensured that media format descriptions (RTP payload types names) are compared case-insensitively to ensure compativbility with Google Chrome;
  • Eliminated a race condition under which Connections could transition from Failing and Failed states to Closing and Closed states on all platforms. Failed and Closed states are terminal and no transitions from these states are possible;
  • Eliminated potential null reference exception in FM.IceLink.WebSync4.ClientExtensions in the cases when connection fails due to a locked camera;
  • Fixed iterators in TypeScript/JavaScript in audio/video mandatory constraints to resolve issue in WebRtcLocalMedia;
  • Resolved issue in WPF LayoutScale.Cover behaviour by using Grid to allow dynamic adjustment resolving issue in WPF where remote media was not being centered after canvas size changes;
  • Removing support for h.264 SingleNAL packetization mode till it can be supported properly on all platforms (VideoToolbox doesn't support fragmented NALs on iOS hardware and can not decode frames);
  • Removed CodecDelay from Matroska.AudioRecorder fixing recorder sync / delays;
  • Fixed IndexOutOfRangeException when AudioSources is empty;
  • DebugLogProvider writes to System.Diagnostics.Debug again;
  • Resolved null reference exception when calling RemoteMedia.ToggleAudioRecording if video is disabled.

3.0.12.100 - 2017-05-22

New Features:

  • Added new event listeners in Websync4 ClientExtensions to ensure that reconnections on transitions from cellular internet services (3G and LTE) to WiFi and vice versa are supported;
  • Improved VP9 Depacketizer based on latest packet format draft;
  • Added renegotiation logic demonstration to Swift 3 / ObjC Examples;
  • Added public ProtocolType TurnTransportProtocol { get; set; } to FM.IceLink.Candidate;
  • Changed the Join/Leave functionality in all Examples to from using DataChannel states to better demonstrate the use of Connection.Initializing and Connection.Closing/Failing states instead;
  • Added support for running multiple versions of ActiveX CABs side-by-side to support version control in production environments;
  • Upgraded Opus FEC algorithms to better adapt to poor network conditions and improve audio quality during severe packet loss conditions;
  • Ported manual signalling code to Java Examples;
  • Added support for XirSys v3 and v2 to FM.IceLink.XirSys;
  • Improved Android Camera performance allowing higher framerates to be captured and raised on all Android devices;
  • Improved AES performance by reducing nested calls to DataBuffer;
  • Improved RtpPacket performance by caching byte buffer reads;
  • Added support for all formats to VideoBuffer.Create;
  • Added ability to send binary data over DataChannels in IE;
  • Added ability to use Chrome Extension in Cross-Domain IFrames for Screen Share.

Breaking Changes:

  • Removed all references to MediaFormat (TFormat) in MediaDescription method signatures. Methods InsertNackPliAttribute, GetRtpMapAttribute and GetRtpMapAttributes now use string formatName, int clockRate and string formatParameters instead;
  • Modified method signature for FM.Icelink.ClientExtensions.ReconnectRemoteClient. It now includes a second parameter Connection failedConnection, which is a connection that failed and needs reconnecting.

Bug Fixes:

  • Signed DLLs for ActiveX CABs now stop "unverified publisher" prompt from being displayed multiple times for ActiveX API calls in IE;
  • Resolved a buffer issue in NAudio Sink causing poor audio quality due to buffer underruns;
  • Increased default value for TCP stream establishment and StunRequest timeout from 1,000 to 3,000 ms resolving inability to establish TCP TURN connections on long round trip times;
  • If an incoming buffer was null, Rtcp.Packet.Parse would throw an exception instead of returning null;
  • Fixed an exception when tapping back button in Android on Xamarin Example when on Video activity;
  • Resolved an issue causing dual remote views to be displayed that occurs due to local descriptions being logged prior to being fully prepared;
  • Ported Android VOICE_COMMUNICATION fix to Xamarin.Android causing various issues of low volume or background noise on some Android devices;
  • Resolved a bug in iOS VideoToolbox h.264 codecs causing random crashes when hardware failures occurred;
  • Resolved a bug in iOS VideoToolbox h.264 codecs causing green flickering to occur on all iPhone devices (this issue still occurs on iPhone 5S only and is being investigated);
  • Resolved a bug in macOS when VideoToolbox h.264 codecs used tri-planer image formats causing the video to not be rendered;
  • Resolved a bug on macOS VideoToolbox h.264 codecs when stride was used causing a striping of rendered video;
  • Added null check to avoid calling WebSocket.Close on send operations that are interrupted by a call to close the WebSocket;
  • Java can now switch screens using the changeInput method;
  • Resolved an issue where IceServerTest didn't execute callbacks in iOS/macOS;
  • Resolved a UDP Socket crash when running on Mono 5.0;
  • Java DateExtensions.getYear() returned incorrect value (off by 1900);
  • Fixed a bug causing null reference exception when answer to an SDP offer was received but connection no longer existed for that offer;
  • Fixed a bug, where CandidatePair objects were unnecessarily created on successful STUN connectivity checks and retained until Connection shutdown.

3.0.11.91 - 2017-04-30

New Features:

  • Pooled buffers and buffer subsets can now be resized as long as the operation does not require the allocation of new memory;
  • Exposed Fm.IceLink.Candidate.TurnTransportProtocol that gets or sets Transport Protocol in use by this candidate when communicating with Turn (relay) server;
  • Added LocalMedia.getView() and RemoteMedia.getView() in the JavaScript API. It is not longer necessary to create DomVideoSink or DomAudioSink objects or access audio/video tracks directly. Views can be accessed immediately without waiting for the connection to esablish. This is part of the effort to establish parity between the JavaScript and non-JavaScript SDKs;
  • Added the ability to create a RemoteMedia instance to the JavaScript API. If a RemoteMedia instance is not passed into the AudioStream or VideoStream constructors, one will be automatically created to maintain backwards compatibility. Connection.getRemoteMedia() is deprecated, but still accessible for backwards compatibility. This is part of the effort to establish parity between the JavaScript and non-JavaScript SDKs;
  • Added the ability to create new Connection, AudioStream, VideoStream, DataStream, DataChannel, and LocalMedia instances without using the Factory in JavaScript. The Factory class is now deprecated, but still accessible for backwards compatibility. This is part of the effort to establish parity between the JavaScript and non-JavaScript SDKs;
  • Upgraded WebSync libraries to 4.9.25;
  • Added source code to pregenerate DTLS certificate in Xamarin Examples to cut down connection times;
  • Added source code to JavaScript/TypeScript Example to refresh ActiveX after CAB installation to allow remote media to be rendered more fluidly;
  • Added Candidate and description logging for ActiveX;
  • Added several IObject and DRYed up the IObjectSafety constraint in ActiveX to bring API parity for the ActiveX and JavaScript with the native platforms (including, but not limited to getError() API);
  • Added generic Exception handler to UdpSocket;
  • Added support in iOS h.264 decoder for Single NALU mode.

Breaking Changes:

  • Removed AudioTrack.setRemoteDomAudioSink and VideoTrack.setRemoteDomVideoSink from the JavaScript API. This is part of the effort to establish parity between the JavaScript and non-JavaScript SDKs. The functionality of these two methods is now handled automatically within the SDK, so any lines of code referencing these methods can safely be removed.

Bug Fixes:

  • Resolved an issue where a packet could be raised out-of-order by the FEC/jitter layer;
  • Audio stream and video stream should allow null tracks in typescript;
  • Resolved an issue in the .NET SDK where a non-SocketException would not be handled by the UdpSocket receiving thread;
  • Resolved an issue in the JavaScript SDK where an error-level log message could be handled as a debug-level log message;
  • Resolved an issue in the .NET SDK where a resize of the RTP packet for contributing sources could cause an exception depending on the type of the backing DataBuffer;
  • Resolved an issue causing iOS to iOS conferences using h.264 to not render video;
  • Resolved a stride issue causing video from h.264 video streams on iOS to have skewed rendered video on some models of iPhone;
  • Resolved several audio issues on various Android OS versions and hardware causing sound not to render in some cases, volume to be low, etc. This is resolved in the Open Source Examples as there is likely further refinement needed on other hardware. For example, Samsung S7 using Android 6.x would not render audio when using speaker phone, but would on Android 7.x. Nexus 6P would play low volume on all OSes tested;
  • Resolved a logger issue where log messages longer than 2000 characters would be logged multiple times;
  • Rebuild openh264 Android, Linux, and macOS libraries fixing a segfault in Java languages;
  • Resolved an index out of bounds exception when null video buffers are passed to VideoFrames when Mute is enabled;
  • Ensured that ActiveX PluginConnection properly raises events to the proper handlers in Javascript;
  • Worked-around an issue where Chrome 39+ sends incorrect rollover counter in SRTP context;
  • Resolve an issue in RCA Crypto layer causing an exception in Unity;
  • Resolved an issue in Android.AudioRecordSource causing audio not to be rendered on some hardware when DataBuffer polling was enabled;
  • Resolved an issue where SDP Direction is missing in session descriptions, assume that direction is SendReceive;
  • Ensured that connection data in SDP media description is populated with a server reflexive candidate rather than the local candidate from the current Active pair;
  • Resolved an issue in ActiveX installer where installation would not start after uninstalling a prior CAB;
  • Resolved an issue where MediaStreams without Sources or Sinks were generating null reference exceptions on startup;
  • Fixed a bug where a Connection detects loss of connectivity and then detects connectivity regain, then it still transitions to the FAILED state. Now connection remains in Connected state. This does not affect cases where Connection is lost permanently and attempt to establish a new connection is made.

3.0.10.83 - 2017-03-31

New Features:

  • 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 lowereed 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.

Breaking Changes:

  • 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.

Bug Fixes:

  • 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 in JavaScript libraries that prevented conferences that did not have either an audio or a video stream (or both) enabled from starting up due to an error "Cannot read property 'getDirection' of undefined";
  • 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.

3.0.9.78 - 2017-03-06

New Features:

  • Added FM.IceLink.WebSync4.ClientExtensions.ReconnectRemoteClient(PeerClient) allowing user code to reconnect failed connections using existing setup. Updated examples to showcase this feature;
  • Added FM.IceLink.SessionDescription.SessionId, FM.IceLink.SessionDescription.SessionVersion exposing Origin Attributes from SDPs;
  • Added MaxPayload property to Native.cs in OpenH264 to allow MTU adjustments for SinglNAL packetization mode;
  • Renamed Xamarin Forms example to Chat.WebSync4;
  • Exposed ActiveX Mute/Unmute methods;
  • Upgraded Chrome screen sharing extension for audio support during screen sharing.

Bug Fixes:

  • Fixed a bug where competing Offers were sometimes not properly resolved resulting in Offer/Answer collisions at connection startup or at renegotiation;
  • Fixed bug in Java Server example causing icelink.key not to load;
  • Resolved bug causing ActiveX to not install in IE;
  • Fixed null reference exception when recording local preview;
  • Resolved Mono bug in RSA verifyData method causing Unity runtime exception during startup.

3.0.8.75 - 2017-03-01

New Features:

  • Support for SDP Renegotiation of MediaStream Direction;
  • Exposed SignallingState on Connection object on all platforms;
  • Exposed NonTrickleIce mode in TypeScript / JavaScript;
  • 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[] promises) that resolves when all passed in promises resolve;
  • Added MediaConfig.IsEquivalent;
  • Added StringExtensions.replace for TypeScript / JavaScript;
  • 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.

Bug Fixes:

  • 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.

Breaking Changes:

  • FM.IceLink.Sdp.Ice.NetworkProtocol is now FM.IceLink.Sdp.Ice.TransportProtocol.

Deprecations:

  • FM.IceLink.Sdp.MediaDescription.InsertMediaAttribute(FM.IceLink.Sdp.Attribute, int) is deprecated in favour of FM.IceLink.Sdp.MediaDescription.AddMediaAttribute(FM.IceLink.Sdp.Attribute).

3.0.7.70 - 2017-02-10

New Features:

  • Added pooling to Xamarin iOS video source;

Bug Fixes:

  • Updated and fixed ActiveX detection to resolve Xamarin freeze on Join;
  • Java Win_x86 Vpx no longer requires VC++ redistributable;
  • Adjusted VP8 and h.264 Depacketizers to handle cases of RtpSequenceNumber wrap-around mid frame;
  • YUV-to-RGB conversion caused rendering of images to be split into individual Red, Green and Blue planes when running the the Java examples on Windows (Merged in from 3.0.6.65 hotfix);
  • Fixed Receive-only bug in Java Example.

3.0.6.64 - 2017-02-06

New Features:

  • Async LogProviders;
  • ActiveX CAB now in Libraries and Web Example;
  • Modified some internal naming conventions to help ensure the App Store doesn't mistakenly flag certain API calls;
  • Packaged native libs into jars to simplify platform detection and deployment;
  • Added Unit, Pair, and Tuple convenience methods;
  • Updated Connection's ORTC wrappers to map to/from rtcp-fb and fmtp media attributes;
  • Beefed up the NET/Server example.

Bug Fixes:

  • Xamarin iOS audio quality has been improved due to some performance improvements in the audio source;
  • Fixed a bug in iOS where TCPSocket was using main thread;
  • Ensured that ICE Gatherer does not prematurely transition to Completed state when a SocketManager fails immediately on startup;
  • Fixed a bug where the VideoToolbox h.264 decoder was not blocking decode on pending keyframes;
  • Fixed a bug in Xamarin where enabling recording caused null reference exception in iOS;
  • Fixed console/dom log provider bug in TypeScript/JavaScript;
  • Resolved an issue which caused Java screen source to not raise frames.

3.0.5.62 - 2017-01-25

New Features:

  • ActiveX support has been added along with an example of how to build and sign your own cabs;
  • Experimental support for Unity via libraries and API docs has been added;
  • Several performance enhancements have been made for Xamarin and Mono;
  • RTP Transport is now factoring in round trip times when sending NACKs to help reduce network congestion;
  • More robust detection of connectivity loss on a given CandidatePair has been added. A particular CandidatePair is reported to have lost connectivity after 3,000 ms. A stream is reported to have lost connectivity when all the CandidatePairs remain in the lost connectivity state for 10,000 ms (this value can be chnaged via the Connection.DeadStreamTimeout interface).

Bug Fixes:

  • Resolved a bug preventing full connectivity establishment when RTP/RTCP multiplexing was disabled (for Audio and Video streams);
  • Resolved a casting issue for SRControlFrames;
  • Added support for non-zero, and unsynced audio / video source presentation timestamp start-points;
  • Fixed FEC disable bug and Opus Encoder quality/bitrate bug;
  • Resolved a bug in UI thread for Xamarin.Android;
  • OpenGLView in Xamarin.iOS is no longer throwing an exception on startup;
  • TypeScript no longer causes a crash when Video is set to false;
  • FM.IceLink.NAudio no longer causes clipping.

3.0.4.53 - 2017-01-09

Bug Fixes:

  • Ensured that ICE Gathering does not shut down when TURN allocation fails in certain fatal cases on a given socket. Instead, ICE connectivity check is still conducted for local host candidatesl
  • Ensured that fatal Socket Manager and Gatherer errors are reported to Connection when Connection fails due to fatal issues on those levels;
  • Fixed a bug causing stack overflow on macOS TURN server running on macOS Sierra 10.12.3 beta 2;
  • Fixed a bug where server reflexive candidates were not raised to Connection when prepared based upon PublicIPAddresses property of Connection. Added additional logging when creating Gatherers;
  • Resolved issue in RTCP Sender Report's RTP timestamp;
  • Resolved issue in RTCP report feedback where ReceptionReportCount wasn't being set in Sender Reports causing malformed error in some versions of Chrome.

3.0.3.48 - 2016-12-23

New Features:

  • Added support for Xamarin iOS, Android, along with examples for iOS, Android and Forms.
  • DataBuffer pooling is now enabled in the media layer. DataBuffers will now get reused to prevent Garbage Collection from running as often.
  • Added new DTLS algorithm profiles to ensure compatibility with other services;
  • Support for some atomic operations;
  • Removing SDES support from SDP offers for compatibility with Chrome 57;
  • Changed Serializer to JsonSerializer;
  • Removed LegacyCandidate and LegacyOfferAnswer.

Bug Fixes:

  • Resolved issue where RTP Timestamp was not being synchronized with first RTP packet timestamp;
  • Resolved issue where RTCP report blocks were not being sent with sender reports;
  • Resolved TypeScript build issues so latest JavaScript examples are up to date;
  • Updated .NET ScreenCaptureProvider to handle locked screens;
  • Resolved a bug where ICE failed when connecting to Firefox 50 and above due to changed ICE Candidate transport type declaration;
  • Resolved a bug where application was crashing on generation of odd-length DTLS fingerprints;
  • Updated Java UI example to ensure that application does not crash when Data Channels text box has small size.

3.0.2.47 - 2016-12-13

New Features:

  • Improved efficiency of socket error reporting;
  • Updated Android Build tools to 25.0.1 for Android example.

Bug Fixes:

  • Resolved issue where inputs were unable to be set in JavaScript/TypeScript;
  • Fixed a bug where Connection was raising Closing and Closed states twice on shutdown in JavaScript;
  • Fixed a bug where Error property of Connection was sometimes not set on transition to Failing and Failed states;
  • Upgraded TCP Socket implementation for exception when recording local preview to CocoaAsyncSocket 7.5.1 fixing issues with deallocated memory access on TCP socket shutdown;
  • Local peer-to-peer connectivity is now established when no Stun servers are specified;
  • Fixed a bug preventing from obtaining allocations from the Java-based Turn servers;
  • Resolved issue causing null reference exceptions under certain scenarios when DNS resolution failed.

3.0.1.43 - 2016-11-10

New Features:

  • Added jniLibs for win_x86, win_x64;
  • Added experimental jniLibs for linux_x86, linux_x64, armv8, and arm64;
  • Added screen sharing to iOS and Android Chat examples;
  • Added Java Server example;
  • Implemented SCTP RFC 7053 SACK-IMMEDIATELY, where SCTP transport can request acknowledgments from peer. Optimised SCTP acknowledgment generation and dispatch;
  • Internet protocol used to discover candidates is now logged for local candidates, making it easier to identify which candidates were discovered over Tcp;

Bug Fixes:

  • Resolved issue where after backgrounding and foregrounding iOS app, video was not being rendered;
  • Several bug fixes around hard disconnects of turning off and on WiFi in ongoing conference;
  • Android Chat example now keeps screen on during a call;
  • Resolved a memory leak where rtcp-mux policy was set to null on RemoteDescription;
  • Resolved video rotation issue on iOS Swift example;
  • Several UI fixes in Cocoa examples;
  • Resolved a bug causing disconnection after 30 seconds if a stream attached to Connection started with a direction of inactive;
  • Connection deadstream timeout is now enforced;
  • Fixed the issue where LocalCandidates that were raised as a part of Sdp Session Description were not raised through via the OnLocalCandidate event. Such Candidates have their Dispatched property set.