IceLink 3 Release Notes

3.1.3.309 - December 7, 2017

Bug Fixes:

  • Stripping incoming offers of SDES cryptos if DTLS fingerprints are also present fixing interop with Google Chrome 63;

3.1.3.267 - November 27, 2017

Bug Fixes:

  • Fixed a bug where ActiveX in Internet Explorer was showing black screen due to installation failure;
  • Fixed a bug in UWP due to an old NAudio.Universal.dll reference. Updated the binaries and references so that the examples build properly;
  • Fixed a bug in the OpenH264 wrapper causing an access violation when targeting x86 architectures in .NET;

3.1.3.231 - November 10, 2017

New Features:

  • Added support for SSL load balancer termination in HTTPS redirect for the Web example;
  • Exposed Connection.CreateStreamSocket and Connection.CreateDatagramSocket functions that allow implementations to modify socket factories for Ice.Gatherer;
  • Exposed Stream.LocalSend and Stream.LocalReceive flags indicating whether local peer supports sending and receiving media on a given stream and updated examples accordingly;
  • Exposed Stream.RemoteSend and Stream.RemoteReceive flags indicating whether local peer supports sending and receiving media on a given stream;
  • Exposed Stream.RemoteDirection getter indicating stream direction reported by the remote peer;
  • Exposed Stream.UseDtls setter setting a value indicating whether DTLS encryption is in use on the stream;
  • ExposedRenderDevice property on the VoiceCaptureDMO;
  • Defaulted to the front camera in web on mobile;
  • Changed Xirsys Extension to usethe global DNS address instead of US-east;
  • Modified AudioStream and VideoStream constructors to throw Exceptions when they are instantiated with no sources and sinks;
  • Added debug-level logging for cases where control frames are discarded due to lack of support by remote peer after negotiation;
  • Added new cross-platform video size querying API:
    • LocalMedia/RemoteMedia.VideoSize property and OnVideoSize event, raised when a frame is processed by the first video track
    • VideoTrack.Size property and OnSize event, raised when a frame is processed by the track;
  • Added new cross-platform video snapshot API:
    • LocalMedia/RemoteMedia.GrabVideoFrame, an async method that captures a snapshot of the next video buffer processed by the first video track
    • VideoTrack.GrabFrame, an async method that captures a snapshot of the next buffer processed by the track;
  • Added new cross-platformVideoBuffer.Convert API to convert image formats - RGB, BGR, ARGB, ABGR, RGBA, BGRA, I420, YV12, NV12, and NV21 are supported. This allows snapshots to be converted easily to a desired format for serialization without having to do complicated image conversions yourself;
  • Added new LocalMedia properties:
    • OpusConverter, the sound converter for Opus
    • OpusPacketizer, the packetizer for Opus
    • PcmuConverter, the sound converter for PCMU
    • PcmuPacketizer, the packetizer for PCMU
    • PcmaConverter, the sound converter for PCMA
    • PcmaPacketizer, the packetizer for PCMA
    • Vp8Converter, the image converter for VP8
    • Vp8Packetizer, the packetizer for VP8
    • Vp9Converter, the image converter for VP9
    • Vp9Packetizer, the packetizer for VP9
    • H264Converter, the image converter for H.264
    • H264Packetizer, the packetizer for H.264
    • ActiveAudioConverter, the activeaudio track converter
    • ActiveAudioEncoder, the active audio track encoder
    • ActiveAudioPacketizer, the activeaudio track packetizer
    • ActiveVideoConverter, the active video track converter
    • ActiveVideoEncoder, the activevideo track encoder
    • ActiveVideoPacketizer, the activevideo track packetizer;
  • Added new RemoteMedia properties:
    • OpusDepacketizer, the depacketizer for Opus
    • OpusConverter, the converter for Opus
    • PcmuDepacketizer, the depacketizer forPCMU
    • PcmuConverter, the converter forPCMU
    • PcmaDepacketizer, the depacketizer forPCMA
    • PcmaConverter, the converter forPCMA
    • Vp8Depacketizer, the depacketizer forVP8
    • Vp8Converter, the converter forVP8
    • Vp9Depacketizer, the depacketizer forVP9
    • Vp9Converter, the converter forVP9
    • H264Depacketizer, the depacketizer forH.264
    • H264Converter, the converter forH.264
    • ActiveAudioDepacketizer, the activeaudio track depacketizer
    • ActiveAudioDecoder, the activeaudio track decoder
    • ActiveAudioConverter, the activeaudio track converter
    • ActiveVideoDepacketizer, the activevideo track depacketizer
    • ActiveVideoDecoder, the activevideo track decoder
    • ActiveVideoConverter, the activevideo track converter;
  • Added new LocalMedia events:
    • OnActiveAudioConverterChange, raised when the active audio track converter changes
    • OnActiveAudioEncoderChange, raised when the active audio track encoder changes
    • OnActiveAudioPacketizerChange, raised when the active audio track packetizer changes
    • OnActiveVideoConverterChange, raised when the activevideo track converter changes
    • OnActiveVideoEncoderChange, raised when the activevideo trackencoder changes
    • OnActiveVideoPacketizerChange, raised when the activevideo trackpacketizer changes;
  • Added new RemoteMedia events:
    • OnActiveAudioDepacketizerChange, raised when the active audio track depacketizer changes
    • OnActiveAudioDecoderChange, raised when the active audio track decoder changes
    • OnActiveAudioConverterChange, raised when the active audio track converter changes
    • OnActiveVideoDepacketizerChange, raised when the activevideo trackdepacketizer changes
    • OnActiveVideoDecoderChange, raised when the activevideo trackdecoder changes
    • OnActiveVideoConverterChange, raised when the active video track converter changes;
  • Added new LocalMedia virtual methods to allow overrides:
    • CreateOpusPacketizer
    • CreatePcmuPacketizer
    • CreatePcmaPacketizer
    • CreateVp8Packetizer
    • CreateVp9Packetizer
    • CreateH264Packetizer
    • CreateSoundConverter;
  • Added new RemoteMedia virtual methods to allow overrides:
    • CreateOpusDepacketizer
    • CreatePcmuDepacketizer
    • CreatePcmaDepacketizer
    • CreateVp8Depacketizer
    • CreateVp9Depacketizer
    • CreateH264Depacketizer
    • CreateSoundConverter;
  • Added LocalMedia/RemoteMedia.OnAudioLevel and AudioTrack.OnLevel support for Safari;

