Skip to contentSkip to navigationSkip to topbar
Rate this page:
On this page

5.0 Changelog: Twilio Video Android


(warning)

Warning

This documentation is for reference only. We are no longer onboarding new customers to Programmable Video. Existing customers can continue to use the product until December 5, 2026(link takes you to an external page).

We recommend migrating your application to the API provided by our preferred video partner, Zoom. We've prepared this migration guide(link takes you to an external page) to assist you in minimizing any service disruption.

(information)

Info

To make sure your app is ready for Android 11 please visit this page(link takes you to an external page).

(warning)

Warning

The Twilio Programmable Video SDKs use Semantic Versioning(link takes you to an external page). Twilio supports version N-1 for 12 months after the first GA release of version N. We recommend you upgrade to the latest version as soon as possible to avoid any breaking changes. Version 5.x is the latest Video Android version.

Support for 4.x will cease on October 23rd, 2020. This branch will only receive fixes for critical issues until that date. Check this guide when planning your migration to 5.x.

Support for Android SDK 3.x ended on February 22nd, 2020.


5.14.0 (January 20th, 2021)

5140-january-20th-2021 page anchor

Enhancements

  • isRecording() API now accurately reflects the current recording state of the Room . In the previous versions of the SDK, isRecording() could return false positives. The onRecordingStarted(...) and onRecordingStopped(...) callbacks will now be invoked when recording for at least a single track in the Room has started and stopped respectively.

Maintenance

  • Removed tvi.webrtc.NetworkMonitor and tvi.webrtc.NetworkMonitorAutoDetect from the libwebrtc.jar provided by the SDK.

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
x866MB
x86_646.1MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
universal22MB

5.13.0 (November 11th, 2020)

5130-november-11th-2020 page anchor

Maintenance

  • Added VideoCapturer#setSurfaceTextureHelper . This method enables SDK provided video capturers to capture to a surface texture using a public API rather than an internal method. While this method is public, capturing to a surface texture is currently only supported with Camera2Capturer , and ScreenCapturer . Capturing to a surface texture will be enabled in a future release.

Bug Fixes

  • Fixed a race condition that could cause a crash or unnecessary web socket signaling reconnection.
  • Fixed a bug where private IP address was not masked properly while publishing insights event.

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
x866MB
x86_646.1MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
universal22MB

5.12.0 (October 7th, 2020)

5120-october-7th-2020 page anchor

AudioDevice API

Use the AudioDevice API to create innovative and advanced in-app audio capabilities. For example, enable pre-recorded messages to be played in-room, or, apply noise reduction algorithms before playing out the received audio.

An AudioDevice is a logical device that is used to capture and render (play out) audio. The captured audio is sent to the remote party, and the received audio is rendered locally. The current DefaultAudioDevice uses the mic for capturing and the local speaker/earpiece/headset for rendering. The AudioDevice API allows for the creation of custom audio capturers and renderers.

See this example(link takes you to an external page) and API docs(link takes you to an external page) to learn more about custom audio devices.

Enhancements

  • Introduced the Video.audioDevice class member. You can now set your own AudioDevice before connecting to a Room .
  • Added DefaultAudioDevice to render and capture audio. By default, the Video SDK uses DefaultAudioDevice to capture and render audio.
  • Added the ability to provide custom audio capturing and rendering via the AudioDevice interface. AudioFormat describes the audio that is being captured and rendered.

Maintenance

  • The SDK compileSDKVersion and targetSDKVersion SDK was updated to 30 from 28. No changes are required to migrate to this version in an existing application.

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
x866MB
x86_646.1MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
universal22MB

5.11.1 (September 22nd, 2020)

5111-september-22nd-2020 page anchor

Bug Fixes

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
x866MB
x86_646.1MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
universal22MB

5.11.0 (September 16th, 2020)

5110-september-16th-2020 page anchor

