IceLink 2 Release Notes

2.9.22

  • Added NET.Conference.WebRTC.Recorder example (headless peer).
  • Added Stream.SendNackBufferLength (defaults to 1000 still, but is now configurable).
  • Updated RTCP feedback clamping to work around bug in Chrome.
  • Updated RTP transport to keep outbound sequence numbers within -100/+3000 of last sequence number according to RFC.
  • Updated RTCP avoidance range to 72-85 (was 72-76) so goog-remb and other RTCP packets outside the default RFC range are handled correctly.
  • Updated ActiveX control and Java applet to honour Stream.MultiplexRtpRtcp and Stream.Direction.
  • Updated ORTC abstraction layer to honour Stream.MultiplexRtpRtcp.
  • Updated all examples to use turn.icelink.fm.

2.9.21

  • Fixed iOS remote DTLS certificate parsing.
  • Fixed potential deadlock in .NET while a connection is closing.

2.9.20

  • Fixed bug causing invalid selector error in iOS/macOS DTLS layer.
  • Updated UDP socket in .NET to increase receive performance under heavy load.
  • Updated RemoteDtlsCertificate(s) to expose byte[] instead of Certificate to support ECDSA remotes.
  • Updated RemoteAudioCaptureProvider to generate correct PresentationTimestamp for packets inserted by the packet loss concealment (PLC) layer.

2.9.19

  • Added new GCM-based cipher suites for DTLS.
  • Added Connection.RemoteDtlsCertificate(s) (set between LinkInit and LinkUp events).
  • Removed support for Windows Phone 7.
  • Removed AppTransportSecurity bypass from iOS, macOS, and tvOS examples.
  • Updated JavaScript JSON serializer to catch attempts to serialize undefined values.
  • Updated RTCP report validation to handle case where an SFU forwards an RTCP packet before an RTP packet has been sent.
  • Updated .NET WpfScreenCaptureProvider to handle security exceptions (e.g. while locking the screen).

2.9.18

  • Added JavaScript.VideoTest example.
  • Added MatroskaAudioRecorder.OpenedPath to reflect suffixed path after opening.
  • Added MatroskaVideoRecorder.OpenedPath to reflect suffixed path after opening.
  • Updated .NET ScreenCaptureProvider to handle security exceptions (e.g. while locking the screen).
  • Updated ServerCheck API to ensure OnFailure is only thrown once when an exception is thrown.
  • Updated UDP socket wrapper in .NET to catch and handle ENOBUFS.

2.9.16/17

  • Added null checks to JavaScript SDK to avoid exceptions when attempting to mute or unmute with no backing stream.
  • Fixed bug in server address/credential ordering after DNS resolution.
  • Fixed bug in iOS SDK where Xcode 8 simulator could crash when initializing the fake camera.
  • Fixed possible null reference exception in WebSocket class under load.
  • Updated .NET UDP socket handler to ignore WSAENETRESET messages (fixes strange "Socket closed" exceptions).

2.9.15

  • Fixed bug in SCTP initialization layer.
  • Updated .NET PictureBoxVideoRenderProvider to eliminate possible conflict with Windows graphics thread.
  • Updated TURN server round-robin logic to eliminate false positives on slower connections.
  • Updated remote video capture forward error correction handling to be more effective.
  • Updated default echo cancellation tail length in Android examples.

2.9.14

  • Added libraries for Xamarin.tvOS.
  • Added FMIceLinkWebRTCAudioUnitCaptureProvider.bypassVoiceProcessing/voiceProcessingEnableAGC for iOS/macOS SDKs.
  • Added FMIceLinkWebRTCAudioUnitCaptureProvider.useVoiceProcessingIO for macOS SDK.
  • Added FMIceLinkWebRTCAudioUnitRenderProvider.useVoiceProcessingIO for iOS/macOS SDKs.
  • Added FMIceLinkWebRTCAudioUnitRenderProvider.defaultGain/gain for macOS SDK.
  • Fixed a bug in JavaScript where the ?transport query parameter could be discarded on server addresses.
  • Fixed a bug in iOS where video frame rate might not be honoured.
  • Updated jitter buffer to monitor for remote timestamp resets (affects connections to FreeSWITCH).
  • Updated .NET SDK with patch for BouncyCastle 1.8.1 (affects connections with Chrome 55+).
  • Updated Java SDK with patch for BouncyCastle 1.5.4 (affects connections with Chrome 55+).
  • Updated iOS/tvOS examples for Xcode 8 and iOS 10.
  • Updated NAudioCaptureProvider to use FriendlyName instead of DeviceFriendlyName when querying DeviceNames.
  • Updated Xamarin.Android Opus/VP8 to use the new JniEnvironment.References.CreatedReference (added in Cycle 8) instead of the old hack from Xamarin (introduced in Cycle 7).

2.9.13

  • Improved TURN server round-robin logic to reduce connection time if a server is unresponsive.
  • Updated .NET SDK to use BouncyCastle 1.8.1 to fix DTLS version negotiation (affects connections with Chrome 53+).
  • Updated Java SDK to use BouncyCastle 1.5.4 to fix DTLS version negotiation (affects connections with Chrome 53+).

2.9.12

  • Fixed a bug in JavaScript where the stream direction would not be honoured.
  • Fixed a bug in Android where a race condition could cause a crash in the OpenGL rendering loop.
  • Fixed a bug in iOS where a race condition could cause a crash in the OpenGL rendering loop.
  • Updated .NET to use hardware acceleration for AES encryption if available.

2.9.11

  • Added null checks in JavaScript to mute/unmute for audio/video so if you attempt to mute a non-existent audio/video feed, it won't throw an error.
  • Fixed a bug in JavaScript ORTC candidate gathering for multiple streams.
  • Fixed a bug in JavaScript ORTC RTCP cname selection.
  • Fixed a bug in JavaScript ORTC remote "no more candidates signalling" for candidateMode.Late if more than one stream was present.
  • Fixed a bug in JavaScript WebRTC abstraction where direction was not taken into account when offering to receive audio and/or video.
  • Fixed a bug in JavaScript screen-sharing handler where webcam might be used instead of the screen after selection.
  • Updated Chrome screen-sharing extension to support async module loaders (thanks, Martin!).

2.9.10

  • Added support for including system audio with Chrome screen-sharing extension.
  • Added support for early candidate gathering in ORTC.
  • Added support for receive-only tracks in ORTC.
  • Added PacketIdHandled, LostPacketIdPlus_Handled, Get/SetLostPacketIdPlusHandled, and Handled to RTCPFbGenericNack to indicate which packets were retransmitted.
  • Added Flush() to RTCPFbGenericNack to reset the packet to an optimal form after being partially handled.
  • Fixed bug in ORTC TCP handling.
  • Fixed bug in WinRT HMAC calculations.
  • Fixed bug in WinRT IPv6 parsing.
  • Fixed bug in IPv6-based TURN server allocations.
  • Removed System.Drawing reference from Unity libraries.
  • Updated Conference.SendData/ReliableBytes/ReliableString in JavaScript SDK to support peerID-based object literals.
  • Updated SRTP encryption layer to support retransmissions of old unencrypted packets.
  • Updated Xamarin.Android examples to work around bug introduced in Xamarin.Android 6.1.
  • Updated Xamarin.Forms examples to use new renderers included in the Xamarin.Forms package.
  • Updated Xamarin.Forms screen-sharing for Android with better example code.
  • Updated Vp8Codec.cs with additional thread-safety checks.

2.9.9

  • Added examples for Xamarin.Forms.
  • Fixed bug in Xamarin.iOS/Mac screen capture provider interop with Objective-C.
  • Updated iOS screen capture provider to use drawViewHierarchyInRect instead of renderInContext when available.
  • Updated Xamarin.iOS/Mac Objective-C bindings for Opus and VP8 to use binding projects.
  • Updated internal Xamarin.iOS/Mac Objective-C bindings to use binding projects.
  • Updated Java HTTP submodule to enforce HTTP timeout manually when platform doesn't enforce it.

2.9.8

  • Added Certificate.Key to allow serialization/deserialization of private key.
  • Enabled IPv6 candidates.
  • Fixed bug where setting a mute image would cause a keyframe to be raised repeatedly.
  • Fixed bug in iOS generic NACK handling.
  • Fixed garbled audio capture in iOS.

2.9.7

  • Added Reason text to LinkDown event causes where it was not present.
  • Fixed bug in the JavaScript SDK where calling GetMedia with audio/video set to false would throw an error.

2.9.6

  • Added automatic echo cancellation for Mac SDK.
  • Added MediaStream.OnAudio/VideoEnded events to allow handling of external screen-share cancellation.
  • Added Conference.OnLinkRemoteOfferAnswer and Link.OnRemoteOfferAnswer to support pre-processing of incoming SDP messages.
  • Added Conference.OnLinkRemoteCandidate and Link.OnRemoteCandidate to support pre-processing of incoming SDP candidates.
  • Added MatroskaFile.Merge to support merging distinct audio and video containers into a single container.
  • Fixed bug where iOS OpenGL renderer could crash if pixel buffers or pixel buffer pools failed to allocate.
  • Fixed bug in Java TURN server where an incorrect cast could prevent data from flowing.
  • Fixed bug in SCTP chunk queue where a null pointer exception could be raised.
  • Fixed bug where Android could raise an ANR (Application Not Responding) exception when shutting down the local media stream.
  • Improved the efficiency and throughput of the generic NACK buffer, and increased the default size.
  • Updated external NAudio dependency to 1.7.3.
  • Updated JavaScript audio/video conference example to incorporate screen-sharing-ended event.
  • Updated JavaScript SDK to work around Chrome screen-sharing bug when Temasys adapter is loaded.
  • Updated screen capture providers to better approximate requested frame rate.

2.9.5

  • Added support for parsing Matroska files.
  • Added NET.Conference.WebRTC.Custom to demonstrate streaming both audio and video from a file (Matroska).
  • Added Certificate serialization caching to improve performance of server-side SFU/MCU implementations.
  • Added Conference.PrivateIPAddress for server applications where the private IP is known in advance and local network discovery is not required.
  • Added FMIceLinkWebRTCAudioUnitCaptureProvider.observeInterruptions to iOS SDK to disable internal interruption observation if application intends to do it.
  • Fixed bug where raising frames with Encoded set to true required Stream.BypassEncode to be set to true as well (no longer required).
  • Removed DOM dependencies from JavaScript SDK to prepare for Node.js support.
  • Updated Android audio capturer to respond to headset plug/unplug events with appropriate timestamp reset flags.
  • Updated all audio capturers to respond to stop/start events with appropriate timestamp reset flags.
  • Updated ActiveX control and Java applet with renewed code-signing certificate.
  • Updated ReceiveCandidate/ReceiveOfferAnswer to throw an exception if PeerId is null to assist with debugging.
  • Updated NACK/jitter buffer to handle timestamp rollover.

2.9.4

  • Added MatroskaAudioRecorder.
  • Added OnAudioLevel event for remote streams.
  • Updated iOS screen capture provider to use UIApplication.keyWindow instead of UIApplication.delegate.window.
  • Updated .NET screen capture provider with a Region property to support capturing a sub-section of the screen.
  • Updated JavaScript to load Java applet asynchronously so browser remains responsive.
  • Updated JavaScript to integrate with latest iteration of Temasys WebRTC plugin.

2.9.3

  • Added Link.RoundTripTime, calculated periodically using Jacobson/Karels algorithm.
  • Added server-side support for TURN channel bindings.
  • Added LinkDownArgs.Retry to support restarting a failed connection from within a LinkDown event handler.
  • Added NACK buffer flushing (instead of discarding) to support partial recovery where supported by the codec.
  • Added support for LocalMediaStream.setVideoParameters(width, height, frameRate) to JavaScript SDK.
  • Added Nuget packages to Enterprise and Enterprise OEM SDKs.
  • Fixed formatting of NTP time in SDP timing and timezone attributes.
  • Improved SCTP efficiency when initializing and setting up channels.
  • Improved TURN server performance by reducing locking and memory allocation in the hot path.
  • Updated RTP receiver to use a single NACK/jitter buffer per stream instead of per payload type.
  • Updated libopus for iOS/Mac/tvOS with link-time optimization (LTO) disabled to prevent warning/error with Xcode 7.3.

2.9.2

  • Added MatroskaVideoRecorder.
  • Added thread-safety to dead stream detection calculations.
  • Added RTCP PLI forwarding to Distributor example.
  • Added presentation timestamp to incoming buffers in the case where BypassDecode is set to true.
  • Added handling for SDP media lines with no payload types.
  • Added Link.BytesReceivedRTP/RTCP, BytesSentRTP/RTCP, Inbound/OutboundPacketsLostRTP, PacketsSentRTP/RTCP, PacketsReceivedRTP/RTCP.
  • Added Conference.OnLinkSendRTP/RTCP and Link.OnSendRTP/RTCP.
  • Added log warning if stream could not be found when sending RTP/RTCP/SCTP.
  • Added VideoStream.NackBufferLength to allow NACK configuration.
  • Fixed bug in AndroidVideoCaptureProvider where it wouldn't adapt to the size set by SetVideoParameters.
  • Fixed bug in iOS/Mac AVCaptureProvider and ScreenCaptureProvider where it wouldn't adapt to the size set by SetVideoParameters.
  • Fixed bug in iOS where video session presets were not interpreted correctly in some cases.
  • Fixed bug in Java private IP address identification.
  • Fixed possible overflow exception that could arise in Xamarin if the audio capture failed to start.
  • Fixed deserialization of "cumulative number of packets lost" values to handle negative numbers.
  • Improved SRTP/AES encryption/decryption performance.
  • Improved RTP packet serialization/deserialization performance.
  • Updated ICE algorithm to reduce the number of threads used in a server environment.
  • Updated iOS audio engine to use VoiceProcessingIO completely (improves audio playback volume and clarity).
  • Updated DNS resolution in Unity to use Dns.GetHostName instead of NetworkInterface.GetAllNetworkInterfaces (works around bug in Mono for Android).
  • Updated SDP messages to use a carriage return and line feed instead of just a line feed (fixes NACK failure in Firefox).