Bug Fixes:

  • The onAudioLevel event was causing audio level calculations to occur with each frame, causing audio performance issues on Android, Java and iOS;
  • Fixed a memory leak in CameraSource of Xamarin.Android that caused crashes after some time. On older devices this would occur quickly and on high-end devices after 20 minutes or so;
  • Screenshare sink in Xamarin.iOS was changed to ImageViewSink instead of using default OpenGLSink in order to allow screen sharing to work;
  • TCP receiver now uses a circular buffer to account for packet fragmentation on the byte stream;
  • Codecs were not negotiated properly when native peers (Android, iOS, NET, etc) in send-only or receive-only mode were negotiating connections with non-WebRTC compliant peers (Safari 11, Edge 38, etc);
  • Fixed a bug causing connectivity to fail during longevity tests on Android;
  • Defaulted to the front camera in web on mobile;
  • There were a couple reports of echo cancellation failing (as in not working at all) in the ActiveX control since updating it to use DMO. This was resolved by setting default values for the DMO processor;
  • Ensured that web only mirrors the local preview if the camera is user-facing (facingMode==user);
  • Fixed a bug in Connection where Connection did not wait for Scheduler to shutdown potentially leaving some Scheduler tasks running for some time after Connection transitioned to the Closed or failed state;
  • Fixed a bug when multiple remote peers were connected to a local Java client. Video would flicker between the remote peers since the underlying image buffer was being updated while it was still rendering the previous image;
  • Fixed race condition in iOS and macOS examples that could occur if startLocalMedia was called immediately after stopLocalMedia;
  • Fixed a bug where certain UI tasks were not dispatched on the main thread in FMIceLinkCocoaImageViewSink and FMIceLinkCocoaLayoutManager causing random crashes to be possible;
  • Fixed a bug in TurnServer when bypass is enabled but one side prefers to use channel-data over send indications. This affects Chrome-to-IceLink connections in relay/relay mode using the same TURN server;
  • Fixed an example bug platform wide where if the remote client did not attach a view a null pointer exception occurred;
  • Fixed a bug where relay candidates discovered over TCP where assigned equivalent priorities to the relay candidates discovered over UDP, which was intermittently causing Ice transport to prefer TCP-based candidate pairs over UDP-based candidate pairs. UDP-based relay candidates now get higher priority than the TCP based ones;
  • Fixed a bug in TurnServer pass-through when a relay-to-relay connection between Chrome and IceLink uses the same TURN server;
  • Fixed a bug in iOS whereUI thread was updated from a background thread. This was producing a warning in the latest version of XCode. As best practices, setting status bar orientation should be dispatched to main thread and app status should be set through notifications;
  • ObjC example on iOS 11 were showing exception(-1) continually. This was due to the order certain properties were set in the AudioUnitSink so we were able to work-around the issue by changing the order;
  • Changed default settings for Voice Capture Source causing DMO to not work in some platforms;
  • Fixed an Android example bug that caused chat messages to be mistakenly cleared on device rotation;
  • Fixed a crash in iOS caused when using screen-share as the video source;
  • Fixed a bug where timestamp reset logging would repeat adnauseous;
  • Fixed a bug in the Android and Xamarin.Android examples where local/remote recording targeted the wrong path;
  • Fixed a bug where Stream.EncryptionPolicy was not respected for SDES encryption negotiation;
  • Fixed a bug, where updates to Stream.LocalDescription were not checked against direction capabilities of that stream allowing to declare stream directions incompatible with the source and sink setup (e.g. to declare send-receive local direction for the cases when no media sources were present);
  • Fixed a bug in Java where releasing the SoundSource could block and prevent proper shut down of local media.