Bug Fixes

  • Set the default values of AudioOptions properties to match the default WebRTC values.

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
x866MB
x86_646.1MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
universal21.9MB

5.10.2 (August 18th, 2020)

5102-august-18th-2020 page anchor

Bug Fixes

  • Fixed a bug on devices with more than two cameras where after CameraCapturer.switchCamera(...) completes, CameraCapturer.getCameraSource() would return an incorrect value. #548(link takes you to an external page)

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
x866MB
x86_646.1MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
universal21.9MB

5.10.1 (August 6th, 2020)

5101-august-6th-2020 page anchor

Bug Fixes

  • Fixed a memory corruption crash that occurs when recovering from a media server failure in Group Rooms.

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
x866MB
x86_646.1MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
universal21.9MB

5.10.0 (July 24th, 2020)

5100-july-24th-2020 page anchor

API Changes

  • If your application attempts to capture with a source that is not available, then CameraCapturer will raise an error callback via CameraCapturer.Listener .

Bug Fixes

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal21.9MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
x866MB
x86_646.1MB

5.9.0 (July 7th, 2020)

590-july-7th-2020 page anchor

Enhancements

  • Reduced connection times by acquiring IceServers during the initial handshake with Twilio's signaling server rather than sending a request to a different endpoint
  • IceServers are now localized to your Participant's region rather than using Global Low Latency routing
  • The SDK no longer depends on ecs.us1.twilio.com:443

API Changes

  • The following IceOptions properties are deprecated and setting them will have no effect.
    • IceOptions.abortOnIceServersTimeout
    • IceOptions.iceServersTimeout

Bug Fixes

  • Fixed a bug where IceServers might not be fetched on a dual-stack device where the IPv6 network interface is not reachable. [CSDK-3295]
  • Fixed a bug where passing in IceTransportPolicy.RELAY to the IceOptions.Builder().iceTransportPolicy() method was not being used. [GSDK-2148]

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal21.9MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
x866MB
x86_646.1MB

5.8.1 (June 16th, 2020)

581-june-16th-2020 page anchor

Bug Fixes

  • Fixed the issue where unpublishing and then republishing a LocalVideoTrack using VP8 simulcast does not complete.

Maintenance

  • Upgraded to Android Gradle Plugin 4.0.0 and Gradle 6.1.1
  • Upgraded the SDK to use AndroidX. Please follow the Migrating to AndroidX instructions to consume Video Android 5.8.1 in your app.

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal22MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
x866MB
x86_646.1MB

5.8.0 (June 5th, 2020)

580-june-5th-2020 page anchor

Features

features page anchor

Bandwidth Profile

bandwidth-profile page anchor

You can now configure how your available downlink bandwidth will be distributed among your subscribed RemoteVideoTracks by using a new optional ConnectOptions parameter bandwidthProfile. For more details and best practices, visit the Network Bandwidth Profile API guide. Here is a brief example:


_25
Room room = Video.connect(context, new ConnectOptions.Builder(accessToken)
_25
.bandwidthProfile(new BandwidthProfileOptions(new VideoBandwidthProfileOptions.Builder()
_25
// Minimum subscribe priority of Dominant Speaker's RemoteVideoTracks
_25
.dominantSpeakerPriority(TrackPriority.HIGH)
_25
// Maximum bandwidth (Kbps) to be allocated to subscribed RemoteVideoTracks
_25
.maxSubscriptionBitrate(150000L)
_25
// Max number of visible RemoteVideoTracks. Other RemoteVideoTracks will be switched off
_25
.maxTracks(3)
_25
// Subscription mode: COLLABORATION, GRID, PRESENTATION
_25
.mode(BandwidthProfileMode.COLLABORATION)
_25
.renderDimensions(new HashMap<TrackPriority, VideoDimensions>(){{
_25
// Desired render dimensions of RemoteVideoTracks with priority LOW.
_25
put(TrackPriority.LOW, VideoDimensions.CIF_VIDEO_DIMENSIONS);
_25
_25
// Desired render dimensions of RemoteVideoTracks with priority STANDARD.
_25
put(TrackPriority.STANDARD, VideoDimensions.VGA_VIDEO_DIMENSIONS);
_25
_25
// Desired render dimensions of RemoteVideoTracks with priority HIGH.
_25
put(TrackPriority.HIGH, VideoDimensions.HD_720P_VIDEO_DIMENSIONS);
_25
}})
_25
// Track Switch Off mode: DETECTED, PREDICTED, DISABLED
_25
.trackSwitchOffMode(TrackSwitchOffMode.DETECTED)
_25
.build()))
_25
.build(),
_25
roomListener);