2.9.1

  • Added AForgeVideoCaptureProvider.UseCameraDefaultVideoResolution to bypass resolution setting.
  • Added Conference/Link.DeadStreamTimeout to allow customization of timeout interval (defaults to 15000 milliseconds).
  • Added Candidate.Host/ServerReflexive/PeerReflexive/RelayTypePreference to allow customization of ICE type preferences.
  • Added log warning when a remote SDP message results in a disabled stream.
  • Expanded interleaving and deinterleaving support in Java SDK. Android's avp8 namespace is affected and should be updated.
  • Fixed bug where unused relay candidates would not be deallocated on connection close.
  • Fixed bug in JavaScript where late TCP candidates and CandidateMode.Early could combine to disable the SDP media stream.
  • Updated AudioCaptureProvider to avoid analyzing raised audio if it doesn't "look like" raw audio.
  • Updated video capture presets to allow explicit targets and more sensible low/medium/high boundaries (640x480 and 1280x720).
  • Updated iOS UDP socket so it detects network drops explicitly (with some leeway for network 'blips').

2.9.0

  • Added support for generic NACK retransmission to improve video quality in bad networks.
  • Added DTLS bundling around BouncyCastle (.NET/Java) to improve connection reliability in bad networks.
  • Added LocalMediaStream.Audio/VideoTargetPeerIds to support targeting specific peers without a custom provider.
  • Added ScaleQuality to Win.VP8 to set filter programmatically when scaling the output image.
  • Fixed possible crash around iOS audio/video engine setup/teardown.
  • Fixed race condition in Android.Conference.WebRTC and Xamarin.Android.Conference.WebRTC examples.
  • Updated SCTP congestion management to improve transmission speed.
  • Updated RTP receiver to prevent decoding out-of-order VP8 frames.
  • Updated ICE connection logic to leave relay allocations active until the connection closes.
  • Updated Opus echo canceller to support mixed and non-mixed scenarios.
  • Updated AndroidScreenCaptureProvider and AndroidMediaProjectionCaptureProvider to filter when scaling to improve output image quality.
  • Updated AndroidScreenCaptureProvider to avoid UI thread conflict in capture loop and use cached memory to improve performance.

2.8.10

  • Added Conference.PublicIPAddress to force the generation of a custom host candidate.
  • Added OggAudioRecorder.Vendor/Title/Artist properties to override default values for Ogg header.
  • Added Link.SetKey/DeltaFecParameters methods to LinkExtensions in WebRTC module.
  • Added support for LocalMediaStream.getAudio/VideoDeviceNames in JavaScript SDK.
  • Fixed bug where using postMessage could interfere with FM.Server's postMessage listener.
  • Fixed bug where Android video capture provider could report an incorrect size when requesting non-standard camera resolutions.
  • Increased socket send/receive buffer sizes to reduce the possibility of discarded packets when bursting data.
  • Made STUN classes public instead of internal to support custom server-side behaviours.
  • Removed "clientcertnegotiation=enable" from SSL setup in the NET.Server example.
  • Updated Android preview handling to avoid possible crash while shutting down.
  • Updated code-signing certificate for ActiveX control and Java applet to SHA-2.
  • Updated Android examples to demonstrate falling back to hardware AEC (device-dependent) if software AEC is not available.

2.8.9

  • Added Windows 10 Universal libraries.
  • Added support in JavaScript for navigator.mediaDevices.getUserMedia.
  • Added VideoBuffer.ResetKeyFrame to support providing a hint to the encoder that it should make the next frame a keyframe.
  • Added LayoutPreset.CalculateLayout method to perform layout calculations without touching the UI.
  • Added IvfVideoRecorder.Suffix and OggAudioRecorder.Suffix, set after opening to the auto-appended filename suffix.
  • Added log warning when RTP data could not be parsed (but no exception is thrown).
  • Fixed bug in .NET ScreenCaptureProvider causing "lock bits" error.
  • Fixed bug in JavaScript when opening an audio conference with a local media stream that has no audio.
  • Updated screen capturing in JavaScript to support Chrome 48.
  • Updated IvfVideoRecorder and OggAudioRecorder with thread-safety checks.
  • Updated IvfVideoRecorder.Open and OggAudioRecorder.Open to return the actual file path opened.
  • Updated mute/unmute handling so a hint is passed to the encoder to generate a keyframe.
  • Updated Java HTTP transfer to allow proxies.
  • Updated BYE packet handling so no action is taken.
  • Updated RTP receiver to ignore media with unrecognized payload types.

2.8.8

  • Fixed bug where suppressed host candidates would not get cleaned up while closing a link.
  • Fixed bug where "packetizer" codec instances would not get cleaned up while closing a link.
  • Fixed bug where IceLink would incorrectly assume the controlled role in ICE if an "ice-lite" offer was received.
  • Fixed bug where a VideoRenderProvider could call Render twice for a muted image.
  • Replaced "endsWith" with ES5-compatible wrapper in JavaScript SDK.
  • Updated BouncyCastle libraries to fix connection failure when connecting to Chrome 48 with Chrome in the DTLS client role.
  • Updated Java SDK to include complete BouncyCastle library (not just what is needed by IceLink).
  • Updated tvOS examples to use the correct audio session category.
  • Updated Android examples so the armv7 audio processing libraries are not loaded on arm64 devices.

2.8.7

  • Added LocalMediaStream.OnAudioLevel event to continuously monitor microphone level (using RMS analysis).
  • Added LocalMediaStream.MutedVideoFrame to allow a custom image to be sent while the video stream is muted (non-browser platforms only).
  • Added AndroidVideoCaptureProvider.OnCameraParameters event to allow modification of camera parameters before initialization.
  • Added tvOS.Conference example.
  • Added NET.VideoTest.WPF example.
  • Added proper thread synchronization to Java event callback chains.
  • Enabled full bitcode for all iOS/Mac libraries (no more bitcode markers).
  • Fixed race condition where a network-level closure event could result in the Conference.OnLinkDown event not firing.
  • Fixed bug where suppressing candidates would not have any effect if the CandidateMode was set to Early.
  • Fixed Xamarin.Android example warnings (XA0101: @(Content) build action is not supported).
  • Removed extra "return" statements in JavaScript (causing warnings in Firefox).
  • Updated audio timestamp reset algorithm so the values always align to the packet time (e.g. 20ms).
  • Updated getUserMedia in JavaScript SDK to pass Error objects directly through to the application without modification.
  • Updated Java video capture provider to better handle late video frames (eliminates growing lag on slow machines).
  • Updated iOS/Mac Conference.WebRTC examples to better demonstrate proper shut-down events.
  • Updated Windows8 and WindowsPhone DataChannel examples to match other platform DataChannel examples.
  • Updated BouncyCastle libraries for Windows Phone SDK.

2.8.6

  • Added Opus and VP8 bindings for tvOS.
  • Added Opus and VP8 bindings for Android arm64.
  • Added log warning and automatic discard when peer-reflexive candidates with an address in the private IP range are discovered.
  • Exposed Conference.DtlsServerMin/MaxVersion and Conference.DtlsClientVersion to facilitate greater control over third-party integrations.
  • Exposed Conference.DtlsCipherSuites to facilitate greater control over third-party integrations.
  • Fixed bug in FM.Video binding for Xamarin.iOS and Xamarin.Mac.
  • Fixed bug in .NET, Java/Android, and iOS/Mac DTLS engines where retransmissions would occur too quickly.
  • Fixed bug in .NET and Java/Android where failed DTLS handshakes might not close properly.
  • Fixed bug where PresentationTimestamp was not set on incoming Audio/VideoBuffer frames.
  • Fixed memory leak in the Java SDK when using ImageUtility to convert to a BufferedImage from a VideoBuffer.
  • Fixed race condition in AES encryption engine during tear-down.
  • Fixed race condition where a chain of callbacks could be released mid-execution.
  • Fixed warnings in iOS/Mac libraries regarding being built for a newer version than being linked.

2.8.5

  • Added Audio/VideoStream.DisableJitterBuffer properties.
  • Added File.Flush method.
  • Fixed bug where candidates could be re-used over multiple connections when CandidateMode was set to Early in the JavaScript SDK.
  • Fixed bug where slice() would get called on a non-array collection in the JavaScript layout manager.
  • Updated BouncyCastle to latest stable releases for C# and Java with enhancements for faster connection establishment and improved responsiveness to retransmissions.
  • Updated fm.jni in the Java SDK to test for *86 instead of x86 when determining whether to load 32-bit vs. 64-bit native libs (thanks, Roberto!).
  • Updated IvfVideoRenderProvider/IvfVideoRecordingProvider to use presentation timestamp from RTP packet if it is available.
  • Updated IvfVideoRecorder to start writing with the first keyframe.
  • Updated LocalMediaStream.Stop to use MediaStreamTrack.Stop instead of MediaStream.Stop (deprecated) in the JavaScript SDK for Chrome/Firefox/Edge.

2.8.4

  • Added support for ECDSA-based cipher suites to DTLS. Fixes bug with Firefox 42 in the DTLS server role.

2.8.3

  • Fixed bug causing candidate pair keep-alive shut-down to lock up a thread.

2.8.2

  • Added local media recording code snippets to NET.VideoTest, Java.VideoTest, and Mac.VideoTest.
  • Added INFO-level log statement before/after DTLS certificate generation.
  • Fixed bug in FMFile implementation for iOS/Mac.
  • Fixed bug in OpusAudioRecorder for Java.
  • Fixed bug in Java SDK where removing an event handler might not have the desired result.
  • Fixed bug in OpusAudioRecorder for formats other than 48000/2.
  • Fixed race condition where closing a connection while rendering with OpenGL could cause a crash in the iOS SDK.
  • Fixed race condition where closing a connection mid-DTLS handshake could cause a crash in the iOS/Mac SDKs.
  • Fixed race condition where closing a connection mid-AES decryption/encryption could cause a crash in the iOS/Mac SDKs.
  • Fixed race condition where rogue AudioUnit rendering callbacks could cause a crash in the iOS/Mac SDKs.
  • Fixed bug where host candidates might not terminate their transaction thread in the iOS/Mac SDKs.
  • Improved performance in iOS/Mac SDK by streamlining data access.
  • Updated sending of RTCP PLI (picture loss indication) messages for better quality/bandwidth.
  • Updated SCTP reliable transmission with basic congestion control.
  • Updated Mac file transfer example to support multiple file transfer and file chunkifying.
  • Updated OpusAudioRecorder to not require sample count when writing.
  • Updated IvfVideoRecorder to not require frame width/height when writing.
  • Updated IvfVideoRecorder constructor to not require clock rate.
  • Updated FM.Video.dylib for Xamarin compatibility.
  • Updated JNI loading for Java to handle cases where temp path does not end in a file separator.
  • Updated JavaScript SDK to ignore TURN credentials with empty strings (avoids error in Firefox).

2.8.1

  • Added libraries for Apple tvOS.
  • Added MediaStream and MediaStreamTrack.OnAudio/VideoEncoded events to support writing encoded frames to disk.
  • Added Audio/VideoBuffer.Encoded property so capture providers can indicate if a frame is already encoded.
  • Added IvfVideoRecordingProvider and OggAudioRecordingProvider to Xamarin SDKs.
  • Added awaitable async overloads for asynchronous methods in Xamarin SDKs.
  • Added IvfVideoRecorder and OggAudioRecorder classes to .NET SDKs for general recording purposes.
  • Added VideoStream.DelayDecodeOnPendingKeyFrame to configure behaviour while waiting for a required keyframe.
  • Added Conference/Link.IceUsernameFragment and IcePassword properties to allow control of ICE credentials.
  • Added Stream.SynchronizationSource to allow control of SSRC parameters.
  • Added Conference/Link.Cname to allow control of CNAME parameter.
  • Added Certificate.GetSha1/256Fingerprint methods to allow early retrieval of DTLS fingerprint.
  • Added AudioBuffer.ResetTimestamp to allow audio capture providers to instruct packetizer to reset the RTP timestamp.
  • Fixed a bug preventing ArrayBuffer-based messages from being sent over reliable data channels in Chrome/Firefox.
  • Fixed a bug in SCTP heartbeat to ensure that connection is not shut down after 40 minutes of inactivity.
  • Fixed a bug in the Java VP8 wrapper's bitrate property.
  • Fixed a bug to provide more rapid error recovery on video stream packet loss / sequence violations.
  • Fixed a bug in Java SDK where the local video preview would flicker when overlaid on a remote video view.
  • Updated forward error correction algorithm to better handle WiFi packet loss.
  • Updated iOS/Mac audio capture provider to handle rogue audio callback after provider tear-down.
  • Updated iOS audio capture provider to instruct an RTP timestamp reset after an audio route change.
  • Updated local network discovery to prefer Ethernet/WiFi over phone data service.
  • Updated iOS video render provider to eliminate possibility of iOS crashing while releasing GLKView.
  • Updated mid-connection socket closure handling to minimize sudden resource consumption.
  • Updated iOS/Mac UDP socket error handling to avoid NSError.description.
  • Updated Edge ORTC TURN server handling to work around empty credential bug.
  • Updated STUN nonce/realm/software/username attributes to handle terminal null character padding.
  • Updated ActiveX control to include dynamic VP8 bitrate adjustment.
  • Various performance improvements to reduce chance of audio artifacts.

2.8.0

  • Added support for ORTC in Microsoft Edge (new in Windows 10 Insider Build 10547).
  • Added log warning when serializing media streams if there are no codecs defined.
  • Improved error reporting when using incorrect names for callback functions in JavaScript.
  • Improved performance of .NET screen capture providers.
  • Improved performance of VideoBuffer.CreateX where X is a shade of white/black.
  • Updated JavaScript audio/video device selection algorithm so browser UI to switch devices is not disabled.
  • Updated .NET screen capture providers to mute local video preview by default.
  • Updated SCTP engine to generate a warning instead of an exception when messages exceed 16KB.