3.1.2.223 - October 26, 2017

Bug Fixes:

  • Fixed a problem where hardware-encoded VP8 streams from Firefox rendered with macro-blocking.

3.1.2.198 - October 18, 2017

Bug Fixes:

  • Resolved a regression in the Srtp.Listener causing performance issues in A/V rendering.

3.1.2.187 - October 12, 2017

Bug Fixes:

  • The rebuild of libopusfm.dll and libyuvfm.dll for 3.1.2.157 accidentally added a dependency on the Visual C++ Redistributable. This has been fixed;
  • Fixed a bug where 8-byte receiver reports could be sent with a length parameter indicating only 4 bytes;
  • Updated the jitter buffer to handle cases where the remote RTP sender resets its timestamp.

3.1.2.157 - October 4, 2017

New Features:

  • WPF ImageSink has new constructors that accept a Dispatcher which will be used to create a new Image;
  • Added support for wild-card RTCP feedback attributes (i.e. `a=rtcp-fb:* nack`);
  • Upgraded JavaScript libraries to TypeScript 2.

Bug Fixes:

  • Fixed a bug where the Java-based TURN relay server was throwingintermittent Out-of-Memory exceptions when TCP connection were established. Improved efficiency of TCP Stream handling on all platforms on both IceLink client and server sides;
  • Fixed a bug where SDP offers and answers were not displayed in JavaScript;
  • Eliminated duplicate ICE candidate logging that can cause confusion when diagnosing network connectivity issues;
  • Moved build version logging to the License static constructor so it's consistently logged one time regardless of how setting/checking license keys works;
  • Fixed a logical bug that prevented license key information from being logged;
  • Fixed a potential memory leak in the examples via unregistering events when leaving session to prevent events firing too many times;
  • Fixed issue with setting strides when scaling video;
  • Fixed bug where SDP could include an RTP map for Opus at something other than 48000/2;
  • Fixed a bug where in the Web example, if pressing the Enter key instead of clicking the join button, the example would open a tab to install the Chrome extension;
  • WPF ImageSink will no longer check access using Application.Current.Dispatcher when an Image is passed into the constructor, and instead use Image.Dispatcher;
  • Fix warning message (and possible memory corruption) when shutting down a DMO source;
  • Added lock to fix crash that could happen in a lossy network;
  • Fixed a bug that would cause +[NSThread runBlock:]: unrecognized selector sent to class;
  • Added additional error logging in core and media transports;
  • Fixed a bug in SRTP Context (responsible for encryption) where null reference exceptions could cause application crush and added more detailed error logging;
  • Fixed a potential collection modified enumeration exception in Ice.Gatherer that could occur if SocketManagers were modified while enumerating;
  • MediaStream.OnProcessControlFrame now fires when RTCP is generated from lower-level transports, providing access to SRControlFrames, RRControlFrames, and SdesControlFrames being sent;
  • Fixed a bug where peers in receive-only mode were sending SRControlFrames instead of RRControlFrames;
  • Added internet permission in Xamarin.Android example to resolve name resolution error for release build.
  • Channel count in AecContext should be set to 2 in Xamarin.Android example to resolve helicopter noise on some devices
  • Fixed a race condition in Xamarin.Android example. In StartLocalMedia layoutManager was being invoked from background thread instead of UI thread which would cause a crash on slower devices;
  • Fixed a bug where error responses from TURN servers were not properly parsed preventing TURN allocations from succeeding under certain conditions, which were particularly severe with TCP connections;
  • Fixed a bug where relay candidates discovered over TCP where assigned equivalent priorities to the relay candidates discovered over UDP, which was intermittently causing Ice transport to prefer TCP-based candidate pairs over UDP-based candidate pairs. UDP-based relay candidates now get higher priority than the TCP based ones;
  • Removed redundant listeners from Xamarin.Android example as Bluetooth and headphone connection detection now happens in the AudioRecordSource.