As part of the Bandwidth Profile API, you can now specify the mode to control remote video track switch off behavior. The new TrackSwitchOffMode enum can be specified in the VideoBandwidthProfileOptions class and can be set to one of the following:

  • TrackSwitchOffMode.PREDICTED - In this mode, RemoteVideoTrack s are pro-actively switched off when network congestion is predicted by the bandwidth estimation mechanism. This mode is used by default if not specified.
  • TrackSwitchOffMode.DETECTED - In this mode, RemoteVideoTrack s are switched off only when network congestion is detected.
  • TrackSwitchOffMode.DISABLED - In this mode, RemoteVideoTrack s will not be switched off. Instead tracks will be adjusted to lower quality.

Track switch off events are provided via two additional callbacks to RemoteParticipant.Listener.


_13
RemoteParticipant.Listener remoteParticipantListener = new RemoteParticipant.Listener() {
_13
...
_13
_13
@Override
_13
public void onVideoTrackSwitchedOff(
_13
@NonNull RemoteParticipant remoteParticipant,
_13
@NonNull RemoteVideoTrack remoteVideoTrack) {}
_13
_13
@Override
_13
public void onVideoTrackSwitchedOn(
_13
@NonNull RemoteParticipant remoteParticipant,
_13
@NonNull RemoteVideoTrack remoteVideoTrack) {}
_13
}

While publishing a local track, you can now optionally specify its publish priority.


_13
/*
_13
* Publish a local track with high priority
_13
*
_13
* In addition, local track publications now contain a priority property which reflect the priority of
_13
* the published track.
_13
*/
_13
LocalTrackPublicationOptions localTrackPublicationOptions = new LocalTrackPublicationOptions(TrackPriority.HIGH);
_13
localParticipant.publishTrack(localVideoTrack, localTrackPublicationOptions);
_13
_13
/*
_13
* The publish priority is also represented in remote audio, video, and data track publications.
_13
*/
_13
remoteVideoTrackPublication.getPublishPriority();

Also, the publisher's TrackPriority for the corresponding local Track can be updated after a track has been published.


_10
localVideoTrackPublication.setPriority(TrackPriority.STANDARD);

When a TrackPriority is updated after the track has been published, remote participants will be alerted to the change via the onAudioTrackPublishPriorityChanged(), onVideoTrackPublishPriorityChanged() and onDataTrackPublishPriorityChanged() Listener methods.

Additionally, you can set a subscriber side priority for a RemoteVideoTrack.


_10
/*
_10
* Set a remote video track priority to HIGH. Note that this feature is only available
_10
* for RemoteVideoTrack.
_10
*/
_10
remoteVideoTrack.setPriority(TrackPriority.HIGH);
_10
_10
/*
_10
* Get the current remote video track priority.
_10
*/
_10
TrackPriority remoteVideoTrackPriority = remoteVideoTrack.getPriority();