2.7.7

  • Added dynamic bitrate scaling to VP8 codecs.
  • Added dynamic image scaling to .NET VP8 codec.
  • Fixed client-side bug preventing the allocation of TURN candidates.
  • Updated libssl/libcrypto to 1.0.2d for iOS/Mac.
  • Updated libssl/libcrypto with bitcode support for iOS/Mac.
  • Updated libopus with bitcode support for iOS/Mac.
  • Updated libvpx to 1.4.0 for iOS/Mac (no bitcode support yet).
  • Updated Cocoa.Opus/Cocoa.VP8 for Mac to target Mac-specific builds of libopus/libvpx.
  • Updated examples to use iOS 6 as deployment target.
  • Updated examples to bypass AST for iOS 9.
  • Removed SDP dependency from JavaScript SDK.

2.7.6

  • Fixed critical bug in JavaScript fm.icelink.webrtc.mediaStream constructor (introduced in 2.7.5).

2.7.5

  • Added WpfScreenCaptureProvider to .NET SDK to support screen-sharing in WPF applications.
  • Added AndroidMediaProjectionCaptureProvider to Android SDK to support full-screen-sharing (everything, not just the current app) in Android apps (supported in Android 5.0+).
  • Added Visual Studio 2015 solution files for examples.
  • Added MediaStream.PeerId/PeerState for remote media streams.
  • Added Conference/Link.KeepAliveInterval to control time (in milliseconds) between STUN binding packets used to keep the connection alive.
  • Added LocalMediaStream.SetVideoParameters(...) to change video width/height/frame-rate while a local media stream is active.
  • Added VideoStream.BurstyFEC flag to support switching the FEC algorithm to better handle environments with "bursty" packet loss.
  • Fixed bug in .NET SDK where a full send buffer would cause socket closure. This is now gracefully handled.
  • Updated STUN connectivity checks to run on a single thread to improve performance while connecting to peers.
  • Updated SCTP message send operation to enforce maximum chunk size of 16KB.
  • Updated dead stream detection to improve interop with Firefox.
  • Updated VP8 hardware encoder/decoder on Android so failure to initialize falls back to software encoder/decoder.

2.7.4

  • Updated keep-alives to handle case where RTP packets are blocked by an intermediary proxy.
  • Updated MediaStream.Volume control in JavaScript to apply to both audio and video HTML5 elements.
  • Updated JavaScript minification to use UglifyJS (slightly larger output, but more safe).

2.7.3

  • Added support for handling SCTP "init" collisions.
  • Fixed bug where SCTP messages over DTLS might appear delayed.
  • Fixed bug where Accept could get called twice by the JavaScript SDK.
  • Fixed invalid WebSync URL in JavaScript.Conference.WebRTC.Audio example.
  • Fixed possible crash in iOS when retrieving the localized description for a POSIX error code.
  • Updated GetMedia in the JavaScript SDK to pass through the values of audio/video to the native WebRTC stacks in Chrome/Firefox if supplied as object literals.
  • Updated X.509 certificate serialization to work around parsing bug in Chrome 46.
  • Updated Xamarin.Android examples so libaudioprocessing isn't loaded on x86 devices.

2.7.2

  • Added support for screen-sharing from all web browsers (Chrome, Firefox, Internet Explorer, Safari, etc.).
  • Added support for screen-sharing from .NET (FM.IceLink.WebRTC.ScreenCaptureProvider).
  • Added support for screen-sharing from Java (fm.icelink.webrtc.ScreenCaptureProvider).
  • Added support for screen-sharing from Mac (FMIceLinkWebRTCScreenCaptureProvider).
  • Added support for screen-sharing from iOS (FMIceLinkWebRTCScreenCaptureProvider).
  • Added support for screen-sharing from Android (fm.icelink.webrtc.AndroidScreenCaptureProvider).
  • Added support for screen-sharing from Xamarin.Mac (FM.IceLink.WebRTC.ScreenCaptureProvider).
  • Added support for screen-sharing from Xamarin.iOS (FM.IceLink.WebRTC.ScreenCaptureProvider).
  • Added support for screen-sharing from Xamarin.Android (FM.IceLink.WebRTC.AndroidScreenCaptureProvider).
  • Added source code for Chrome/Firefox screen-sharing extensions.
  • Added LocalMediaStream.VideoWidth/VideoHeight to allow you to access the actual width/height of the video frames being captured locally.
  • Added MediaStream.VideoWidth/VideoHeight to allow you to access the actual width/height of the video frames arriving from remote peers.
  • Added Link.RemoteVideoWidth/RemoteVideoHeight as a shortcut to access the actual width/height of the video frames arriving from remote peers.
  • Added VideoBuffer.Format with new VideoFormat enumeration.
  • Added VideoBuffer.FourCC to provide FOURCC value representing VideoFormat.
  • Added more extensive/helpful messages to the log output when a link times out.
  • Added additional string descriptions to known TURN server responses.
  • Added support for testing TURN servers to CheckServer API.
  • Added file transfer examples using reliable data channels for .NET and Mac.
  • Added check to prevent repeat "dead stream detected" messages in the logs.
  • Added additional validation checks to outbound RTCP messages to prevent mistakenly supplying the wrong SSRC.
  • Added some extra guards around starting and stopping the connectivity-check and keep-alive thread if the link goes down while initializing.
  • Added AndroidAudioRenderProvider.DefaultAudioStreamType (static) and AudioStreamType (instance).
  • Added error message to logs if create/accept operation fails for some unexpected reason.
  • Added support for side-by-side installations of 32-bit and 64-bit ActiveX controls from the same release.
  • Added support for "not mirroring" the iOS local video preview.
  • Fixed bug where connectivity checks might fail due to a missing peer username/password.
  • Fixed bug in Chrome screen-sharing extension.
  • Fixed missing "stride" property in video planes raised by iOS video capturer on the simulator.
  • Fixed bug where OpenSSL might crash when initializing on Mac.
  • Fixed bug where empty strings were not handled correctly by Chrome/Firefox clients.
  • Removed external DTLS retransmission layer.
  • Removed JNI references to GlobalLayout in Xamarin.Android SDK.
  • Updated Java/Android examples to use String.equals instead of == when WebSync extension is not used.
  • Updated JavaScript.Conference.WebRTC example to allow screen-sharing.
  • Updated ImageUtility.BufferToBitmap (.NET SDK) to use ReadWrite instead of ReadOnly.
  • Updated JavaScript SDK to use new WebRTC API for iceServers and createOffer constraints (with fallback to legacy-style) to avoid warnings in Firefox.
  • Updated iOS/Mac UDP socket implementation so EADDRNOTAVAIL (49) error does not close the socket.
  • Updated SCTP interop error reporting when connecting from native IceLink clients to Chrome/Firefox clients.

2.7.1

  • Added ReliableDataType to JavaScript SDK.
  • Added ReliableDataChannel constructor overloads to cover common use cases.
  • Added Conference.CanSend and Conference.CanReceive automatic properties based on Stream.Direction values.
  • Added MediaIndex to LinkReceiveRTPArgs, LinkReceiveRTCPArgs, and LinkReceiveSCTPArgs.
  • Added RTCP APP packet validation.
  • Fixed case where "dead stream" could be raised without DeadStreamDetected set to true.
  • Fixed case where "relay failure" could be raised without RelayFailureDetected set to true.
  • Fixed iOS/Mac bug where relay connections might fail if private and public candidates are suppressed.
  • Fixed regression in JavaScript where RTP-based (unreliable) data channel events were not registered for non-controlling clients.
  • Updated DTLS message parsing to bundle flights in .NET/Java (reduces time to connect).
  • Updated DTLS retransmission logic to execute more frequently (reduces time to connect).
  • Updated WebSocket implementation to properly handle case where server indicates support for WebSockets but returns a 200 OK handshake response.
  • Updated instructions in prompt for Java applet in Safari.
  • Updated log statements to include SDP media type when describing a stream.
  • Updated JavaScript so JoinConferenceArgs.UnlinkExistingOnUserJoin and UnlinkOnUserLeave default to true (was false in 2.7.0).
  • Updated JavaScript so LeaveConferenceArgs.UnlinkAllOnSuccess default to true (was false in 2.7.0).
  • Removed WebSync domain key from examples (avoids issues when connecting to Community edition server).

2.7.0

  • Breaking Change: SCTP stack is not backwards-compatible with previous releases. This was necessary to support Google Chrome and Mozilla Firefox interop.
  • Added ReliableDataStream/ReliableDataChannel for all platforms.
  • Added DefaultVideoSource to support screen-sharing in Google Chrome and Mozilla Firefox (with extensions).
  • Added Conference.Link overload with new parameter "unlinkExisting" to control whether an existing link should be dropped in favour of a new one.
  • Added JoinConferenceArgs.UnlinkExistingOnUserJoin to control whether an existing link should be dropped in favour or a new one when a remote peer joins the channel.
  • Added JoinConferenceArgs.UnlinkOnUserLeave to control whether an unlink should be initiated when a remote peer leaves the channel.
  • Added LeaveConferenceArgs.UnlinkAllOnLeaveSuccess to control whether an unlink should be initiated to all remote peers when the local client leaves the channel.
  • Added additional memory barriers around codec destruction to avoid possible race condition in .NET and Java (thanks, Razor!).
  • Added support for device selection via audioDeviceNumber/videoDeviceNumber in Chrome.
  • Fixed bug where SCTP data chunks bundled with SCTP control chunks were not properly processed by the internal SCTP stack.
  • Fixed bug where Conference-level events might raise inconsistently with Link-level and Stream-level events.
  • Fixed possible deadlock condition when restarting audio capture after a route change.
  • Fixed memory leak in Android (and Xamarin.Android) Opus JNI bindings (PLC packet handling).
  • Fixed bug where Chrome/Firefox might not get notified of local SDP modifications.
  • Removed post-connection inactive candidate closure (unreliable).
  • Removed AVAudioSessionCategoryOptionMixWithOthers from iOS examples (causes issues with interrupt notifications).
  • Updated all DataChannel examples to demonstrate reliable data channels with an option to control order-of-order delivery.
  • Updated audio thread priority from Highest to AboveNormal to avoid thrashing with several renderers active at the same time.
  • Updated SCTP stack to handle unsupported SCTP chunk types.
  • Updated SCTP stack to optimize SCTP session establishment, application data processing and SCTP chunk serialization.
  • Updated SendRTP/RTCP/SCTP to return immediately if the link is in the process of closing (thanks, Razor!).
  • Updated SDP description for SCTP-based streams for compatibility with Chrome/Firefox.
  • Updated SCTP and reliable data channel packet checksum calculation for compatibility with Chrome/Firefox.
  • Updated UDP sockets in .NET to be non-blocking to improve performance.
  • Updated UDP sockets in iOS/Mac to use GCD to improve performance.
  • Updated UDP sockets in iOS/Mac to handle send-buffer overflows and log unexpected socket error codes.
  • Updated UDP sockets on all platforms to increase send-buffer size.
  • Updated AMD headers in JavaScript SDK to support module naming.

2.6.4

  • Added AMD/Node dependency mappings to JavaScript modules.
  • Added automatic resampling to Java audio capture if preferred format is not supported by device.
  • Added automatic resampling to Android audio render if preferred format is not supported by device.
  • Added Windows 8.1 libraries.
  • Added Windows Phone 8.1 libraries.
  • Added Windows Phone Silverlight 8.1 libraries.
  • Added Windows Phone 8.1 Portable libraries.
  • Added AudioStream.OutgoingDelayPacketMaximum/OutgoingDelayPacketProbability/OutgoingDropPacketProbability. (Deprecated AudioStream.DropPacketProbability/DelayPacketMaximum/DelayPacketProbability.)
  • Added AudioStream.IncomingDelayPacketMaximum/IncomingDelayPacketProbability/IncomingDropPacketProbability.
  • Added VideoStream.OutgoingDelayPacketMaximum/OutgoingDelayPacketProbability/OutgoingDropPacketProbability. (Deprecated VideoStream.DropPacketProbability/DelayPacketMaximum/DelayPacketProbability.)
  • Added VideoStream.IncomingDelayPacketMaximum/IncomingDelayPacketProbability/IncomingDropPacketProbability.
  • Added Conference.DisableAutomaticReports to disable the automatic sending of sender/receiver reports (for forwarding use case).
  • Added support for parsing unknown RTCP packet types.
  • Added FecRedPacket.GetPayloadTypes and FecRedPacket.ReplacePayloadTypes (for forwarding use case).
  • Added NegotiatedStream to LinkReceiveRTP/RTCP/SCTPArgs.
  • Fixed bug in iOS/Mac SDK where NSCondition could be deallocated while in use.
  • Fixed bug in JavaScript SDK where Firefox wouldn't respond to width/height request in call to get local media.
  • Fixed bug in WebSocket client to handle WebSocket servers that only support small frame sizes.
  • Fixed bug in outbound connectivity checks to eliminate case where exception is thrown (.NET/Java) or remote agent responds with 401 Unauthorized (iOS/Mac).
  • Fixed bug where SCTP outbound processing queue might throw an exception when the socket is closed.
  • Removed initial (blank) sender/receiver report after DTLS negotiation to fix compatibility with Voice Elements.
  • Updated RTP parsing engine to gracefully ignore RTCP packets that happen to look like RTP packets from the first few bytes.
  • Updated interpretation of PercentLossToTriggerFEC equal to 0 such that FEC is activated automatically (no packet loss required).
  • Updated iOS/Mac audio route change logic to handle audio session category changes while in a conference.
  • Updated iOS examples to default to the speaker and allow Bluetooth, setting the audio session category immediately before the call to GetMedia as a best practice.
  • Updated iOS/Mac SDK deployment targets to iOS 6.0 and Mac OS X 10.7 to avoid linker warnings in Xcode 7.