Breaking Change:

  • Removed Error(ErrorCode) constructor. Use Error(ErrorCode, Exception) instead;
  • ImageUtility.BitmapToBuffer will always produce 24-bit RGB output, regardless of whether the input was PixelFormat.Format24bppRgb or PixelFormat.Format32bppArgb. This allows for consistent behaviour when developing video sources and pipes that interact with third-party APIs that produce inconsistent output;
  • For UWP applications, FM.IceLink.Uwp.NAudio.dll has been renamed to FM.IceLink.NAudio.dll for consistency with naming conventions for other client platforms.
  • For .NET applications, libopus-0.dll and libyuv.dll are no longer required.
  • For Xamarin.Android (including Forms) applications, libopus.dll is no longer required.

3.1.1.132 - 2017-09-20

Bug Fixes:

  • Fixed a bug where iOS Safari would display WebRTC/HTML5 video in full-screen mode instead of inline in the page;
  • Fixed a bug where remote video doesn't render in the latest version of Safari 11 on iPhone;
  • Xamarin.Android libs shipped in Libraries folder were JNI instead of non-JNI libs;
  • Xamarin.Forms.iOS libs in Examples folder were not updated from 3.1.0.121;
  • Fixed a bug where FileStream.Open crashed if attempting to write to a file without a directory prefix (filename-only instead of absolute path) which caused a crash when toggling recording in the .NET example;
  • Fixed a regression where 32bit iOS devices were crashing byadding 32-bit support to AtomicLong for iOS/macOS. Also fixed the return value of CompareAndSwap for AtomicLong/Integer.

3.1.1.124 - 2017-09-07

New Features:

  • Added Voice Capture DMO Audio Source. This uses built-in Windows AEC to provide much higher quality echo cancellation. The examples have been updated to demonstrate its usage. View the guide on Migrating to DMO for more information;
  • Added OnStarted, OnStopped, and OnDestroyed events to MediaTrack;
  • Added OnAudioStarted, OnAudioStopped, OnVideoStarted, and OnVideoStopped events to LocalMedia. This is especially useful in Chrome when screen-sharing to capture the "Stop Sharing" button-click event;
  • Added OnAudioDestroyed and OnVideoDestroyed events to LocalMedia and RemoteMedia;