This signals to the media server the relative importance of the track with respect to other tracks that may be shared to the Room. The media server takes this into account while allocating a subscribing RemoteParticipant's bandwidth to the corresponding remote track. If you do not specify a priority, then it defaults to TrackPriority.STANDARD.

  • Added TrackPriority for track priorities of Room .
  • Added a new class LocalTrackPublicationOptions to specify track publication options when publishing tracks via LocalParticipant .
  • Added additional LocalParticipant.publishTrack methods that allow developers to specify LocalTrackPublicationOptions .
  • Added a new TrackPriority property to LocalAudioTrackPublication , LocalVideoTrackPublication , and LocalDataTrackPublication .
  • Added a new read-only property publishPriority of type TrackPriority to RemoteAudioTrackPublication , RemoteVideoTrackPublication , and RemoteDataTrackPublication . These read-only properties fetch the priorities at which the remote Audio, Video, and Data Tracks were published.
  • Added the RemoteParticipant.Listener.onAudioTrackPublishPriorityChanged() , RemoteParticipant.Listener.onVideTrackPublishPriorityChanged() and RemoteParticipant.Listener.onDataTrackPublishPriorityChanged() methods.
  • Changed the annotation of LocalParticipant.getLocalAudioTracks , LocalParticipant.getLocalVideoTracks , and LocalParticipant.getLocalVideoTracks from @Nullable to @NonNull . These methods were incorrectly annotated in a previous release.

Bug Fixes

  • Fixed a crash when the SDK was processing a local SDP that had incorrect number of SSRCs when applying VP8 simulcast.

Known issues

  • Unpublishing and then republishing a LocalVideoTrack using VP8 simulcast does not complete. As a workaround, disable the Track instead.
  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal21.9MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
x866MB
x86_646.1MB

5.7.0 (May 29th, 2020)

570-may-29th-2020 page anchor

Enhancements

  • Previously, the Video Android SDK would fail connection attempts if the signaling server was busy with too many requests. Now, it will try again after a server specified backoff period either until it is successfully connected or the server asks it to stop trying. In this case, the onConnectFailure method is called with SIGNALING_SERVER_BUSY_EXCEPTION .

_10
@Override
_10
public void onConnectFailure(@NonNull Room room, @NonNull TwilioException twilioException) {
_10
if (twilioException.getCode() == TwilioException.SIGNALING_SERVER_BUSY_EXCEPTION) {
_10
Log.d("RoomListener", "Twilio's signaling server cannot accept connection requests at this time.");
_10
}
_10
}

API Changes

  • Added error code definitions:
    • SIGNALING_SERVER_BUSY_EXCEPTION
    • ROOM_ACCOUNT_LIMIT_EXCEEDED_EXCEPTION
    • PARTICIPANT_ACCOUNT_LIMIT_EXCEEDED_EXCEPTION
    • PARTICIPANT_INVALID_SUBSCRIBE_RULE_EXCEPTION
    • TRACK_DATA_TRACK_MESSAGE_TOO_LARGE_EXCEPTION
    • TRACK_DATA_TRACK_SEND_BUFFER_FULL_EXCEPTION
    • MEDIA_DATA_TRACK_FAILED_EXCEPTION
    • MEDIA_DTLS_TRANSPORT_FAILED_EXCEPTION
    • MEDIA_ICE_RESTART_NOT_ALLOWED_EXCEPTION

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal21.8MB
armeabi-v7a4.8MB
arm64-v8a5.7MB
x866MB
x86_646.1MB

5.6.0 (April 30th, 2020)

560-april-30th-2020 page anchor

Enhancements

  • A subset of Android devices provide an OpenSLES(link takes you to an external page) implementation. Although more efficient, the use of OpenSLES occasionally causes echo. As a result, the Video SDK now disables OpenSLES by default unless explicitly enabled. To enable OpenSLES, execute the following before invoking Video.connect(...) : tvi.webrtc.voiceengine.WebRtcAudioManager.setBlacklistDeviceForOpenSLESUsage(false) .

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

5.5.1 (April 24th, 2020)

551-april-24th-2020 page anchor

Bug Fixes

  • Fixed an occasional native crash when disconnecting from a Room.
  • Fixed a bug when establishing a signaling WebSocket that might cause only one address family (IPv4 or IPv6) to be tried.
  • Publish stats reports every 10 seconds and active ICE candidate pair messages every 20 seconds. Previously both were reported every 4 seconds.

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal21.8MB
armeabi-v7a4.8MB
arm64-v8a5.6MB
x866MB
x86_646MB

5.5.0 (April 3rd, 2020)

550-april-3rd-2020 page anchor

Enhancements

  • Added updateCaptureRequest to Camera2Capturer . This API allows developers to update the CaptureRequest(link takes you to an external page) of an ongoing Camera2Capturer session. Reference the following snippet as an example of how to turn the flash on for the Camera2Capturer .

_10
camera2Capturer.updateCaptureRequest(
_10
new CaptureRequestUpdater() {
_10
@Override
_10
public void apply(@NotNull CaptureRequest.Builder captureRequestBuilder) {
_10
captureRequestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);
_10
}
_10
});

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal21.8MB
armeabi-v7a4.8MB
arm64-v8a5.6MB
x866MB
x86_646MB

5.4.0 (March 31st, 2020)

540-march-31st-2020 page anchor

Enhancements

  • Reduced the SDK size. The table below highlights the updated app size impact.
ABIApp Size Impact 5.3.0App Size Impact 5.4.0
universal22.9MB21.8MB
armeabi-v7a5MB4.8MB
arm64-v8a5.9MB5.6MB
x866.2MB6MB
x86_646.4MB6MB

Bug Fixes

  • Fixed an issue(link takes you to an external page) integrating the SDK with applications that contain an attribute of scaleType , mirror , or overlaySurface . These attributes defined for VideoView and VideoTextureView have been prefixed with tvi to prevent attribute name clashes. Reference the following snippets to update your application layout files.

Configure video views before 5.4.0


_10
<com.twilio.video.VideoView
_10
app:overlaySurface="true"
_10
app:mirror="true"
_10
app:scaleType="fit"/>
_10
_10
<com.twilio.video.VideoTextureView
_10
app:mirror="true"
_10
app:scaleType="fit"/>

Configure video views in 5.4.0+


_10
<com.twilio.video.VideoView
_10
app:tviOverlaySurface="true"
_10
app:tviMirror="true"
_10
app:tviScaleType="fit"/>
_10
_10
<com.twilio.video.VideoTextureView
_10
app:tviMirror="true"
_10
app:tviScaleType="fit"/>

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal21.8MB
armeabi-v7a4.8MB
arm64-v8a5.6MB
x866MB
x86_646MB

5.3.0 (March 27th, 2020)

530-march-27th-2020 page anchor

Features

  • Implemented a boolean Connect Option enableIceGatheringOnAnyAddressPorts that allows gathering of ICE candidates from "any address" ports. The default value is false. Setting it to true will allow applications to work in a wider set of VPN environments.

Bug Fixes

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal22.9MB
armeabi-v7a5MB
arm64-v8a5.9MB
x866.2MB
x86_646.4MB

5.2.0 (March 9th, 2020)

520-march-9th-2020 page anchor

Features

  • Implemented Network Quality for Remote Participants in Group Rooms:
    • To enable the Network Quality functionality, set the ConnectOptions.Builder.enableNetworkQuality property to true when connecting to a Group Room. By default this enables network quality level changes to be reported for the Local Participant. To also receive network quality level changes for the Remote Participants, a configured NetworkQualityConfiguration object needs to be supplied to the ConnectOptions.Builder.networkQualityConfiguration property.
    • The networkQualityLevel property has been moved from the LocalParticipant class to the Participant interface.
    • To determine the current network quality level for both Local and Remote Participants, query the networkQualityLevel property. Note, this will return NETWORK_QUALITY_LEVEL_UNKNOWN if:
      • The ConnectOptions.networkQualityEnabled property was set to false OR
      • Using a Peer-to-Peer room OR
      • The network quality level has not yet been computed
    • Implementing the onNetworkQualityLevelChanged method on your LocalParticipant.Listener will allow you to receive callbacks when the network quality level changes for the Local Participant.
    • Implementing the onNetworkQualityLevelChanged method on your RemoteParticipant.Listener will allow you to receive callbacks when the network quality level changes for the Remote Participant.

_39
// Enable network quality
_39
NetworkQualityConfiguration configuration =
_39
new NetworkQualityConfiguration(
_39
NetworkQualityVerbosity.NETWORK_QUALITY_VERBOSITY_MINIMAL,
_39
NetworkQualityVerbosity.NETWORK_QUALITY_VERBOSITY_MINIMAL);
_39
_39
ConnectOptions connectOptions =
_39
new ConnectOptions.Builder(token)
_39
.roomName(roomName)
_39
.enableNetworkQuality(true)
_39
.networkQualityConfiguration(configuration)
_39
.build();
_39
_39
// Override onNetworkLevelChanged to observe network quality level changes
_39
LocalParticipant.Listener localParticipantListener = new LocalParticipant.Listener() {
_39
...
_39
_39
@Override
_39
public void onNetworkQualityLevelChanged(
_39
@NonNull LocalParticipant localParticipant,
_39
@NonNull NetworkQualityLevel networkQualityLevel) {}
_39
}
_39
_39
RemoteParticipant.Listener remoteParticipantListener = new RemoteParticipant.Listener() {
_39
...
_39
_39
@Override
_39
public void onNetworkQualityLevelChanged(
_39
@NonNull RemoteParticipant remoteParticipant,
_39
@NonNull NetworkQualityLevel networkQualityLevel) {}
_39
}
_39
_39
// Connect to room and register listener
_39
Room room = Video.connect(context, connectOptions, roomListener);
_39
LocalParticipant localParticipant = room.getLocalParticipant();
_39
localParticipant.setListener(localParticipantListener);
_39
_39
// Get current network quality
_39
localParticipant.getNetworkQualityLevel();

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal22.8MB
armeabi-v7a5MB
arm64-v8a5.9MB
x866.2MB
x86_646.3MB

5.1.2 (March 2nd, 2020)

512-march-2nd-2020 page anchor

Maintenance

  • Updated to Android Gradle Plugin 3.6.0.

Bug Fixes

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal22.8MB
armeabi-v7a5MB
arm64-v8a5.9MB
x866.2MB
x86_646.3MB

5.1.1 (February 14th, 2020)

511-february-14th-2020 page anchor

Enhancements

  • Reduced bandwidth usage for Insights reporting by up to 75%.
  • Data track per-message size limit has been increased to 64 KB.

Bug Fixes

  • Fixed a crash which could occur when destroying a Room while the TCP handshake for the signaling connection is in progress.
  • Fixed intermittent crash when sending data on a data track while in the process of closing the track due to remote participant disconnect.

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal22.8MB
armeabi-v7a5MB
arm64-v8a5.9MB
x866.2MB
x86_646.3MB

5.1.0 (November 22nd, 2019)

510-november-22nd-2019 page anchor

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.* to tvi.webrtc.* . Calling APIs to any class in org.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.**

Known issues

  • Unpublishing and republishing a LocalAudioTrack or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal22.9MB
armeabi-v7a5MB
arm64-v8a5.9MB
x866.3MB
x86_646.4MB

5.0.1 (November 6th, 2019)

501-november-6th-2019 page anchor

Bug Fixes

  • Fixed a deadlock that could occur when destroying a Room without waiting for Room.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 or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal22.9MB
armeabi-v7a5MB
arm64-v8a5.9MB
x866.3MB
x86_646.4MB

5.0.0 (October 23rd, 2019)

500-october-23rd-2019 page anchor

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 or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal22.9MB
armeabi-v7a5MB
arm64-v8a5.9MB
x866.3MB
x86_646.4MB

5.0.0-beta4 (October 2nd, 2019)

500-beta4-october-2nd-2019 page anchor
  • 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 to true when connecting to a Group Room.
    • To determine the current network quality level for your Local Participant, call LocalParticipant.getNetworkQualityLevel(). Note, this will return NETWORK_QUALITY_LEVEL_UNKNOWN if:
      • The ConnectOptions.networkQualityEnabled property was set to false
      • Using a Peer-to-Peer room
      • The network quality level has not yet been computed
    • Network Quality Level for Remote Participants will be available in a future release
    • Implementing the onNetworkQualityLevelChanged method on your LocalParticipant.Listener will allow you to receive callbacks when the network quality level changes

_24
// Enable network quality
_24
ConnectOptions connectOptions =
_24
new ConnectOptions.Builder(token)
_24
.roomName(roomName)
_24
.enableNetworkQuality(true)
_24
.build();
_24
_24
// Override onNetworkLevelChanged to observe network quality level changes
_24
LocalParticipant.Listener localParticipantListener = new LocalParticipant.Listener() {
_24
...
_24
_24
@Override
_24
public void onNetworkQualityLevelChanged(
_24
@NonNull LocalParticipant localParticipant,
_24
@NonNull NetworkQualityLevel networkQualityLevel) {}
_24
}
_24
_24
// Connect to room and register listener
_24
Room room = Video.connect(context, connectOptions, roomListener);
_24
LocalParticipant localParticipant = room.getLocalParticipant();
_24
localParticipant.setListener(localParticipantListener);
_24
_24
// Get current network quality
_24
localParticipant.getNetworkQualityLevel();

API Changes

  • When a Participant connects to a Room , the WebSocket handshake is required to complete in 15 seconds or less, otherwise TwilioException.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" for ConnectOptions.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).

_10
// Before
_10
EncodingParameters encodingParameters = new EncodingParameters(64000, 800000);


_10
// After
_10
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 or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal22.9MB
armeabi-v7a5MB
arm64-v8a5.9MB
x866.3MB
x86_646.4MB

5.0.0-beta3 (September 17th, 2019)

500-beta3-september-17th-2019 page anchor

Dominant Speaker Detection API

dominant-speaker-detection-api page anchor

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(link takes you to an external page) and to the dominant speaker tutorial


_12
ConnectOptions connectOptions =
_12
new ConnectOptions.Builder(token)
_12
.roomName(roomName)
_12
.enableDominantSpeaker(true)
_12
.build();
_12
Room room = Video.connect(context, connectOptions, roomListener);
_12
_12
@Override
_12
void onDominantSpeakerChanged(
_12
@NonNull Room room, @Nullable RemoteParticipant remoteParticipant) {
_12
// Handle dominant speaker change
_12
}

API Changes

  • Introduced TwilioException.SIGNALING_DNS_RESOLUTION_ERROR_EXCEPTION, which is now raised instead of TwilioException.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 or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant . Size Report
ABIAPK Size Impact
universal22.8MB
armeabi-v7a5MB
arm64-v8a5.9MB
x866.2MB
x86_646.3MB

5.0.0-beta2 (August 7th, 2019)

500-beta2-august-7th-2019 page anchor

Improvements

  • The Participant's signaling connection now conforms to Twilio's TLS & Cipher Suite Policy(link takes you to an external page) . 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 or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

5.0.0-beta1 (July 16th, 2019)

500-beta1-july-16th-2019 page anchor

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(link takes you to an external page)
  • 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 or LocalVideoTrack might not be seen by Participants. As a result, tracks published after a Room.State.RECONNECTED event might not be subscribed to by a RemoteParticipant .

Size Report

ABIAPK Size Impact
universal22.7MB
armeabi-v7a5MB
arm64-v8a5.9MB
x866.2MB
x86_646.3MB

Rate this page: