5.0 Changelog: Twilio Video Android
The Twilio Programmable Video SDKs use Semantic Versioning.
5.1.0 (November 22nd, 2019)
Improvements
- The SDK can now be compiled alongside another WebRTC based dependency. Please perform the
following steps to properly upgrade to
5.1.0
- Modify the classpath of any java files used from
org.webrtc.*
totvi.webrtc.*
. Calling APIs to any class inorg.webrtc.*
will have no effect within the Video SDK. - Perform the following modifications to your proguard file when compiling the Video SDK for a release build with obfuscation.
- Change
-keep class org.webrtc.** { *; }
to-keep class tvi.webrtc.** { *; }
- Change
-dontwarn org.webrtc.**
to-dontwarn tvi.webrtc.**
- Modify the classpath of any java files used from
Known issues
- Unpublishing and republishing a
LocalAudioTrack
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
.
Size Report
ABI | APK Size Impact |
---|---|
universal | 22.9MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.3MB |
x86_64 | 6.4MB |
5.0.1 (November 6th, 2019)
Bug Fixes
- Fixed a deadlock that could occur when destroying a
Room
without waiting forRoom.Listener.onDisconnected(...)
to arrive. - Fixed a crash which could occur when disconnecting from a
Room
with dominant speaker enabled.
Known issues
- Unpublishing and republishing a
LocalAudioTrack
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
.
Size Report
ABI | APK Size Impact |
---|---|
universal | 22.9MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.3MB |
x86_64 | 6.4MB |
5.0.0 (October 23rd, 2019)
5.0 is now generally available. Thank you for all the feedback from our beta adopters. This release includes Global low latency (GLL) signaling with IPv4 and IPv6 support.
Known issues
- Unpublishing and republishing a
LocalAudioTrack
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
.
Size Report
ABI | APK Size Impact |
---|---|
universal | 22.9MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.3MB |
x86_64 | 6.4MB |
5.0.0-beta4 (October 2nd, 2019)
Network Quality API
- Implemented the Network Quality functionality for Group Rooms:
- The Network Quality feature is disabled by default, to enable it set the
ConnectOptions.Builder.enableNetworkQuality
property totrue
when connecting to a Group Room.- To determine the current network quality level for your Local Participant, call
LocalParticipant.getNetworkQualityLevel()
. Note, this will returnNETWORK_QUALITY_LEVEL_UNKNOWN
if:- The
ConnectOptions.networkQualityEnabled
property was set tofalse
- Using a Peer-to-Peer room
- The network quality level has not yet been computed
- The
- Network Quality Level for Remote Participants will be available in a future release
- Implementing the
onNetworkQualityLevelChanged
method on yourLocalParticipant.Listener
will allow you to receive callbacks when the network quality level changes
- To determine the current network quality level for your Local Participant, call
// Enable network quality ConnectOptions connectOptions = new ConnectOptions.Builder(token) .roomName(roomName) .enableNetworkQuality(true) .build(); // Override onNetworkLevelChanged to observe network quality level changes LocalParticipant.Listener localParticipantListener = new LocalParticipant.Listener() { ... @Override public void onNetworkQualityLevelChanged( @NonNull LocalParticipant localParticipant, @NonNull NetworkQualityLevel networkQualityLevel) {} } // Connect to room and register listener Room room = Video.connect(context, connectOptions, roomListener); LocalParticipant localParticipant = room.getLocalParticipant(); localParticipant.setListener(localParticipantListener); // Get current network quality localParticipant.getNetworkQualityLevel();
API Changes
- When a Participant connects to a
Room
, the WebSocket handshake is required to complete in 15 seconds or less, otherwiseTwilioException.SIGNALING_CONNECTION_ERROR_EXCEPTION
is raised. - Added
LocalParticipant.signalingRegion
. You can use this property to determine where your Participant connected to a Room, especially when using the default value of "gll" forConnectOptions.Builder.region
. - Added
Room.mediaRegion
. You can use this property to determine where media is being processed in a Group Room. EncodingParameters
now expresses maximum bitrates in Kilobits per second (Kbps) instead of bits per second (bps).
// Before EncodingParameters encodingParameters = new EncodingParameters(64000, 800000);
// After EncodingParameters encodingParameters = new EncodingParameters(64, 800);
Enhancements
- Increased the reliability of
LocalDataTrack
by monitoring its send buffer. Sending too many messages, or sending single messages larger than 16 KB no longer causes the underlying channel(s) to close. These requests are ignored instead.
Bug Fixes
LocalDataTrack
should no longer end up in an inconsistent state after attempting to send a message larger than 16 KB.
Known issues
- Unpublishing and republishing a
LocalAudioTrack
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
.
Size Report
ABI | APK Size Impact |
---|---|
universal | 22.9MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.3MB |
x86_64 | 6.4MB |
5.0.0-beta3 (September 17th, 2019)
Dominant Speaker Detection API
The Dominant Speaker Detection API sends events to your application every time the dominant speaker changes. You can use those events to improve the end user's experience by, for example, highlighting which participant is currently talking.
The Dominant Speaker Detection API is only available for Group Rooms. To enable dominant speaker detection, set the ConnectOptions.dominantSpeakerEnabled
property to true
. Use Room.getDominantSpeaker()
to determine the current dominant speaker. Implement Room.Listener.onDominantSpeakerChanged()
method to receive callbacks when the dominant speaker changes.
For more information, refer to the API docs and to the dominant speaker tutorial
ConnectOptions connectOptions = new ConnectOptions.Builder(token) .roomName(roomName) .enableDominantSpeaker(true) .build(); Room room = Video.connect(context, connectOptions, roomListener); @Override void onDominantSpeakerChanged( @NonNull Room room, @Nullable RemoteParticipant remoteParticipant) { // Handle dominant speaker change }
API Changes
- Introduced
TwilioException.SIGNALING_DNS_RESOLUTION_ERROR_EXCEPTION
, which is now raised instead ofTwilioException.SIGNALING_CONNECTION_ERROR_EXCEPTION
in the following scenarios: - The device has misconfigured DNS Server(s) on its active network interface.
- The region provided in
ConnectOptions
was invalid. - The device lost its Internet connection before the query could complete.
Enhancements
- Reduced connection times by removing a round trip when:
- Reconnecting after a signaling connection failure
- Connecting with
ConnectOptions.iceOptions
, and overridden Servers - Connecting with default ICE servers (us1 only)
Bug Fixes
- Fixed crash that occurred when rapidly connecting and disconnecting from a room.
- Fixed updating
CameraCapturer.State
when error occurs. - Setting
ConnectOptions.region
to an empty or null value results in the default region being used. - Fixed a bug where native memory was leaked after disconnecting from a
Room
. - Fixed a bug where network monitoring would continue on closed connections in a Peer-to-Peer Room.
Known issues
- In rare cases, the SDK might timeout during a TCP handshake and should be more aggressive at establishing a connection.
- Unpublishing and republishing a
LocalAudioTrack
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
. Size Report
ABI | APK Size Impact |
---|---|
universal | 22.8MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.2MB |
x86_64 | 6.3MB |
5.0.0-beta2 (August 7th, 2019)
Improvements
- The Participant's signaling connection now conforms to Twilio's TLS & Cipher Suite Policy. Support for TLS versions older than 1.2 has been removed.
- Adjusted the buffer sizes used for signaling messages to reduce network fragmentation.
- Setting
video::LogModule::kSignaling
enables logging of low-level connection events.
Bug Fixes
- WebSocket errors are handled immediately, rather than waiting for a timeout to occur.
- Handle rare exceptions when constructing a WebSocket.
Known issues
- Future 5.0.0-beta releases will reduce the number of round-trips required to connect to a Room.
- In rare cases, the SDK might timeout during a TCP handshake and should be more aggressive at establishing a connection.
- Unpublishing and republishing a
LocalAudioTrack
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
.
5.0.0-beta1 (July 16th, 2019)
Improvements
- The SDK uses a new WebSocket based signaling transport, and communicates with globally available signaling Servers over IPv4 and IPv6 networks.
- Added a ConnectOptions.region property. By default, the Client will connect to the nearest signaling Server determined by latency based routing. Setting a value other than "gll" bypasses routing and guarantees that signaling traffic will be terminated in the region that you prefer.
- Participants are considered to be reconnecting within 15 seconds, and are disconnected from a Room after 45 seconds of lost connectivity. #80
- Added and updated public API nullability annotations.
Bug Fixes
- Participants can send messages that are larger than 16 KB.
- The “roomimpl.worker” thread is no longer needed.
Known issues
- Setting
LogModule.SIGNALING
does not produce any logging. - Future 5.0.0-beta releases will reduce the number of round-trips required to connect to a Room.
- In rare cases, the SDK might timeout during a TCP handshake and should be more aggressive at establishing a connection.
- Unpublishing and republishing a
LocalAudioTrack
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
.
Size Report
ABI | APK Size Impact |
---|---|
universal | 22.7MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.2MB |
x86_64 | 6.3MB |
Need some help?
We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.