Breaking Changes:

  • Fixed an issue where frames raised on different branches would conflict with each other. MediaTracks follow a depth-first frame-raise algorithm. Previously, each branch in a track could add frames that would be accessible by other branches in the track. Now each branch raises MediaFrames containing MediaBuffers ONLY from it's parent. If you have a custom media track and are concerned that this affects you, please email support@frozenmountain.com for more information.

Known Issues:

  • The Java-based TURN relay server currently has a bug causing intermittent Out-of-Memory exceptions when TCP connection are established. The issues has been addressed and will be fixed in the upcoming 3.1.2 release of IceLink.

Bug Fixes:

  • Disabled the recording indicator temporarily to avoid performance overhead of memory copies and unexpected data format changes;
  • Fixed a bug that causes a crash on iOS if the specified frame rate is out of the permitted range;
  • Fixes a bug in the Android Chat.WebSync4 example that would cause a crash if the back button was pressed before the local media had started;
  • Fixed a bug where not all STUN server IP addresses obtained via DNS resolution were used to connect to STUN servers. Previously, only the first IP address was used to obtain server reflexive and relay candidates. This caused issues when both IPv6 and IPv4 addresses were sent in response to a DNS query;
  • Fixed a bug in the Android Chat.WebSync4 example where, after rotation, long pressing the video to get to the context menu caused a crash;
  • Fixed a race condition in the iOS and macOS Chat.WebSync4 examples that could occur if startLocalMedia was called immediately after stopLocalMedia;
  • Fixed a bug causing memory leaks and phantom threads, caused by a Scheduler instance, which would not stop when Connection instances transitioned into Closed and Failed states;
  • Fixed a bug where crypto attributes were sent to another party on renegotiation when DTLS was already in use;
  • Fixed a bug where IceTransport would prematurely transition to the Disconnected state when it was still trying to establish original connectivity and had not yet timed out;
  • The active candidate pair now serializes independently of candidate pairs from gathered lists;
  • Fixed improper IPv6 address formatting in logs;
  • Fixed a bug in ICETransport, ensuring that duplicate Relay Candidates that are found are not deallocated;
  • Android and Android for Xamarin now use the In-Call volume controlinstead of the Media volume control now;
  • Improved the audio quality on Android for Xamarin. Mic or Voice_Communication mode will be dynamically selected for better performance;
  • Fixed a bug in Android Xamarin echo cancellation;
  • Fixed an issue where frames raised on different branches would conflict with each other;
  • Fixed a minor bug in DataBuffer pooling where buffers were not invalidated properly;
  • Fixed an intermittent bug, where processing SDP Crypto attributes from remote descriptions could cause a crash;
  • Fixed a bug where double-tapping to switch cameras in Android caused a crash;
  • Fixed a bug where media packets could be sent through the SRTP Transport when it was not in the Connected state;
  • Added a fallback to NAudio for the cases when Wasapi is not available;
  • Fixed a bug where the timestamp for RTP packets would roll-over at the signed integer boundary instead of the unsigned integar boundary, causing audio/video to freeze;
  • Fixed a race condition in the UWP Chat.WebSync4 example that occurred when stopping local media;
  • Fixed a potential thread deadlock that could occur in the UWP AudioGraphSink class on shutdown;
  • Fixed a memory leak in the UWP Chat.WebSync4 example which occurred because audio and video InputAvailable events were never removed from the Application instance;
  • Fixed a bug in the UWP Chat.WebSync4 example where the user could click the leave button, tearing down the conference and local media before it had been started, which could cause COM errors.

3.1.0.121 - 2017-08-10

New Features:

  • Added a GetStats() API to Connection and all subcomponents, allowing access to underlying statistical information. Available on all desktop and mobile platforms; including Chrome, Firefox, Safari and Internet Explorer web browsers;
  • Added AMD and CommonJS headers to the JavaScript SDK to support ReactJS and Node.js module naming;
  • 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;
  • Added support for scaling resolution of images passing through a LocalMediaTrack. This is useful, for example, where downscaling video resolution before streaming is helpful;
  • Added fullscreen mode to the Web Examples. You can now hover over video and click to expand;
  • Added detection for new Safari APIs. It is quite likely that Safari 11 will remove support for the legacy WebRTC API for its official release;
  • Exposed MediaStream.Local/RemoteMedia and Local/RemoteTrack to remove the need to maintain mappings of remote medias in application logic;
  • Merged down Android audio enhancements from the examples into AudioRecordSource so it no longer needs to be maintained in application logic;
  • On native platforms, MaxInputBitrate now only takes RemoteBandwidth into account when restricting Encoder bitrates. This is in an effort to match to unify the API and match how web browsers are handling Local/RemoteBandwidth properties;
  • Updated the AudioProcessing library to be able to use any arbitrary sample rate.

Breaking Changes:

  • A number of class members in Cocoa have been deprecated and will be removed in the subsequent releases. For now, these deprecated members have been renamed. Full list of the members can be found here:http://docs.frozenmountain.com/icelink3/3.1.0-cocoa-api-changes.html
  • BlueTooth permission are now required for Android. On some devices, audio is not routed to the proper output channel. In order to tackle this issue, logic has been added in AudioRecordSource to route the audio to the selected output channel - Speaker, Headphones, or BlueTooth Headset.

Known Issues:

  • Xamarin.Android audio quality is still experiencing several edge-case issues on select manufacturer/OS version combinations. The Samsung Galaxy Tab A, would experience a "helicopter noise"; some Google Nexus devices running Android 5.1 or 6.1.1 would have low audio volume; and the same Google Nexus devices would stream muted (DTX) audio streams from Opus. The Opus issue is resolved in Xamarin.Android for this release; however the above issues that were addressed for the various Android devices (noted in the Bug Fixes below), have not been ported to Xamarin.Android yet. Those changes will be in place for 3.1.1 coming out the first week of September.

Bug Fixes:

  • Resolved several issues in Android due to various hardware limitations. Some of these work-arounds already existed in the examples, but merged them all down to AudioRecordSource to simplify maintenance.Some notable device issues were that some Android devices played low-volume, others had a sound like helicopter noise, some couldn't stream audio due to various device driver and manufacturer inconsistencies. These work-arounds will be ported to Xamarin.Android in the next release;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 where the Xamarin Example crashed when long pressing on the screen to get a context menu;
  • Fixed a bug in iOS where if VideoToolbox was enabled at the same time as VPX an exception was thrown;
  • Fixed a bug causing a race condition by refactoring public lists to arrays in LogProvider;
  • Added minifyEnabled=false to the Android examples to demonstrate how to work around a Progaurd issue: during the signing of release builds the Java API could obfuscate native code, causing codecs and real-time processing libs to throw an exception;
  • 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 in Chrome 59, if the camera framerate requested didn't match the actual device's capabilities, Chrome 59 would throw a constraint error;
  • Xamarin.Android Screenshare source was throwing an NV21 format not supported error causing Screeshare not to work;
  • Fixed a bug in the Web examples where the Leave button could not be clicked when Screen Capture was selected in Chrome, but the extension was chosen not to be installed by the end user;
  • Fixed a bug where, on Android 4.4.2, Opus was setting it’s bitrate multiple times when bitrate changes occurred;
  • Fixed a bug where setting Gain on LocalMedia was not adjusting audio volume;
  • Worked around an issue where OpenH264 could not be downloaded. Cisco changed their servers so that the Content-Type is no longer set. This meant we were no longer detecting the bzip2 content type and uncompress. We’re now checking the file extension to decompress the download;
  • Fixed a bug in Android and Xamarin.Android where Opus was transmitting DTX (muted audio) on some Android Nexus devices;
  • Fixed a bug causing stop of audio transmission on iOS when audio source was changed while streaming;
  • Fixed a bug in iOS which caused crash if multiple video codecs were 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;
  • Addedpublic 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.

3.0.0.42 - 2016-10-28

  • Initial general release.