IceLink 3.0.11 was released over the weekend. This release focused on A/V and connection quality with some refactoring of the Web examples in order to highlight API parity between the browsers, ActiveX plugin, and the native iRTC stack.
There are currently three known issues in this release as outlined below.
New Features:
- Pooled buffers and buffer subsets can now be resized as long as the operation does not require the allocation of new memory;
- Exposed FM.IceLink.Candidate.TurnTransportProtocol that gets or sets Transport Protocol in use by this candidate when communicating with Turn (relay) server;
- Added LocalMedia.getView() and RemoteMedia.getView() in the JavaScript API. It is not longer necessary to create DomVideoSink or DomAudioSink objects or access audio/video tracks directly. Views can be accessed immediately without waiting for the connection to establish. This is part of the effort to establish parity between the JavaScript and non-JavaScript SDKs;
- Added the ability to create a RemoteMedia instance to the JavaScript API. If a RemoteMedia instance is not passed into the AudioStream or VideoStream constructors, one will be automatically created to maintain backwards compatibility. Connection.getRemoteMedia() is deprecated, but still accessible for backwards compatibility. This is part of the effort to establish parity between the JavaScript and non-JavaScript SDKs;
- Added the ability to create new Connection, AudioStream, VideoStream, DataStream, DataChannel, and LocalMedia instances without using the Factory in JavaScript. The Factory class is now deprecated, but still accessible for backwards compatibility. This is part of the effort to establish parity between the JavaScript and non-JavaScript SDKs;
- Upgraded WebSync libraries to 4.9.25;
- Added source code to pre-generate DTLS certificate in Xamarin Examples to cut down connection times;
- Added source code to JavaScript/TypeScript Example to refresh ActiveX after CAB installation to allow remote media to be rendered more fluidly;
- Added Candidate and description logging for ActiveX;
- Added several IObject and DRYed up the IObjectSafety constraint in ActiveX to bring API parity for the ActiveX and JavaScript with the native platforms (including, but not limited to getError() API);
- Added generic Exception handler to UdpSocket;
- Added support in iOS h.264 decoder for Single NALU mode.
Breaking Changes:
- Removed AudioTrack.setRemoteDomAudioSink and VideoTrack.setRemoteDomVideoSink from the JavaScript API. This is part of the effort to establish parity between the JavaScript and non-JavaScript SDKs. The functionality of these two methods is now handled automatically within the SDK, so any lines of code referencing these methods can safely be removed.
Known Issues:
- Currently, Android x86 devices work with audio-only mode and AEC disabled. Android x86 platforms throw UnsatisfiedLinkErrors when loading audio processing or VPX codecs. We are investigating a resolution to these native libs to bring full support for x86 platforms running Android.
- macOS h.264 using VideoToolbox is logging NSOSStatusErrorDomain Code=-12902 when attempting to encode h.264 frames. We are in the process of building/shipping a hotfix for this issue.
- Audio quality degrades under severe networking conditions. There are no known bugs related to this issue, but we are aware that after 20% loss, some clipping is occurring. Beyond 30% loss, audio quality becomes unusable on some platforms. We are working towards improving our packet loss concealment algorithms to bring audio quality to usable levels with as much as 50% packet loss on networks with relatively short round trip times.
Bug Fixes:
- Resolved an issue where a packet could be raised out-of-order by the FEC/jitter layer;
- Audio stream and video stream should allow null tracks in JavaScript/TypeScript;
- Resolved an issue in the .NET SDK where a non-SocketException would not be handled by the UdpSocket receiving thread;
- Resolved an issue in the JavaScript/TypeScript SDK where an error-level log message could be handled as a debug-level log message;
- Resolved an issue in the .NET SDK where a resize of the RTP packet for contributing sources could cause an exception depending on the type of the backing DataBuffer;
- Resolved an issue causing iOS to iOS conferences using h.264 to not render video;
- Resolved a stride issue causing video from h.264 video streams on iOS to have skewed rendered video on some models of iPhone;
- Resolved several audio issues on various Android OS versions and hardware causing sound not to render in some cases, volume to be low, etc. This is resolved in the Examples code as there is likely further refinement needed on other hardware. For example, Samsung S7 using Android 6.x would not render audio when using speaker phone, but would on Android 7.x. Nexus 6P would play low volume on all OSes tested;
- Resolved a logger issue where log messages longer than 2000 characters would be logged multiple times;
- Rebuild openh264 Android, Linux, and macOS libraries fixing a segfault in Java languages;
- Resolved an index out of bounds exception when null video buffers are passed to VideoFrames when Mute is enabled;
- Ensured that ActiveX PluginConnection properly raises events to the proper handlers in Javascript;
- Worked-around an issue where Chrome 39+ sends incorrect rollover counter in SRTP context;
- Resolve an issue in RCA Crypto layer causing an exception in Unity;
- Resolved an issue in Android.AudioRecordSource causing audio not to be rendered on some hardware when DataBuffer polling was enabled;
- Resolved an issue where SDP Direction is missing in session descriptions, assume that direction is SendReceive;
- Ensured that connection data in SDP media description is populated with a server reflexive candidate rather than the local candidate from the current Active pair;
- Resolved an issue in ActiveX installer where installation would not start after uninstalling a prior CAB;
- Resolved an issue where MediaStreams without Sources or Sinks were generating null reference exceptions on startup;
- Fixed a bug where a Connection detects loss of connectivity and then detects connectivity regain, then it still transitions to the FAILED state. Now connection remains in Connected state. This does not affect cases where Connection is lost permanently and attempt to establish a new connection is made.
Head on over to the Downloads page to pick up the latest!
Comments
0 comments
Please sign in to leave a comment.