2.6.3

  • Added AsyncException.Rethrow property to control the re-throwing of exceptions in application code callbacks.
  • Added support for Arabic locales in Java string formatting.
  • Fixed visual artifact in .NET local video preview when mirroring is enabled.
  • Fixed RTCP SDES parsing bug that caused Firefox connections to fail shortly after establishment.
  • Updated AsyncException so it never re-throws ThreadAbortException.
  • Renamed JNI.Opus and JNI.VP8 namespaces from fm.jni.opus to jopus and from fm.jni.vpx to jvpx.

2.6.2

  • Added armv7s slice for iOS libraries.
  • Added RTCP sender description parsing.
  • Added RTCP sender description to outgoing RTCP compound packets.
  • Added support for parsing SSRC media lines in SDP messages.
  • Added CNAME property to outbound SDP messages for legacy compatibility.
  • Added Conference.OnLinkLocalAddresses and Link.OnLocalAddresses to allow removal/reorder of detected IP addresses.
  • Added automatic handling of call interruptions in iOS libraries.
  • Exposed Conference.OnLinkReceiveSCTP.
  • Fixed bug where Conference.OnLinkDown could be raised prior to Link.OnDown.
  • Fixed internal null reference exceptions in IceLink core.
  • Fixed bug where exception would be thrown if private candidates were suppressed but relay candidates were allowed.
  • Fixed error in RTCP interarrival jitter calculation.
  • Fixed bug in Windows 8 TCP socket wrapper.
  • Fixed bug in Windows 8 timeout timer.
  • Updated iOS/Android/Mac/Java SDKs so "add" event methods return a callback that can be passed into "remove" event methods.
  • Updated Xamarin.iOS.Opus and Xamarin.Mac.Opus to accept null values when decoding (for Opus PLC).
  • Updated link initialization code to close any inactive candidates after a connection is established.
  • Updated Android audio/video capture/render delegate cleanup.
  • Updated Android AEC/AGC/NS audio effect cleanup to avoid error on Lenovo Android devices.
  • Updated Android OpenGL rendering to support a wider range of image widths with improved efficiency.
  • Updated VideoBuffer width requirement to "divisible by 2" instead of "divisible by 8".
  • Updated outbound RTCP handling to automatically set required properties for PLI/BYE messages.
  • Updated Windows Phone and Windows 8 examples.
  • Updated iOS examples to route audio to speaker by default.

2.6.1

  • Fixed bug in iOS/Mac SDKs where NSCondition could be deallocated while in use.
  • Updated DTLS engine to guarantee proper retransmissions near the end of the handshake.
  • Updated iOS/Mac SDKs to use weak references for callbacks to prevent retention cycles.
  • Updated Android video capture to use continuous auto-focus if supported by the device.
  • Updated Android.Conference.WebRTC example with correct native libraries.
  • Updated Xamarin.Android examples to eliminate crash in Encoder.
  • Updated Xamarin.iOS examples to work around issue in the latest version of Xamarin Studio.
  • Updated Xamarin.iOS and Xamarin.Mac audio/video libraries for parity with native SDKs.

2.6.0

  • Added support for in-band forward error correction (FEC) to all Opus codec wrappers.
  • Added AudioBuffer/VideoBuffer.PreviousBuffer(s) to support in-band forward error correction (FEC).
  • Added AudioStream/VideoStream.BypassEncode/BypassDecode to control codec usage.
  • Added AudioStream/VideoStream.DelayPacketProbability/DelayPacketMaximum to simulate bad networks.
  • Added AudioStream.DisablePLC to disable packet loss concealment (PLC) for incoming audio.
  • Added VideoStream.DisablePLI to disable picture loss indications (PLI) for incoming video.
  • Added MediaStream/MediaStreamTrack.DisablePLC to disable packet loss concealment (PLC) for individual audio streams/tracks.
  • Added MediaStream/MediaStreamTrack.DisablePLI to disable picture loss indications (PLI) for individual video streams/tracks.
  • Added AudioStream/VideoStream.JitterBufferLength/JitterBufferMaxLength to control jitter buffer length in milliseconds.
  • Added AudioPadep.DisableTimestampReset to disable audio timestamp resetting.
  • Added Server.DefaultAllocateLifetime/MinAllocateLifetime/MaxAllocateLifetime/ForceDefaultAllocateLifetime.
  • Added Server.DefaultRefreshLifetime/MinRefreshLifetime/MaxRefreshLifetime/ForceDefaultRefreshLifetime.
  • Added AVCaptureProvider.Device/Session to provide access to the underlying AVCaptureDevice/AVCaptureSession objects in the Cocoa SDKs.
  • Added Stream.DisableKeepAliveThread to support massive client generation for load testing.
  • Added additional handling to DTLS engine to handle mid-connection closure.
  • Added additional handling to DTLS engine for late messages.
  • Added missing crypto library to Java applet.
  • Fixed bug in WPF when mirroring the local video preview and initializing on a background thread.
  • Fixed calculation error in RTCP reports if initial packets are out of order.
  • Fixed bug in RTP sequence number delta comparison (off by one at boundary).
  • Fixed bug preventing ReachedServer from being set to true when using CandidateMode.Early.
  • Fixed bug in virtual NAT mapping logic in the Cocoa/Java SDKs.
  • Increased UDP receive buffer size at the socket-level for iOS/Mac and Java/Android.
  • Updated video picture loss indication logic to reduce bandwidth and improve sequence violation detection.
  • Updated audio packet loss concealment logic to use waveform estimates where available.
  • Updated client-side TURN allocation refresh/create-permission logic to stop gracefully when component is closed.
  • Updated client-side TURN deallocate logic to better handle 437 responses.
  • Updated client-side TURN allocate logic to better handle 437 responses.
  • Updated client-side TURN connection logic to deallocate unused relay candidates after a connection is established.
  • Updated Dynamic objects so cloning can never run into "collection modified" exception.
  • Updated built-in JSON serializer/parser to improve performance.
  • Removed AudioStream/VideoStream.RandomizePacketOrder (replaced with AudioStream/VideoStream.DelayPacketProbability/DelayPacketMaximum).
  • Removed Stream.JitterBufferDelay (replaced with AudioStream/VideoStream.JitterBufferLength).

2.5.13

  • Added video frame rate logging.
  • Added VideoStream.DisableFEC to permit permanent disabling of forward error correction for backwards-compatibility.
  • Added automatic detection of audio timestamp drift with absolute reset to "snap" back to proper synchronization with video.
  • Added AudioPadep.TimestampResetInterval to configure amount of drift allowed before resetting audio timestamp.
  • Fixed bug in Java SDK with parsing of SDP RTCP feedback attribute.
  • Fixed bug preventing SCTP connections without an explicit SCTP channel count.
  • Fixed bug causing video to freeze in remote Firefox peer if FEC was activated locally.
  • Increased UDP receive buffer size at the socket-level for .NET.
  • Increased default echo cancellation tail to 300ms in Android examples.
  • Updated DTLS client in .NET and Java to use 1.0 for backwards-compatibility with previous versions.
  • Updated basic audio packetizer to set marker bit to false per RFC guidelines.
  • Updated audio engine to skip automatic sequence number assignment if already assigned by packetizer.
  • Updated forward error correction to avoid out-of-range exception.
  • Updated ServerCheck API to use all available IP addresses.
  • Updated log statements throughout SDK to increase clarity.
  • Updated video forward error correction to reduce frequency of RTCP PLI messages.
  • Renamed RemoteVideoRenderProvider.FecEnabled to FecActive to avoid confusion with DisableFEC.
  • Removed RTCP generic NACK feedback parameter from outgoing SDP offers/answers (NACK PLI feedback parameter remains).

2.5.12

  • Added RTCP feedback parameters to outgoing SDP offers/answers in case remote side requires them to support negative acknowledgement.
  • Added LinkDownArgs.RelayFailureDetected flag, set to true if TURN relay fails mid-conference.
  • Added Server.PublicIPAddress to help STUN/TURN servers bound to a private IP address behind a 1:1 NAT.
  • Updated .NET UDP socket wrapper so unsupported control parameters don't cause issues on Mono.
  • Updated server initialization code to handle cases where one address won't bind but another will.
  • Updated DNS resolution so that IP addresses can never fail to resolve.

2.5.11

  • Added additional error handling to audio/video stream events.
  • Fixed bug in Android SDK where UnmuteVideoPreview wouldn't do anything.
  • Fixed bug in all SDKs where TURN allocation failures might log after a link-down event.
  • Fixed bug in Java SDK where FEC processing might fail.
  • Fixed memory leak in WebSync extension.
  • Updated DTLS to 1.2. (Additional dependency on crypto.dll for .NET-based platforms.)
  • Updated Android audio rendering engine to smooth out audio playback and eliminate lag.
  • Updated Android video processing to permit muting the video preview independently of the outgoing stream.
  • Updated SDP candidate parsing to handle additional formats.
  • Updated SDP answer to use send-only or receive-only in media description if incoming offer is receive-only or send-only.
  • Updated SDP answer parsing to assume active if setup attribute is not present.
  • Updated X.509 certificate parsing to accommodate certificates without a version but with extensions.
  • Updated connection logs to eliminate some of the more verbose line items.
  • Updated TURN client processing to only attempt TURN allocations if a username/password is present.
  • Updated .NET UDP socket to ignore ICMP "connection reset" messages.
  • Updated .NET TCP socket to include additional error handling.
  • Updated DNS logging to indicate which host name resolved to which IP address.
  • Updated TimeoutTimer to accept negative values (indicates infinite timeout).
  • Updated forward error correction to ignore first couple reports.
  • Updated Android/iOS/Mac core audio/video logging to write to log provider.
  • Updated AndroidLogProvider to include exception details in message.
  • Removed AndroidAudioRenderProvider.MaxQueueLengthMillis (no longer applicable).

2.5.10

  • Added forward error correction (FEC) for VP8 video streams.
  • Added experimental support for SCTP streams between IceLink clients.
  • Added AudioVolume propery to MediaStream.
  • Added Get/SetRemoteAudioVolume methods to Link.
  • Added Volume property to AudioCaptureProvider/AudioRenderProvider.
  • Added dynamic/runtime QoS adjustment for VP8 encoder based on RTCP reports in all examples.
  • Added workaround for bug in Huawei Y530 audio engine (prevented audio capture on device).
  • Added additional logging in JavaScript when an exception is thrown in a callback.
  • Added server check for private IP addresses when initializing (will generate warning).
  • Added support for CandidateMode.Early and MultiplexRtpRtcp in Chrome/Firefox.
  • Added Stream.CreateRtpStream and Stream.CreateSctpStream shortcuts for creating RTP/SCTP streams.
  • Added Stream.SctpProtocol, Stream.SctpPort, Stream.SctpChannelCount, and Stream.SctpMaxMessageSize properties for SCTP configuration.
  • Added VideoStream.PercentLossToTriggerFEC (defaults to 10).
  • Added Certificate.GenerateCertificate overload that accepts an RSA key to support third-party RSA keys in IceLink conferences.
  • Added Success property to AllocateInfo, ConnectInfo, ConnectionBindInfo, CreatePermissionInfo, and RefreshInfo for server events.
  • Updated audio receiver engine to better handle out-of-order and dropped packets.
  • Updated Mac video preview with optimizations to remove memory copying.
  • Updated .NET, Java, and Mac video previews with optimizations for mirroring.
  • Updated references and cleanup code to eliminate memory leaks in iOS/Mac.
  • Updated server to automatically bind to multiple IP addresses.
  • Updated Xamarin.Mac SDK for compatibility with current release.
  • Fixed bug in DTLS negotiation when offering to an ICE-lite client.
  • Fixed bug in X.509 certificate parsing to account for certificates without a version field.
  • Fixed bug in JNI handle ownership for Xamarin.Android Opus decoder and echo cancellation wrappers.
  • Fixed bug where relay usernames/passwords/realms were not randomized with server addresses when RandomizeServers was set to true.
  • Fixed bug where iOS video might not stop if the device is rotated while the local media stream is being stopped.
  • Fixed bug where ActiveX control and Java applet would not mute/unmute the video preview when the outgoing video stream was muted.
  • Fixed bug where ActiveX control and Java applet would not respond to requests to mute/unmute the remote stream.
  • Fixed bug when rendering video from multiple video streams in a single conference.
  • Fixed bug in SendInfo for server 'send' event (Allocation was not used).
  • Fixed bug where Android remote video would appear black when using LayoutScale.Cover or LayoutScale.Stretch.
  • Increased video quality in all video-based examples.
  • Removed ManagedMonitor. Replaced with ManagedLock and ManagedCondition.

2.5.9

  • Added RTCP report logging to iOS/Mac examples.
  • Added intermediate certificate to ActiveX control signing.
  • Fixed bug in ActiveX control and Java applet that prevented relay username/password/realm from passing through to the plug-in from JavaScript.
  • Fixed bug in Android software acoustic echo canceller that caused a crash on some devices.
  • Fixed bug in JavaScript SDK that rendered LayoutScale.Cover as LayoutScale.Contain in some cases when using Firefox.
  • Updated iOS and Android OpenGL renderers to support transparency.
  • Updated iOS OpenGL renderer destruction to wait for the last rendering pass to complete.
  • Updated WebSync extension to bypass user lookup if the user ID isn't present in a received message.
  • Updated SDP offer/answer to include RTP port in m-line when using CandidateMode.Early.

2.5.8

  • Fixed bug that could cause TCP socket failure on iOS/Mac.
  • Fixed AudioStream/VideoStream initialize bug in JavaScript.
  • Updated socket closing procedure to eliminate possible recursive loop.

2.5.7

  • Added software-based acoustic echo cancellation for Android and Xamarin.Android.
  • Added Xamarin.Mac.Conference.WebRTC example.
  • Added GetRemoteVideoControl(index) to LinkExtensions to support video controls for multiple video streams.
  • Added StreamIndex to stream event arguments.
  • Added RTCP report logging to Android/Java examples.
  • Added x86 native libraries for Android and Xamarin.Android to improve performance on x86-based devices.
  • Added Gain/DefaultGain properties to audio capture/render providers for Mac and Xamarin.Mac.
  • Added AudioMixer to Java and Mac libraries.
  • Fixed bug in iOS and Xamarin.iOS that caused a crash when backgrounding the app while initializing a video conference.
  • Fixed bug in Android and Xamarin.Android that caused the local video preview to appear upside-down on some devices.
  • Fixed bug in OggPage segment table that could cause choppiness in recorded audio output. (Thanks, Martin!)
  • Updated Opus JNI library for Android and Xamarin.Android to reduce memory copying and improve performance.
  • Updated audio engine for iOS and Xamarin.iOS to better handle buffer overrun/underrun scenarios.
  • Updated audio engine for Mac and Xamarin.Mac to use AudioUnit framework for improved performance and reliability.
  • Updated StreamFormat.FindFormat to test for null values.
  • Removed SDES from offer when DTLS is enabled.

2.5.6

  • Added acoustic echo cancellation to all .NET examples (Win.AudioProcessing).
  • Added AudioBuffer.Clone method to support custom AudioBuffer types when creating new audio buffers internally.
  • Added Stream.Direction to support explicit intentions (a=sendrecv/sendonly/recvonly/inactive).
  • Added Stream.MultiplexRtpRtcp property (defaults to true) to support demuxed RTP/RTCP.
  • Added PercentLost property to RTCPReportBlock.
  • Added Usage/Conference/Link properties to Codec class.
  • Added instance-level Gain and static-level DefaultGain properties to capture/render providers in iOS SDK.
  • Added non-string detection in JavaScript SDK to help alert to situations where non-strings are passed into string parameters.
  • Fixed bug in Xamarin.iOS audio capture whereby changing the audio route would cause audio frames to be discarded.
  • Fixed possible NullReferenceException in ServerCheck.
  • Updated SDP offer/answer to include actual IP address/port in c-line and a=rtcp-line when using CandidateMode.Early.
  • Updated AudioCodec chunking algorithm to use AudioBuffer.Clone instead of direct AudioBuffer constructor.

2.5.5

  • Removed dangling Log statement from fm.video in Java (was causing crash in Xamarin.Android).

2.5.4

  • Added experimental VP8 hardware encoding/decoding to Android (disabled by default).
  • Added null check to Xamarin.Mac capture providers to handle ungraceful closes.
  • Fixed bug in WebSync extension that would cause some leave notifications to not fire.
  • Fixed bug when creating data channels in Internet Explorer.
  • Fixed bug in NET.VirtualTest example.
  • Fixed bug that prevented Java classes from appearing in the documentation.
  • Fixed bug in Android and Xamarin.Android SDKs that caused the local video preview to appear upside-down on the new Nexus 6.
  • Updated RTP timestamps for video to improve accuracy (addresses video lag in Chrome).
  • Updated SHA-1 and SHA-256 hashing algorithm code to work around bug in Mono.
  • Updated Xamarin.Mac examples by removing periods from assembly names to work around Xamarin.Mac Unified API bug.
  • Updated Xamarin.Mac native dynamic libraries to include 64-bit slices for 64-bit applications.

2.5.3

  • Added ActiveX filtering detection to JavaScript ActiveX support detection algorithm.
  • Added synchronization around OpenGL cleanup on iOS.
  • Fixed bug that could cause the iOS audio renderer to crash when changing the audio route.
  • Fixed bug that prevented ActiveX controls from being signed.
  • Fixed bug in Windows 8 video chat example.
  • Fixed bug where DNS might resolve to an empty array on iOS.
  • Updated Xamarin.iOS and Mac SDKs to eliminate compatibility issues with upcoming Xamarin release.
  • Updated WebSync extension to eliminate any possibility of unhandled exceptions during join/leave operations.
  • Updated TCP socket implementation on all platforms to support additional features.
  • Updated Java.Server example to support running as a background service.
  • Updated NAudio to 1.7.2.

2.5.2

  • Breaking Change: Audio packetization requires PacketTime parameter. When calling Packetize from an AudioCodec (i.e. OpusCodec), include additional PacketTime parameter.
  • Added generation of RTCP sender/receiver reports (includes statistics regarding packet loss, jitter, etc.).
  • Added Visual C++ runtime to ActiveX control so dependency doesn't have to be installed separately.
  • Added dead stream detection to JavaScript SDK for Chrome/Opera.
  • Added .NET audio mixing example.
  • Added Java audio-only example.
  • Added LinkDownArgs.TimedOut, set to true if the link is down due to a timeout.
  • Added LinkDownArgs.DeadStreamDetected, set to true if the link is down due to stream inactivity.
  • Added LinkDownArgs.NewOfferReceived, set to true if the link is down because a new offer was received from the remote peer.
  • Fixed memory leak in Xamarin.iOS and Xamarin.Mac SDKs.
  • Updated Chrome/Firefox video preview to be mirrored.
  • Updated Xamarin.Android to use the audio/video engine from the Java SDK.
  • Updated Xamarin.iOS SDK to the new Xamarin Unified API (required for 64-bit support).
  • Updated Xamarin.Mac SDK to the new Xamarin Unified API.
  • Updated iOS audio rendering engine to minimize locking.
  • Updated .NET Opus/VP8 codec implementations to minimize memory allocation.
  • Updated Xamarin Opus/VP8 codec implementations to minimize memory allocation.
  • Updated Java Opus/VP8 codec implementations to minimize memory allocation.
  • Updated JavaScript plugin-related error messages on mobile devices.
  • Updated JavaScript SDK so SDP changes are passed back into the native WebRTC engine in Chrome/Firefox/Opera.
  • Updated WebSync extension to not throw an exception if leaving a conference without joining first.
  • Updated WebSync extension so ShouldLink is called on both sides (offerer/answerer) instead of just one (offerer).
  • Updated documentation.

2.5.1-2

  • Added Xamarin.Mac libraries.
  • Added iOS arm64 support for libopus.
  • Added iOS arm64 support for libvpx.
  • Added RelayUsernames/RelayPasswords/RelayRealms to support different credentials for different server addresses.
  • Added NET.Conference.WebRTC.Audio.Custom to demonstrate streaming audio from a file.
  • Added iOS.Conference.WebRTC.Audio and Mac.Conference.WebRTC.Audio examples.
  • Fixed bug in Android video preview resizing.
  • Fixed bug in iOS useRearVideoDevice method.
  • Fixed memory leak in Java SDK (and Java applet).
  • Fixed bug in JavaScript muteRemoteAudio/Video.
  • Fixed bug in the loading of native libraries using Java on Mac.
  • Fixed Opus warnings in iOS/Mac SDKs.
  • Updated JavaScript SDK to work around DOM manipulation behaviour in Temasys IE/Safari plugin.

2.5.1

  • Breaking Change: RelayAuthenticateResult constructor removed. Use RelayAuthenticateResult.FromLongTermKeyBytes or RelayAuthenticateResult.FromPassword instead.
  • Added IvfVideoRecordingProvider to .NET SDK for recording VP8 video stream to disk.
  • Added OggAudioRecordingProvider to .NET SDK for recording Opus audio stream to disk.
  • Added LocalMediaStream.ToggleAudio/VideoPause methods.
  • Added DirectAudioCaptureProvider and DirectVideoCaptureProvider to simplify streaming from a custom source (i.e. a file).
  • Added runtime check to Android SDK to check for appropriate camera/microphone permissions in application manifest.
  • Added .NET audio-only example and cleaned up JavaScript audio-only example.
  • Added RelayAuthenticateArgs.Operation to the server SDKs to indicate which operation is being authenticated in the callback.
  • Added .NET ASIO-based example (tested with ASIO4ALL driver).
  • Fixed bug in JavaScript SDK implementation of localMediaStream.pauseAudio/Video and localMediaStream.resumeAudio/Video.
  • Fixed bug in iOS SDK that caused the audio engine to continuously restart when calling [AVAudioSession overrideOutputAudioPort:...].
  • Fixed null reference exception thrown when stopping the local media stream and then accepting a new incoming connection.
  • Updated Java examples and Java applet to use JNI instead of JNA for Opus/VP8 to improve performance.
  • Updated Xamarin.iOS SDK to use native binding for audio/video capture to improve performance.
  • Updated NAudioRenderProvider in .NET SDK to detect PlaybackStopped events and restart if possible.
  • Updated iOS SDK to address new warnings/errors introduced by Xcode 6.
  • Updated Java applet to be completely Java 1.6-compatible (removed all Java 1.7+ references).
  • Updated documentation.

2.5.0-3

  • Added Users property to JoinConferenceSuccessArgs in WebSync extension.
  • Added PeerId and PeerState properties to AudioCodec, VideoCodec, and DataChannelCodec (for decode/packetize/depacketize).
  • Fixed bug in WebSync extension where a user join/leave notification might not fire.
  • Updated Java video capture to use closest video size.
  • Updated .NET UDP socket handler to ignore WSAECONNRESET messages (fixes strange "Socket closed" exceptions).

2.5.0-2

  • Fixed bug in Android SDK where rear camera might appear inverted in remote feed.
  • Fixed bug in iOS SDK where default audio/video render providers would not load automatically.
  • Fixed bug in WebSync extension's ShouldLinkArgs where certain property values would be null.
  • Updated JavaScript null/empty string checks to also test for undefined variables.
  • Updated layout manager to ignore null values (and write a warning to the logs) instead of throwing an exception.

2.5.0

  • Breaking Change: added CreateAudio/VideoRenderProviderArgs to CreateAudio/VideoRenderProvider callbacks to provide access to the peer ID and peer state.
  • Added support for per-client encoders when raising frames using specific peer IDs.
  • Added support for generalized time in X.509 certificate output.
  • Added Stream.RtpMode to support Basic (vs. Extended) RTP profile.
  • Added Leave button to JavaScript WebRTC example.
  • Updated JavaScript LayoutManager to reset containers before use to support reuse of DOM elements.
  • Updated documentation.

2.4.11-6

  • Fixed bug where iOS callbacks might not execute on 64-bit processors.
  • Updated iOS video capture provider to avoid memory leak under certain orientations.

2.4.11-5

  • Updated WebSync extension to avoid multiple event attachments after a signalling failure.

2.4.11-4

  • Updated iOS WebRTC audio capture/render providers to avoid glitch on 64-bit iOS 7.0 causing repetitive pause/resume.
  • Updated iOS WebRTC audio capture/render providers for iOS 5 compatibility.

2.4.11-3

  • Added AndroidAudioCaptureProvider.DefaultUseAcousticEchoCanceler to control application-wide use of Android's AcousticEchoCanceler.
  • Added AndroidAudioCaptureProvider.DefaultUseAutomaticGainControl to control application-wide use of Android's AutomaticGainControl.
  • Added AndroidAudioCaptureProvider.DefaultUseNoiseSuppressor to control application-wide use of Android's NoiseSuppressor.
  • Added AndroidAudioCaptureProvider.UseAcousticEchoCanceler to control instance-level use of Android's AcousticEchoCanceler.
  • Added AndroidAudioCaptureProvider.UseAutomaticGainControl to control instance-level use of Android's AutomaticGainControl.
  • Added AndroidAudioCaptureProvider.UseNoiseSuppressor to control instance-level use of Android's NoiseSuppressor.
  • Fixed bug where iOS apps might crash (SIGPIPE) after locking/unlocking screen while app is running.
  • Updated AndroidAudioCaptureProvider to back-off to alternative sample rate and channel configurations if 48000Hz/stereo is not supported.

2.4.11-2

  • Fixed bug where iOS apps might crash after a change to the audio route.

2.4.11

  • Breaking Change: reduced LayoutManager implementation requirements to AddToContainer/RemoveFromContainer/RunOnUIThread/ApplyLayout.
  • Added Xamarin.iOS audio/video engine.
  • Added Windows Phone audio/video engine (experimental).
  • Added Opus codec to iOS and Xamarin.iOS WebRTC examples.
  • Added Opus codec to Android and Xamarin.Android WebRTC examples.
  • Added Opus codec to .NET WebRTC examples.
  • Added Opus codec to Mac WebRTC examples.
  • Added Opus codec to Java WebRTC examples.
  • Added Opus codec to Java applet and ActiveX control.
  • Added LocalMediaStream.Pause/ResumeAudio to stop/start the audio engine.
  • Added LocalMediaStream.Pause/ResumeVideo to stop/start the video engine.
  • Added LocalMediaStream.Mute/UnmuteVideoPreview to control preview muting independently from outgoing video muting.
  • Note: LocalMediaStream.MuteVideo still silences the outgoing video feed (black frames), but no longer mutes the video preview. Call LocalMediaStream.MuteVideoPreview if this is desired.
  • Added several layout options to LayoutManager and improved layout algorithms.
  • Added DefaultVideoScale and DefaultVideoPreviewScale to GetMediaArgs.
  • Added dynamic audio resampling engine.
  • Added video capture support when using the iOS simulator.
  • Added auto-resizing to JavaScript layout manager.
  • Added support for DTLS certificate generation and re-use within a conference.
  • Added LayoutManager.GetPeerIds to obtain a list of "keys" in the control table.
  • Added LayoutManager.OnLayoutComplete event to support custom post-layout actions.
  • Added automatic preview mirroring on .NET, Mac, and Java.
  • Added MirrorPreview property to .NET, Mac, and Java video capture providers.
  • Added dead stream detection.
  • Added AudioStream.BypassCodec and VideoStream.BypassCodec for pass-through use cases (see Distributor example).
  • Added Android and Xamarin.Android video test examples.
  • Added iOS and Xamarin.iOS video test examples.
  • Added Stream.EncryptionRole to force active, passive, or actpass behaviour during DTLS negotiation.
  • Added 'fm-icelink-webrtc-video' CSS class to JavaScript video containers.
  • Added 'fm-icelink-webrtc-video-local' CSS class to local JavaScript video containers.
  • Added 'fm-icelink-webrtc-video-remote' CSS class to remote JavaScript video containers.
  • Fixed bug where video in Android might appear initially distorted.
  • Fixed bug where Reason might be null in Conference.OnLinkDown event after calling Unlink or UnlinkAll with a non-null reason.
  • Fixed bug where video would stop playing in Chrome when detached from and reattached to the DOM.
  • Fixed bug where video preview in Android might overflow when using Cover scaling.
  • Fixed bug where video preview in iOS might display unusual behaviour while animating.
  • Fixed bug where audio playback in Xamarin.Android might include unusual artifacts.
  • Fixed bug where keep-alives might persist after closing a link.
  • Fixed bug where DTLS would fail when using weak/null encryption settings.
  • Updated WebSync extension to maintain peer connections across signalling network interruptions.
  • Note: A dependency on the WebSync Chat extension is now required. We recommend updating all client applications to this version.
  • Updated send/receive exception handling to disconnect more gracefully in unstable network environments.
  • Updated keep-alive algorithm to reduce overhead.
  • Updated iOS audio capture and playback to reduce resource consumption and potential for static.
  • Updated iOS audio capture and playback to respond automatically to audio route changes.
  • Updated Mac audio capture and playback to use AudioQueue API for improved reliability.
  • Updated Conference.Link to destroy any previous links when linking with an existing peer ID.
  • Updated LayoutManager to handle multiple add or remove operations with the same peer ID.
  • Updated PictureBoxVideoRenderProvider (.NET WinForms) to allow custom PictureBox control.
  • Updated ImageVideoRenderProvider (.NET WPF) to allow custom Image control.
  • Updated ImageViewVideoRenderProvider (Mac) to allow custom NSView.
  • Updated OpenGLVideoRenderProvider (iOS) to allow custom UIView.
  • Updated PanelVideoRenderProvider (Java) to allow custom VideoPanel control.
  • Updated PictureBoxVideoRenderProvider to redraw on resize when using Cover scaling.
  • Updated Java applet and ActiveX control to honor GetMedia video scale settings.
  • Updated AForge capture provider waiting text to be centered (better for Cover scaling).
  • Updated iOS render provider to automatically discard late frames.
  • Updated NAudio capture/render providers to increase thread priority.
  • Updated NAudio capture/render providers to allow API selection.
  • Updated NAudio render provider to use DirectSound by default.
  • Updated Null audio/video capture providers to return a device name.
  • Updated WebRTC examples to better illustrate signalling vs. local media vs. conference.
  • Updated audio/video capture provider model to increase reliability when quickly stopping/starting.
  • Updated Java webcam library to new release candidate (0.3.10-RC7).
  • Updated documentation.

2.4.10-3

  • Fixed bug preventing automatic installation of ActiveX control on some machines.

2.4.10-2

  • Fixed null reference bug in layout manager.

2.4.10

  • Breaking Change: Updated SendRTP methods to require Stream as first parameter. The previous method resulted in an unavoidable memory leak.
  • Added WebRTC ActiveX control - can be used to provide WebRTC functionality in Internet Explorer without Java.
  • Added context menu to Java applet, ActiveX control, and .NET/Java/Mac examples.
  • Added AForge.NET and NAudio extensions to WebRTC for .NET.
  • Added LayoutMode option to layout managers to support Float/Block/Inline layout algorithms.
  • Added LayoutPreset option to layout managers to support quick-config Skype/Google-Hangouts/Facetime-style layouts.
  • Added LayoutScale option to video capture/render providers to support Contain/Cover/Stretch scaling.
  • Added NET.LayoutManagerTest example to demonstrate various layout options.
  • Added Distributor class for forwarding received audio/video on a narrow channel to one or more conferences on a wider channel.
  • Added NET.Conference.WebRTC.Distributor example to demonstrate use of the new Distributor class.
  • Added NET.Conference.WebRTC.Broadcast example to demonstrate send-only and receive-only scenarios.
  • Added 200ms max buffer duration to NAudio render provider.
  • Added [FMIceLinkWebRTCAVCaptureProvider deviceNumberForCaptureDevice:] to iOS/Mac SDKs.
  • Added additional error handling to base codec wrappers.
  • Added best-effort Java detection to warn against incompatible web browsers.
  • Added JavaScript prompt/promptMessage and alert/alertMessage/mobileMessage properties to setApplet config.
  • Added AndroidVideoCaptureProvider.get/setCreateSurfaceView to allow custom SurfaceView as preview target.
  • Added WaveOut fallback to NAudio capture provider's device name enumeration.
  • Added MediaStream.RenderAudio/Video and MediaStreamTrack.RenderAudio/Video.
  • Added MediaStream.ToggleAudio/VideoMute.
  • Added LinkExtensions.ToggleRemoteAudio/VideoMute.
  • Added GetRemoteVideoControls method to layout managers.
  • Fixed Android camera orientation for natural-landscape tablets in portrait mode.
  • Fixed bug in Xamarin.Android where preview might disappear.
  • Fixed bug in Android layout manager that caused "requestLayout() improperly called..." warnings.
  • Fixed memory leaks in .NET, iOS, and Mac SDKs.
  • Updated Mute/Unmute functionality to render silence (audio) or a black image (video) when muted.
  • Updated layout managers to check if a video control has already been set before adding it.
  • Updated Android video render to return FrameLayout-wrapped SurfaceViews instead of SurfaceViews directly to improve extensibility.
  • Updated Android video capture to use closest available preview size.
  • Updated WPF image rendering to use background thread.
  • Updated logging to be more useful/descriptive in common failure scenarios.
  • Updated VP8 wrappers for greater portability.
  • Updated TURN credential handling for enhanced third-party compatibility.
  • Moved .NET's PictureBoxRenderProvider/ImageRenderProvider into core SDK.
  • Renamed Frame to LayoutFrame, Alignment to LayoutAlignment, and Origin to LayoutOrigin (avoids frequent conflicts).

2.4.9-2

  • Fixed unusual audio fragmentation.

2.4.9

  • Added multi-server support to Conference for high-availability.
  • Added LocalMediaStream.GetAudio/VideoDeviceNames.
  • Added LocalMediaStream.GetAudio/VideoDeviceNumber.
  • Added LocalMediaStream.SetAudio/VideoDeviceNumber.
  • Added LocalMediaStream.GetFront/RearVideoDeviceNumber.
  • Added LocalMediaStream.UseNextAudio/VideoDevice.
  • Added LocalMediaStream.UseFront/RearVideoDevice.
  • Added LocalMediaStream.OnAudio/VideoDeviceNumberChanged events.
  • Added LinkExtensions.MuteRemoteAudio/Video.
  • Added LinkExtensions.UnmuteRemoteAudio/Video.
  • Added LinkExtensions.RenderAudio/VideoBuffer.
  • Added LinkExtensions.RemoteAudio/VideoIsMuted.
  • Added Conference.GetPeerIds/GetPeerState/GetPeerStates.
  • Added BaseLayoutManager.OnLayout callback to allow modifications to default layout coordinates/dimensions.
  • Added VideoBuffer.CreateCustom/Black/White/Red/Blue/Green/etc. utilities to create solid-color video buffers.
  • Added additional logging/handling around codec initialization to help diagnose failures.
  • Added mute/unmute support to JavaScript (and Java applet) SDK.
  • Added shortened method overloads to iOS/Mac SDKs.
  • Fixed bug in iOS/Mac NameValueCollection string comparison.
  • Updated audio/video capture providers (Android/Java/.NET/iOS/Mac) to support input source (camera/mic) switching.
  • Updated Android layout manager to keep preview in front of remote video feeds after rotation.
  • Updated TURN relay deallocation for better compatibility with Google Chrome's liveness checks.
  • Updated Java applet with improved audio buffer playback management to eliminate latency problems.
  • Updated Java applet to support better VP8 keyframe management (from Java SDK).
  • Updated Java applet to disable LiveConnect while the page unloads (should prevent hangs).
  • Updated iOS/Mac video capture to auto-switch to another camera if the selected camera doesn't provide frames.
  • Updated Mac LayoutManager to allow creation on a non-UI thread.
  • Updated Java, Mac, and .NET layout managers to automatically respond to container resize events.
  • Updated Java, Mac, and .NET WebRTC examples to support window resizing.
  • Updated Java, Mac, and .NET video capture providers to continue updating preview when muted.
  • Updated Java and Mac audio capture providers to support all audio devices, not just the default system selection.
  • Updated JavaScript SDK to support changes to Chrome's ICE connection state lifecycle.
  • Updated VP8 accumulator to better handle out-of-order packet arrival.
  • Updated Xamarin.Android VP8 wrapper to support dynamically changing video frame sizes.
  • Updated VideoBuffer so video codec width/height requirements are enforced.
  • Updated ImageUtility.BufferToBitmap in .NET SDK to handle uneven strides.
  • Updated video capture provider base to handle multiple calls to RaiseReady/RaiseBusy.
  • Updated RTCP packet serialization to automatically add padding when required.
  • Updated iOS/Mac HTTP transfer so requests complete, even if calling thread goes away.
  • Updated documentation.

2.4.8

  • Added unsigned Java applet to SDK to allow signing by a third-party.
  • Added AllLocalCandidates/AllRemoteCandidates/AllLocalCandidateTypes/AllRemoteCandidateTypes properties to Link.
  • Added IsCreating/HasCreated/IsAccepting/HasAccepted/IsClosing/HasClosed/IsOpening/HasOpened/IsOpened properties to Link.
  • Added LocalOfferAnswer/RemoteOfferAnswer properties to Link.
  • Added Controlling flag to Link to indicate offerer vs. answerer.
  • Added AndroidLogProvider to support writing to the Android log at specific log levels.
  • Added OnUnhandledException event to Conference/Link/Stream to help track down unhandled async exceptions in user code.
  • Added additional error handling to callbacks in WebSync extension.
  • Fixed bug (NPE) when in a receive-only conference with incoming RTCP packets.
  • Fixed bug (NPE) when using the Java applet in a WebRTC conference with no video.
  • Updated Android DefaultProviders to accept a generic Context instead of an Activity.
  • Updated Android audio capture to fall-back to no-echo-cancellation on older devices.
  • Updated Android audio capture to fail loudly if required audio formats are unsupported.
  • Updated Android audio capture to allow overriding of audio source (AndroidAudioCaptureProvider.setAudioSource).
  • Updated Android audio render to allow overriding of max queue length(AndroidAudioRenderProvider.setMaxQueueLengthMillis).
  • Updated Android video capture to support "natural landscape" devices.
  • Updated Android video capture to automatically respond to screen orientation changes within an activity lifecycle.
  • Updated Android video capture to support re-use outside the activity lifecycle.
  • Updated Android video render to support re-use outside the activity lifecycle.
  • Updated Android layout listeners for compatibility with Google Glass.
  • Updated Android layout manager to handle cases where container has not yet been assigned a width/height.
  • Updated Android layout manager to support re-use outside the activity lifecycle.
  • Updated Android layout manager to automatically respond to changes in the layout hierarchy.
  • Updated Android layout manager to support any container that inherits from ViewGroup.
  • Updated Android VP8 codec wrapper (open-source in example) to handle mid-stream changes in the video frame size.
  • Updated Android example to demonstrate preserving signalling/local-media/conference across device rotation and app suspension.
  • Updated .NET layout manager to avoid WinForms exceptions when shutting down application.
  • Updated TURN permission lifetime extensions for compatibility with alternative interpretations of RFC spec.
  • Updated conference constructor to sort streams to eliminate SDP ordering inconsistencies.
  • Updated minification to eliminate cross-module errors.
  • Updated handling of async exceptions to provide additional information and write to the log.

2.4.7

  • Added full WebRTC support for Xamarin.Android.
  • Added OpenGLVideoRenderProvider for Android (improves video rendering performance significantly).
  • Added ReachedPeer to Link for more accurate warning messages if signalling is not properly configured.
  • Added handler for occasional "unspecified error" in IE when using the Java applet.
  • Added various debug-level log statements to DTLS handshake algorithm.
  • Updated DTLS cryptography on Android (resolves problems performing DTLS handshake on Android).
  • Updated audio engine to packetize frames into codec-specific intervals (resolves audio distortion in Chrome/Firefox).
  • Updated Android video capture provider to discard late frames (resolves video capture backlog on Android).
  • Updated Java SDK to use native types wherever possible (general performance improvement).
  • Updated ASN.1 bitstring parsing to improve performance.
  • Updated Android audio capture provider to shut down more gracefully.
  • Updated time-to-expiry for TURN allocation permissions to accommodate some third-party client implementations.
  • Updated JavaScript SDK so it responds to UDP-level disconnects.
  • Updated WebSync extension to properly handle suspend/resume on mobile devices.
  • Updated Win.VP8 and Win8.VP8 to account for width/heigh reconfiguration.
  • Updated Win.VP8 and Win8.VP8 to include libvpx 1.3.0 headers.
  • Updated GetMediaArgs and BaseLayoutManager to inherit from Dynamic.
  • Updated Android.Conference.WebRTC example to use OpenGL, improved JNI libraries, and faster VP8 decoding.
  • Updated .NET video capture providers to initialize/destroy their preview render providers.
  • Updated JavaScript JSON date parsing to avoid issues deserializing strings that contain Date definitions.

2.4.6

  • Fixed bug where incoming video from Chrome would freeze.
  • Updated system requirements with Java applet caching notes.
  • Updated RTCP packet processing so encoder receives event.
  • Updated Java SarXos video capture provider to handle WebcamException.
  • Updated documentation with new code snippet (disabling DTLS).

2.4.5

  • Breaking Change: JpegCodec is now disabled by default. Bitmap to buffer conversion methods have been moved to ImageUtility class.
  • Added VideoStream.RegisterJpegCodec to enable JPEG codec.
  • Added rate limiter to PLI packet delivery to avoid over-congesting the network with keyframes.
  • Added packet-loss detection at the VP8 codec level to avoid messy artifacts in lossy network conditions (prefer freezing the video).
  • Added multi-JVM handling to Java applet.
  • Added Safari 'Safe Mode' handling to Java applet.
  • Added new native libvpx libraries for Linux (x86/x64) in Java WebRTC example.
  • Added new native libvpx libraries for Mac (universal) in Java WebRTC example.
  • Added AudioDeviceLabel/VideoDeviceLabel to GetMediaSuccessArgs.
  • Added warn-level log statement if no negotiated stream could be found after connecting.
  • Fixed bug that would cause plain-text server-side authentication option to throw null reference exception.
  • Fixed race condition in Java applet that could introduce a possible null reference exception in logs when initializing.
  • Fixed Java applet iframe presentation to hide border and "false" text in Internet Explorer
  • Fixed retain bug on local video control in Mac/iOS layout manager.
  • Fixed Bridj bug in native interface when running Java example on 32-bit Linux.
  • Increased Community edition WAN timeout to 30 seconds (was 10 seconds).
  • Updated Java applet security model to comply with recent Java security updates.
  • Updated Java applet logging to include additional debug information.
  • Updated Java applet to create fewer 'applet' elements in the DOM.
  • Updated webcam library used by Java applet and application examples.
  • Updated libvpx to version 1.3.0.
  • Updated ICE algorithm to ignore STUN peer messages once a connection is successfully completed.
  • Updated LocalNetwork.GetIPAddresses to account for possible 'not implemented' exceptions thrown by Mono.
  • Updated Java layout manager thread handling.
  • Updated layout manager to check for null container on construction.
  • Updated Java applet/JavaScript interface to provide better error messages if Java doesn't initialize properly or terminates unexpectedly.
  • Updated AForge.NET to 2.2.5 (should resolve issues running .NET example on Windows 8).
  • Updated AForgeVideoCaptureProvider to use new API for selecting camera resolution.
  • Updated remote audio/video/data-channel capture to optimize codec lookup.
  • Updated VP8 codec wrappers to respect Vp8Padep.SequenceNumberingViolated.
  • Updated DTLS close "warnings" to be written as debug-level statements.
  • Updated Java VP8 codec wrapper to reduce bandwidth by reducing frequency of keyframes.
  • Updated .NET VP8 codec wrapper to avoid race condition on keyframes generated by PLIs.

2.4.4

  • Added ARM support to Windows 8 WebRTC example.
  • Added RemoveRemoteVideoControls to LayoutManager implementations (removes all remote video feeds from container).
  • Fixed audio noise in PCMU/PCMA codec implementation in Java.
  • Fixed sequence numbering glitch when rendering multiple incoming video streams.
  • Fixed OpenGL flickering on iOS when rendering multiple incoming video streams.
  • Fixed race condition in Java applet where Initialize might not finish before offer is created.
  • Updated Java applet to use new Caller-Allowable-Codebase instead of Trusted-Library in manifest.
  • Updated iOS capture provider to increase gain while using echo cancellation.
  • Updated Android audio engine to take advantage of lower hardware latency when available.
  • Updated Android audio engine to flush buffers if audio render queue starts to lag.
  • Updated default conference timeout to 30 seconds to allow additional time for DTLS processing on low-power devices.
  • Updated RSA key generation in iOS so it supports the iPhone simulator.
  • Updated libvpx to latest version for .NET platform examples.
  • Updated NAudio to latest version for .NET platform examples.
  • Updated Windows 8 WebRTC example to use NAudio for audio capture/render.
  • Updated Android examples.

2.4.3

  • Added Windows 8 WebRTC example (experimental).
  • Added layout manager for Windows 8 (Win8LayoutManager).
  • Added a fix for audio-only conferences in JavaScript.
  • Added support for SHA-256 signatures in TLS certificates.
  • Added awaitable Async method overloads for Windows Phone libraries.
  • Fixed RSA signing bug in Windows 8.
  • Updated libvpx for iOS (fixes black/white blocks in video).
  • Updated key exchange to support SDES-only clients (i.e. Chrome on Android) that have not yet implemented DTLS-SRTP.
  • Updated iOS audio capture provider to increase volume.
  • Updated iOS WebRTC example to include audio mode.

2.4.2

  • Added audio/video device enumeration (GetAudioDeviceNames and GetVideoDeviceNames in UserMedia).
  • Added support for sending different frames to different peers (RaiseFrame overloads in AudioCaptureProvider/VideoCaptureProvider).
  • Added simple mute/unmute API to LocalMediaStream (MuteAudio/MuteVideo/UnmuteAudio/UnmuteVideo/IsAudioMuted/IsVideoMuted).
  • Added flag to enable/disable use of VoiceProcessingIO in iOS (FMIceLinkWebRTCAudioUnitCaptureProvider setUseVoiceProcessingIO:YES/NO).
  • Added a=setup attribute support to SDP offer/answer.
  • Added source code for Java applet to support custom builds.
  • Added documentation for missing classes.
  • Added x86_64 slice to iOS libraries (64-bit simulator).
  • Added null handling to default JSON serializer in .NET.
  • Added Visual Studio 2013 support to examples.
  • Improved DTLS certificate generation performance.
  • Improved error message when using a malformed object-literal shortcut in JavaScript.
  • Fixed local audio feedback loop in Firefox.
  • Fixed date handling in default JSON serializer in JavaScript.
  • Fixed bug where examples/demos might use an old JavaScript client.
  • Updated SDP answer to exclude crypto attributes if DTLS-SRTP is in use.

2.4.1

  • Added DTLS-SRTP support for DTLS-based key exchange.
  • Added network-level jitter buffers to improve call quality on wide-area networks.
  • Fixed JavaScript bug for broadcast/receive configurations where broadcasting client would not detect successful links.
  • Fixed date serialization bug for Java.
  • Fixed date serialization bug for iOS/Mac.
  • Fixed date serialization bug for JavaScript.
  • Fixed UTF-8 encoding bug in JavaScript.
  • Removed Json class from Xamarin.Android library for compatibility with Xamarin Indie development (JsonLite is still available).
  • Updated audio-only support in JavaScript.
  • Updated documentation.

2.3.12

  • Updated error handling in NET.Server HttpListener to avoid ProtocolViolationException caused by HEAD requests.
  • Updated WPF image render provider to avoid race condition with initial Image control creation.
  • Updated Android video capture to use NV21 instead of YV12 since several Samsung devices implement YV12 incorrectly.
  • Updated JavaScript to allow audio/video=false for receive-only implementations.
  • Updated AV capture provider in iOS to use iOS 7 features when available.
  • Removed unnecessary server messages from debug log.
  • Removed JavaScript state-change monitor (interop bug between Chrome and Firefox).
  • Updated STUN client implementations to accept either XOR-MAPPED-ADDRESS or MAPPED-ADDRESS in response.
  • Fixed several bugs related to Android audio capture and playback.
  • Fixed bug in Android WebRTC example that prevented the local media stream from stopping on pause.
  • Fixed bug where video could not be received without video being offered.
  • Fixed race condition where candidates might arrive before a link had completely initialized.
  • Fixed UDP socket implementation in Java so it returns the proper dot-notation of an IP address.

2.3.11

  • Added AMD/CommonJS wrappers for JavaScript libraries.
  • Updated TURN server implementation to interface with Chrome's TURN client implementation.

2.3.10

  • Added SecuritySafeCritical attribute to Windows 8 DNS resolution methods to avoid security exception.
  • Added try/catch statements around event handlers to catch/log errors in user code.
  • Added LocalCandidates and RemoteCandidates properties to Link for access to selected local/remote candidates.
  • Added TextViewLogProvider to fm.jar for Android.
  • Added FMTextViewLogProvider to libFM.a for iOS/Mac.
  • Added TextBlockLogProvider to FM.dll for Windows 8 and Windows Phone.
  • Added automatic peer-disconnect detection without signalling in JavaScript.
  • Renamed NSMutableArray's setObject:atIndex: to setObj:atIndex: to avoid conflict with private Cocoa Foundation method.
  • Renamed XXX.Client examples to XXX.Conference to avoid client/server confusion.
  • Fixed locking issue in Conference when connecting to multiple peers.
  • Fixed bug where some TURN connections might not be established if the controlled client was behind a symmetric firewall.
  • Updated LocalNetwork.GetIPAddresses to filter out 169.254.0.0/16.
  • Updated WebSync extension so all events are properly detached when leaving a conference.
  • Updated .NET LayoutManager to catch exceptions thrown when manipulating controls.
  • Updated Windows 8 and Windows Phone examples so GUI updates take place on GUI thread.
  • Updated .NET WebRTC examples to catch exceptions thrown when rendering bitmaps while closing the window.
  • Updated .NET examples to use .NET 4.0.
  • Updated Xamarin.Android and Xamarin.iOS examples.
  • Updated documentation.

2.3.9

  • Added error statement written to the log when connecting to a server on the local network.
  • Fixed error thrown when sending an empty string to a data-channel.
  • Fixed data-channel SSRC generation so it never overflows to a negative number.
  • Updated JavaScript fm.consoleLogProvider to use newlines instead of HTML line break tags.
  • Cleaned up iOS/Mac data-channel examples.

2.3.8

  • Added early-candidate processing in case candidates arrive at a peer before the offer/answer.
  • Added IsRelayed property to LinkUpArgs and StreamLinkUpArgs to determine if TURN is in use.
  • Fixed camel-casing in get/setRTPPortMax/Min (JavaScript).

2.3.7

  • Added WebRTC DataChannel stream support (Chrome only) with examples for .NET, Java, Android, iOS, Mac, Windows Phone, Windows 8, Xamarin.Android, and Xamarin.iOS.
  • Added automatic DNS resolution for server addresses.
  • Added overloads for AudioStream/VideoStream.RegisterCodec that don't require a payload type.
  • Added codec manager to ensure that only one encoder is created for each media stream format.
  • Added new server event API to simplify server-side event handling.
  • Added fm.consoleLogProvider to JavaScript.
  • Added static quick-constructors for iOS and Mac.
  • Fixed bug that would attempt to use DTLS when supplying Null encryption.
  • Fixed bug in rollover counter that would cause SRTP packet decryption to fail after some time.
  • Fixed bug in server where a deallocated socket might not be properly disposed.
  • Updated SDP serializer so prefixes (a=, m=, etc.) are included in the serialized output.
  • Updated byte count return value from SendXXX functions to exclude header/tag size.
  • Updated RTP packet API to allow specification of synchronization source.
  • Updated WebSync extension to accept a Conference instead of conference configuration.
  • Updated examples for clarity.
  • Updated documentation.

2.3.6

  • Added StaleNonceSecurity property to server (defaults to false) to expand TURN support.
  • Added integer return value from Link/Conference.Send that indicates the number of bytes sent.
  • Fixed bug in JavaScript when disabling video (for an audio-only conference).
  • Fixed bug in WPF layout manager.
  • Fixed bug in WebRTC WPF example.
  • Updated Android examples to use minimum API level 16.

2.3.5

  • Added port forwarding support to virtualization module.
  • Fixed bug in Chrome/Firefox SDP candidate handling.
  • Updated iOS/Mac/Java connection algorithms to match improvements in .NET.
  • Updated JavaScript WebRTC example so DTLS-SRTP is optional at runtime.
  • Updated documentation.

2.3.4

  • Added VirtualAdapter/Network/UdpSocket classes to support IceLink simulation in any conceivable network environment.
  • Added virtual testing example that demonstrates IceLink's behaviour under various simulated network conditions.
  • Added WpfLayoutManager to support WebRTC applications using .NET Windows Presentation Framework (WPF).
  • Added WPF-based WebRTC example that uses the WPF Image control instead of the WinForms PictureBox control.
  • Added public DoLayout method to LayoutManagers for manual layout (i.e. after container resize).
  • Added WasUp property to LinkDown events to indicate if the LinkUp event was previously raised.
  • Added IsSwitchingRoles property to LinkDown events to indicate if the link will be re-established using the controlled role.
  • Added TextLogProvider for string-based in-memory log capturing.
  • Added some groundwork support for DTLS-SRTP.
  • Added UseDtls flag to AudioStream/VideoStream constructors. Currently only affects Chrome/Firefox.
  • Fixed bug in LayoutManager where setting/unsetting the local video control would cause it to hide behind remote video controls.
  • Fixed bug in JavaScript where video would not load if dimensions were not specified.
  • Fixed bug in candidate prioritization that might cause selection of a less-than-optimal network path.
  • Fixed bug in public-to-private candidate conversion that might cause link establishment to fail.
  • Fixed bug in JavaScript when formatting strings with > 3 arguments.
  • Updated WebRTC implementation to use native Firefox/Opera support.
  • Updated Community edition WAN timeout by increasing it to 10 seconds.
  • Updated LayoutManager calculations on iOS/Mac to support UINavigationController.
  • Updated error messages when parsing an unrecognized SDP attribute.
  • Updated debug log output to be more consistent/readable.
  • Updated LogProvider to simplify implementations.
  • Updated fm.domLogProvider in JavaScript to include UTC timestamps.
  • Updated JavaScript to support post-DOM loading (i.e. via modernizr).
  • Updated examples.
  • Updated documentation and fixed some formatting issues.

2.3.3

  • Added libraries built specifically for Unity.
  • Added CheckServer examples for .NET/Mac/Java for verifying network accessibility and STUN capabilities of remote server.
  • Fixed bug in Java WebRTC applet.
  • Updated documentation.

2.3.2

  • Added Java applet that brings WebRTC functionality to non-WebRTC browsers using the JavaScript API.
  • Added WebRTC support to Android.
  • Added WebRTC layout manager for Android, Java, iOS, Mac, and .NET (handles positioning, orientation, and threading).
  • Added WebRTC rotation support for Android and iOS.
  • Added WebRTC Mute/Unmute methods to stream tracks (MediaStream.AudioTrack/VideoTrack) and audio/video capture providers.
  • Added VideoRenderProvider to replace VideoContainer.
  • Added default integrated audio/video providers for WebRTC on Android, Java, iOS, and Mac.
  • Added CandidateMode to Conference/Link API to support candidate inclusion in offers/answers (for third-party compatibility).
  • Added ProviderFactory for managing application-wide audio/video provider definitions.
  • Added LocalVideoControl to GetMediaSuccessArgs.
  • Added GetRemoteVideoControl to Link.
  • Added First Steps guide to SDK.
  • Updated WebRTC so audio streams can be used even if no local audio source is present (receive-only).
  • Updated WebRTC so video streams can be used even if no local video source is present (receive-only).
  • Updated video view controls to present/frame video consistently across Windows/Mac/iOS/Android.
  • Updated event handling so the link-down event never fires more than once.
  • Updated VP8 bindings in Java to improve memory management and stability.
  • Updated Codec interface so destruction happens synchronously instead of relying on garbage collection.
  • Updated Java to use primitive byte instead of Byte to improve performance.
  • Updated ParseAssistant to use the invariant culture so numbers are consistently parsed.
  • Updated buffer API to support multi-plane data.
  • Updated documentation.
  • Updated examples to use layout manager.
  • Updated examples to run the WebSync and IceLink servers in the same console application for simpler deployment (especially on Mac/Linux).
  • Fixed bug in JavaScript when constructing ICE server descriptions for Chrome M28 and newer.
  • Fixed async socket-closed handling bug in Java.
  • Fixed bug in Java where streams might not receive data after establishing a link.
  • Fixed bug where encoder might keep running after a remote disconnection.
  • Fixed string formatting bug in Java/Objective-C for formats with more than 4 arguments.
  • Fixed bug where events might not fire after adding/removing callbacks in Cocoa.

2.3.1

  • Fixed bug where the LinkDown event might not fire for link or streams if closed by a conference due to a timeout.
  • Fixed bug in iOS/Mac where chained events might not fire when using block-based callbacks.
  • Updated Community edition to allow learned public candidates. Fixes issue where LAN links might be incorrectly closed.
  • Updated JavaScript libraries so an error is thrown if scripts are loaded in the wrong order.
  • Updated iOS examples with minor UI fixes.
  • Updated documentation.

2.3.0

  • Community Edition now creates WAN connections to demonstrate NAT traversal, but destroys them a few moments later.
  • Finalized API:
  • FM.IceLink.Connection is now FM.IceLink.Link, replaces all variations of Connection.
  • FM.IceLink.ConnectionHub is now FM.IceLink.Conference, replaces all variations of ConnectionHub.
  • FM.IceLink.Link/Conference.Send is now FM.IceLink.Link/Conference.SendRTP (parallels SendRTCP).
  • FM.IceLink.GetMediaSuccessArgs.MediaStream is now FM.IceLink.GetMediaSuccessArgs.LocalStream.
  • FM.IceLink.LinkUpArgs.MediaStream is now FM.IceLink.LinkUpArgs.Link.GetRemoteStream().
  • FM.IceLink.WebRTC.StreamDescription is now FM.IceLink.WebRTC.Stream, exposes a new event API.
  • FM.IceLink.WebRTC.StreamDescription.RegisterAudioPayloadType is now FM.IceLink.WebRTC.AudioStream.RegisterCodec.
  • FM.IceLink.WebRTC.StreamDescription.RegisterVideoPayloadType is now FM.IceLink.WebRTC.VideoStream.RegisterCodec.
  • FM.IceLink.Connection.GetLocalIPAddresses is now FM.IceLink.LocalNetwork.GetIPAddresses.
  • FM.IceLink.EncryptionMode.None is now FM.IceLink.EncryptionMode.Null.
  • Removed FM.IceLink.PeerClient (no longer needed).
  • Removed FM.IceLink.ConnectionHubProvider (no longer needed).
  • Removed FM.IceLink.WebRTC.PeerClient (no longer needed).
  • Removed FM.IceLink.WebRTC.Connection (no longer needed).
  • Removed FM.IceLink.WebRTC.ConnectionHub (no longer needed).
  • Removed FM.IceLink.Simple.PeerClient (no longer needed).
  • Removed FM.IceLink.Simple.ConnectionHub (no longer needed).
  • Removed FM.IceLink.WebSync.PeerClient (no longer needed).
  • Removed FM.IceLink.WebSync.ConnectionHub (no longer needed).
  • Added tie-breaking logic to Conference.
  • Added Conference.IsLinked for checking if a link exists.
  • Added AudioStream/VideoStream classes to WebRTC extension.
  • Added RTPPortMin/RTPPortMax to Link/Conference to restrict port selection for clients.
  • Added RelayPortMin/RelayPortMax to Server to restrict relay port selection for servers.
  • Added client.JoinConference/LeaveConference extension methods to FM.IceLink.WebSync.
  • Added client.SendConferenceRTP/SendConferenceRTCP extension methods to FM.IceLink.WebSync.
  • Added client.GetConference/GetConferenceLink/GetConferenceLinks/IsConferenceLinked extension methods to FM.IceLink.WebSync.
  • Added JavaScript support for relay (TURN) servers.
  • Added WebRTC example using a Java applet.
  • Added signalling diagram to documentation to illustrate proper integration using the finalized API.
  • Added createjar.py to Java applet examples for quick creation/signing of .jar files.
  • Added EncryptionMode.NullWeak and EncryptionMode.NullStrong for integrity checking without AES encryption.
  • Added fm.domLogProvider for JavaScript.
  • Added support for using blocks as callbacks in iOS/Mac.
  • Fixed bug where slow candidate discovery might cause a link to fail prematurely that would otherwise succeed (most noticeable in Chrome).
  • Fixed bug where calling UnlinkAll might cause collection-modified-while-enumerating exceptions.
  • Fixed bug in JavaScript GUID comparison.
  • Updated Java video capture provider to use OEM-licensed JUV Webcam SDK so watermark is not present.
  • Updated audio/video capture/render providers to support better exception chaining.
  • Updated documentation.
  • Updated all examples with finalized API.
  • Updated iOS/Mac examples to use new block-based callbacks.

2.2.0

  • Fixed bug where more than 2 WebRTC participants would cause distorted/mixed video frames.
  • Fixed bug where links could fail to establish on extremely slow connections.
  • Fixed possible divide-by-zero exception when packetizing late frames in WebRTC.
  • Fixed bug where complex stream negotiations might cause unexpected behaviour.
  • Added WebRTC library (PCMU/PCMA/JPEG/VP8) and example for Java.
  • Added WebRTC library (PCMU/PCMA/JPEG) for .NET Compact, Java/Android, Xamarin.iOS, Xamarin.Android, Windows Phone 8.0, and Windows 8.
  • Added IceLink server support for all platforms.
  • Added Java/Mac IceLink server examples.
  • Added native Android examples.
  • Added more descriptive error message to the Community edition when a connection is only possible over the WAN.
  • Added Log class to FM library for client-side logging.
  • Added some connection negotiation stability improvements for newly discovered race conditions.
  • Added architecture and connection establishment flow diagrams to documentation.
  • Added better exception logging for failed WebRTC packet processing.
  • Updated ConnectionHubProvider (removed Register/Unregister) to support a wider range of signalling technologies.
  • Updated ConnectionHub usage by removing single Start/Stop call and replacing it with multiple Link/Unlink calls.
  • Improved various exception messages for clarity.
  • Revamped examples for easier navigation and more relevant use cases.
  • Simplified codec registration.
  • Moved VP8 dependency outside core libraries.
  • Moved audio/video capture/render providers outside core libraries.
  • Moved Simple classes to external library (FM.IceLink.Simple).
  • Moved Server classes to core library (FM.IceLink).
  • Renamed FM.IceLink.WebSync.WebSyncConnectionHub -> FM.IceLink.WebSync.ConnectionHub.
  • Renamed FM.IceLink.SimpleConnectionHub -> FM.IceLink.Simple.ConnectionHub.
  • Renamed FM.IceLink.WebRTC.PeerConnectionHub -> FM.IceLink.WebRTC.ConnectionHub.
  • Renamed FM.IceLink.WebRTC.WebSync.WebSyncPeerConnectionHub -> FM.IceLink.WebRTC.WebSync.ConnectionHub.
  • Renamed FM.IceLink.WebRTC.SimplePeerConnectionHub -> FM.IceLink.WebRTC.Simple.ConnectionHub.
  • Renamed MonoDroid/MonoTouch to Xamarin.Android/iOS.
  • Updated documentation.

2.1.6

  • Fixed JavaScript bug.

2.1.5

  • Added INFO-level log statements when new connections initialize to help differentiate between Community/Enterprise editions.
  • Added Send overload to ConnectionHub for sending to a specific connected peer.
  • Added GetConnection to ConnectionHub to get the connection for a specific peer.
  • Added new code snippet: "Disabling Relay on Client"
  • Added new code snippet: "Forcing Relay on Client"
  • Added new code snippet: "Getting a Connection from a Hub"
  • Added new code snippet: "Sending a Private Packet on a Hub"
  • Fixed encryption bug when sending a packet to multiple peers.
  • Fixed bug that prevented access to audio/video capture devices in .NET application using the .NET 4.0 security model.
  • Fixed parsing of format descriptions in SDP media lines.
  • Updated iOS/Mac libraries to resolve issues associated with incorrect detection of null values.
  • Updated documentation.

2.1.4

  • Added FMNSLogProvider for iOS/Mac.
  • Added ConsoleLogProvider for .NET/Silverlight/Windows/Windows Phone.
  • Added ConsoleLogProvider for Java.
  • Updated FMIceLinkWebRTCEAGLVideo so it can be initialized on the main thread.
  • Fixed bug in iOS/Mac WebRTC/WebSync examples.
  • Fixed bug where relayed candidates might not be raised.
  • Fixed bug in relayed message deserialization.

2.1.3

  • Added WebRTC libraries for iOS and Mac.
  • Added WebRTC WebSync libraries for iOS and Mac.
  • Added new Pong demo for .NET.
  • Added MaxConnections property to hubs to support restricting the number of allowed outgoing connections.
  • Added Initiator flag to LinkInitArgs to indicate whether the current device is the offerer.
  • Added PeerClientId property to LinkXXXArgs.
  • Added support for empty RTP packets.
  • Significantly improved check thread performance.
  • Replaced time limit on Community edition with local network restriction.
  • Replaced iOS and Mac video chat examples with complete WebRTC examples.
  • Removed "google-ice" support now that Google is following proper RFC spec.
  • Fixed audio render bug in .NET WebRTC.
  • Fixed bug in WebRTC where a blank stream for audio/video might get initialized even if audio/video was not being captured.
  • Various performance improvements for iOS/Mac.
  • Updated .NET WebRTC to use WASAPI when available.
  • Updated JavaScript WebRTC wrapper to bring it inline with latest changes in Chrome M26.
  • Updated VP8.NET reference.
  • Updated documentation.

2.1.2

  • Some breaking API changes were required in this release. See below for a complete list of the changes.

  • Added base library for JavaScript.

  • Added WebRTC libraries for .NET and JavaScript.
  • Added WebRTC WebSync libraries for .NET and JavaScript.
  • Removed FM.WebSync.IceLink and its WebSync client extension methods. Replaced with FM.IceLink.WebSync with its WebSyncConnectionHub class.
  • Added ConnectionHub class to simplify connection management.
  • Added ConnectionHubProvider for custom ConnectionHub implementations.
  • Added SimpleConnectionHub for managing SimpleClient-based connections.
  • Added WebSyncConnectionHub for managing WebSync-based connections.
  • Added PeerConnection class for WebRTC connections.
  • Added PeerConnectionHub class to simplify WebRTC connection management.
  • Added SimplePeerConnectionHub for managing SimpleClient-based WebRTC connections.
  • Added WebSyncPeerConnectionHub for managing WebSync-based WebRTC connections.
  • Added IsOffer flag to OfferAnswer class.
  • Added generic RTCP support.
  • Fixed bug where RTP packets could not have a payload type of 0.
  • Fixed bug where sending an RTP packet would modify the packet.
  • Updated the SimpleClient/SimpleServer API to accept a group name for grouping connections.
  • Updated the offer/answer negotiation to better support disparate media stream format and cryptography support.
  • Updated the Connection API to allow the Accept operation to take place before Offer so connection initialization procedures can be simplified.
  • Updated NSString comparisons in Cocoa to properly check for nil.
  • Updated examples.
  • Updated download package layout.
  • Updated documentation.
  • Summary of API Changes
  • API changes are usually reserved for major releases. However, in order to support out-of-order Accept/Create operations for answering agents (as per the WebRTC specification), some changes were unfortunately necessary. The result is an enhanced API that allows agents receiving an offer to accept it before creating an answer response.

  • Additionally, the FM.WebSync.IceLink extension has been replaced with the FM.IceLink.WebSync extension. Extension methods on the WebSync client have been removed in favour of ConnectionHub implementations that use a WebSync provider class (WebSyncConnectionHubProvider). This better reflects the intended usage of WebSync within the context of an IceLink application, improves the readability of applications built with both technologies, removes confusion associated with similarly named functions and duplicate code, and allows for an intuitive understanding of the underlying functionality.

  • The following API changes involve moving properties from CreateArgs and AcceptArgs objects (used in Connection.Create and Connection.Accept) to the Connection object itself.

  • Previous New
  • CreateArgs(StreamDescription[]) Connection(StreamDescription[])
  • CreateArgs.RelayUsername/RelayPassword/RelayRealm Connection.RelayUsername/RelayPassword/RelayRealm
  • CreateArgs.OnCandidate(CreateCandidateArgs) Connection.OnCandidate(ConnectionCandidateArgs)
  • AcceptArgs.OnReceive(AcceptReceiveArgs) Connection.OnReceive(ConnectionReceiveArgs)
  • AcceptArgs.OnClose(AcceptCloseArgs) Connection.OnClose(ConnectionCloseArgs)
  • AcceptArgs.OnSuccess(AcceptSuccessArgs) Connection.OnOpen(ConnectionOpenArgs)

2.1.1

  • Updated documentation.

2.1.0

  • Added assemblies for Windows Phone 8.0.
  • Removed socket limit in Community edition.
  • Reduced reconnection delay in Community edition.
  • Fixed bugs in SimpleClient/SimpleServer connections.

2.0.0.12

  • Initial release. Build number synchronized with latest FM release.