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

4.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.

The Twilio Programmable Video SDKs use Semantic Versioning(link takes you to an external page).


4.4.1 (September 24th, 2020)

441-september-24th-2020 page anchor

Bug Fixes

  • Fixed an SCTP related WebRTC security vulnerability detailed here(link takes you to an external page) .

Known issues

  • Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72(link takes you to an external page)
  • Participant disconnect event can take up to 120 seconds to occur #80(link takes you to an external page) #73(link takes you to an external page)
  • The SDK is not side-by-side compatible with other WebRTC based libraries #340(link takes you to an external page)
  • Codec preferences do not function correctly in a hybrid codec Group Room with the following codecs:
    • ISAC
    • PCMA
    • G722
    • VP9
  • 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 .
  • Using Camera2Capturer with a camera ID that does not support ImageFormat.PRIVATE capture outputs results in a runtime exception. Reference this(link takes you to an external page) issue for guidance on a temporary work around.

Size Report

ABIAPK Size Impact
universal22.5MB
armeabi-v7a5MB
arm64-v8a5.8MB
x866.1MB
x86_646.2MB

4.4.0 (October 1st, 2019)

440-october-1st-2019 page anchor

API Changes

Network Quality API

network-quality-api 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();

For more information, refer to the API docs(link takes you to an external page) and to the Network Quality Tutorial.

Known issues

Size Report

ABIAPK Size Impact
universal22.5MB
armeabi-v7a5MB
arm64-v8a5.8MB
x866.1MB
x86_646.2MB

4.3.2 (September 16th, 2019)

432-september-16th-2019 page anchor

Enhancement

  • Upgraded the Gradle plugin used to build the SDK to 3.5.0.

Known issues

Size Report

ABIAPK Size Impact
universal22.5MB
armeabi-v7a5MB
arm64-v8a5.8MB
x866.1MB
x86_646.2MB

4.3.1 (August 23rd, 2019)

431-august-23rd-2019 page anchor

Bug Fixes

  • Fixed updating CameraCapturer.State when error occurs.

Known issues

Size Report

ABIAPK Size Impact
universal22.5MB
armeabi-v7a5MB
arm64-v8a5.8MB
x866.1MB
x86_646.2MB

4.3.0 (August 5th, 2019)

430-august-5th-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

This release is available here(link takes you to an external page)


_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
}

Known issues

Size Report

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

4.2.0 (May 13th, 2019)

420-may-13th-2019 page anchor

Improvements

  • Added field enableAutomaticSubscription to ConnectOptions . enableAutomaticSubscription toggles automatic track subscription. If set to false , the LocalParticipant will receive notifications of track publish events, but will not automatically subscribe to them. If set to true , the LocalParticipant will automatically subscribe to tracks as they are published. If unset, the default is true . Note: This feature is only available for Group Rooms. Toggling the flag in a P2P room does not modify subscription behavior.

Known issues

Size Report

ABIAPK Size Impact
universal22.5MB
armeabi-v7a5MB
arm64-v8a5.8MB
x866.1MB
x86_646.2MB

4.1.2 (April 26th, 2019)

412-april-26th-2019 page anchor

Bug Fixes

  • Fixed stuck aspect ratio when switching orientations with ScreenCapturer .
  • Fixed a bug where media reconnection might fail when the loopback interface is mistakenly chosen as a preferred network interface.

Known issues

Size Report

ABIAPK Size Impact
universal22.5MB
armeabi-v7a5MB
arm64-v8a5.8MB
x866.1MB
x86_646.2MB

4.1.1 (April 11th, 2019)

411-april-11th-2019 page anchor

Improvements

  • Fixed various Lint errors / warnings.

Known issues

Size Report

ABIAPK Size Impact
universal22.5MB
armeabi-v7a5MB
arm64-v8a5.8MB
x866.1MB
x86_646.2MB

4.1.0 (April 3rd, 2019)

410-april-3rd-2019 page anchor

Improvements

  • Added the AudioSink interface. When added to a LocalAudioTrack or RemoteAudioTrack , developers will receive a callback with the raw audio byte buffer from each audio frame. The example below demonstrates adding an AudioSink to a LocalAudioTrack .

_10
AudioSink audioSink = (audioSample, encoding, sampleRate, channels) -> {
_10
Log.v("AudioSink", "Received audio frame");
_10
};
_10
localAudioTrack.addSink(audioSink);

The AudioSink can then be removed with the following code.


_10
localAudioTrack.removeSink(audioSink);

Known issues

Size Report

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

4.0.2 (March 28th, 2019)

402-march-28th-2019 page anchor

Bug Fixes

Known issues

Size Report

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

4.0.1 (March 19th, 2019)

401-march-19th-2019 page anchor

Bug Fixes

  • Room.getStats() will raise a callback to the provided StatsObserver if called while Room.getState() == Room.State.RECONNECTING .
  • Fixed a crash related to stats gathering which could occur when insights reporting is enabled.
  • Fixed a crash related to media state summarization which could occur when disconnecting from a Room.
  • Fixed a crash related to stats gathering which could occur in the media monitor component.

Known issues

Size Report

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

4.0.0 (February 22, 2019)

400-february-22-2019 page anchor

Improvements

  • Added new state Reconnecting to Room.State and new callbacks onReconnecting , onReconnected to Room.Listener . When the LocalParticipant experiences a network interruption in signaling or media, the room will transition to Reconnecting and Room.Listener will notify the developer of this new state via onReconnecting . If the connection is successfully restored, Room.Listener will notify the developer via onReconnected . However, if the connection could not be reestablished Room.Listener will notify the developer via onDisconnected .
  • Added and updated public API nullability annotations.
  • Changed OpusCodec.NAME and IsacCodec.NAME to lowercase

Known issues

Size Report

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

Rate this page: