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.
We recommend migrating your application to the API provided by our preferred video partner, Zoom. We've prepared this migration guide to assist you in minimizing any service disruption.
To make sure your app is ready for Android 11 please visit this page.
The Twilio Programmable Video SDKs use Semantic Versioning. 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.
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
tvi.webrtc.NetworkMonitor
and
tvi.webrtc.NetworkMonitorAutoDetect
from the
libwebrtc.jar
provided by the SDK.
Known issues
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
ABI | APK Size Impact |
---|---|
x86 | 6MB |
x86_64 | 6.1MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
universal | 22MB |
Maintenance
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
Known issues
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
ABI | APK Size Impact |
---|---|
x86 | 6MB |
x86_64 | 6.1MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
universal | 22MB |
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 and API docs to learn more about custom audio devices.
Enhancements
Video.audioDevice
class member. You can now set your own
AudioDevice
before connecting to a
Room
.
DefaultAudioDevice
to render and capture audio. By default, the Video SDK uses
DefaultAudioDevice
to capture and render audio.
AudioDevice
interface.
AudioFormat
describes the audio that is being captured and rendered.
Maintenance
Known issues
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
ABI | APK Size Impact |
---|---|
x86 | 6MB |
x86_64 | 6.1MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
universal | 22MB |
Bug Fixes
Known issues
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
ABI | APK Size Impact |
---|---|
x86 | 6MB |
x86_64 | 6.1MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
universal | 22MB |
Bug Fixes
AudioOptions
properties to match the default WebRTC values.
Known issues
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
ABI | APK Size Impact |
---|---|
x86 | 6MB |
x86_64 | 6.1MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
universal | 21.9MB |
Bug Fixes
CameraCapturer.switchCamera(...)
completes,
CameraCapturer.getCameraSource()
would return an incorrect value.
#548
Known issues
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
ABI | APK Size Impact |
---|---|
x86 | 6MB |
x86_64 | 6.1MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
universal | 21.9MB |
Bug Fixes
Known issues
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
ABI | APK Size Impact |
---|---|
x86 | 6MB |
x86_64 | 6.1MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
universal | 21.9MB |
API Changes
CameraCapturer
will raise an error callback via
CameraCapturer.Listener
.
Bug Fixes
isSourceAvailable()
precondition check within the
CameraCapturer
constructor that causes crashes on some devices as reported in quickstart issue
#545
.
Known issues
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
ABI | APK Size Impact |
---|---|
universal | 21.9MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
x86 | 6MB |
x86_64 | 6.1MB |
Enhancements
ecs.us1.twilio.com:443
API Changes
IceOptions
properties are deprecated and setting them will have no effect.
IceOptions.abortOnIceServersTimeout
IceOptions.iceServersTimeout
Bug Fixes
IceTransportPolicy.RELAY
to the
IceOptions.Builder().iceTransportPolicy()
method was not being used. [GSDK-2148]
Known issues
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
ABI | APK Size Impact |
---|---|
universal | 21.9MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
x86 | 6MB |
x86_64 | 6.1MB |
Bug Fixes
LocalVideoTrack
using VP8 simulcast does not complete.
Maintenance
Known issues
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
ABI | APK Size Impact |
---|---|
universal | 22MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
x86 | 6MB |
x86_64 | 6.1MB |
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:
_25Room 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
.
_13RemoteParticipant.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 */_13LocalTrackPublicationOptions localTrackPublicationOptions = new LocalTrackPublicationOptions(TrackPriority.HIGH);_13localParticipant.publishTrack(localVideoTrack, localTrackPublicationOptions);_13_13/*_13 * The publish priority is also represented in remote audio, video, and data track publications._13 */_13remoteVideoTrackPublication.getPublishPriority();
Also, the publisher's TrackPriority
for the corresponding local Track can be updated after a
track has been published.
_10localVideoTrackPublication.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 */_10remoteVideoTrack.setPriority(TrackPriority.HIGH);_10_10/*_10 * Get the current remote video track priority._10 */_10TrackPriority 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
.
TrackPriority
for track priorities of
Room
.
LocalTrackPublicationOptions
to specify track publication options when publishing tracks via
LocalParticipant
.
LocalParticipant.publishTrack
methods that allow developers to specify
LocalTrackPublicationOptions
.
TrackPriority
property to
LocalAudioTrackPublication
,
LocalVideoTrackPublication
, and
LocalDataTrackPublication
.
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.
RemoteParticipant.Listener.onAudioTrackPublishPriorityChanged()
,
RemoteParticipant.Listener.onVideTrackPublishPriorityChanged()
and
RemoteParticipant.Listener.onDataTrackPublishPriorityChanged()
methods.
LocalParticipant.getLocalAudioTracks
,
LocalParticipant.getLocalVideoTracks
, and
LocalParticipant.getLocalVideoTracks
from
@Nullable
to
@NonNull
. These methods were incorrectly annotated in a previous release.
Bug Fixes
Known issues
LocalVideoTrack
using VP8 simulcast does not complete. As a workaround, disable the Track instead.
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
ABI | APK Size Impact |
---|---|
universal | 21.9MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
x86 | 6MB |
x86_64 | 6.1MB |
Enhancements
onConnectFailure
method is called with
SIGNALING_SERVER_BUSY_EXCEPTION
.
_10@Override_10public 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
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
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
ABI | APK Size Impact |
---|---|
universal | 21.8MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.7MB |
x86 | 6MB |
x86_64 | 6.1MB |
Enhancements
Video.connect(...)
:
tvi.webrtc.voiceengine.WebRtcAudioManager.setBlacklistDeviceForOpenSLESUsage(false)
.
Known issues
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
.
Bug Fixes
Known issues
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
ABI | APK Size Impact |
---|---|
universal | 21.8MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.6MB |
x86 | 6MB |
x86_64 | 6MB |
Enhancements
updateCaptureRequest
to
Camera2Capturer
. This API allows developers to update the
CaptureRequest
of an ongoing
Camera2Capturer
session. Reference the following snippet as an example of how to turn the flash on for the
Camera2Capturer
.
_10camera2Capturer.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
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
ABI | APK Size Impact |
---|---|
universal | 21.8MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.6MB |
x86 | 6MB |
x86_64 | 6MB |
Enhancements
ABI | App Size Impact 5.3.0 | App Size Impact 5.4.0 |
---|---|---|
universal | 22.9MB | 21.8MB |
armeabi-v7a | 5MB | 4.8MB |
arm64-v8a | 5.9MB | 5.6MB |
x86 | 6.2MB | 6MB |
x86_64 | 6.4MB | 6MB |
Bug Fixes
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
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
ABI | APK Size Impact |
---|---|
universal | 21.8MB |
armeabi-v7a | 4.8MB |
arm64-v8a | 5.6MB |
x86 | 6MB |
x86_64 | 6MB |
Features
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
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
ABI | APK Size Impact |
---|---|
universal | 22.9MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.2MB |
x86_64 | 6.4MB |
Features
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.
networkQualityLevel
property has been moved from the
LocalParticipant
class to the
Participant
interface.
networkQualityLevel
property. Note, this will return NETWORK_QUALITY_LEVEL_UNKNOWN
if:
ConnectOptions.networkQualityEnabled
property was set to
false
OR
onNetworkQualityLevelChanged
method on your
LocalParticipant.Listener
will allow you to receive callbacks when the network quality level changes for the Local Participant.
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_39NetworkQualityConfiguration configuration =_39 new NetworkQualityConfiguration(_39 NetworkQualityVerbosity.NETWORK_QUALITY_VERBOSITY_MINIMAL,_39 NetworkQualityVerbosity.NETWORK_QUALITY_VERBOSITY_MINIMAL);_39_39ConnectOptions 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_39LocalParticipant.Listener localParticipantListener = new LocalParticipant.Listener() {_39 ..._39_39 @Override_39 public void onNetworkQualityLevelChanged(_39 @NonNull LocalParticipant localParticipant,_39 @NonNull NetworkQualityLevel networkQualityLevel) {}_39}_39_39RemoteParticipant.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_39Room room = Video.connect(context, connectOptions, roomListener);_39LocalParticipant localParticipant = room.getLocalParticipant();_39localParticipant.setListener(localParticipantListener);_39_39// Get current network quality_39localParticipant.getNetworkQualityLevel();
Known issues
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
ABI | APK Size Impact |
---|---|
universal | 22.8MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.2MB |
x86_64 | 6.3MB |
Maintenance
Bug Fixes
VideoView
can not compile the SDK when building with Android Gradle Plugin 3.6.0.
#479
Known issues
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
ABI | APK Size Impact |
---|---|
universal | 22.8MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.2MB |
x86_64 | 6.3MB |
Enhancements
Bug Fixes
Known issues
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
ABI | APK Size Impact |
---|---|
universal | 22.8MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.2MB |
x86_64 | 6.3MB |
Improvements
5.1.0
org.webrtc.*
to
tvi.webrtc.*
. Calling
APIs to any class in
org.webrtc.*
will have no effect within the Video SDK.
-keep class org.webrtc.** { *; }
to
-keep class tvi.webrtc.** { *; }
-dontwarn org.webrtc.**
to
-dontwarn tvi.webrtc.**
Known issues
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
ABI | APK Size Impact |
---|---|
universal | 22.9MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.3MB |
x86_64 | 6.4MB |
Bug Fixes
Room
without waiting for
Room.Listener.onDisconnected(...)
to arrive.
Room
with dominant speaker enabled.
Known issues
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
ABI | APK Size Impact |
---|---|
universal | 22.9MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.3MB |
x86_64 | 6.4MB |
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
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
ABI | APK Size Impact |
---|---|
universal | 22.9MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.3MB |
x86_64 | 6.4MB |
ConnectOptions.Builder.enableNetworkQuality
property to true
when connecting to a Group Room.
LocalParticipant.getNetworkQualityLevel()
. Note, this will return NETWORK_QUALITY_LEVEL_UNKNOWN
if:
ConnectOptions.networkQualityEnabled
property was set to
false
onNetworkQualityLevelChanged
method on your
LocalParticipant.Listener
will allow you to receive callbacks when the network quality level changes
_24// Enable network quality_24ConnectOptions connectOptions =_24 new ConnectOptions.Builder(token)_24 .roomName(roomName)_24 .enableNetworkQuality(true)_24 .build();_24_24// Override onNetworkLevelChanged to observe network quality level changes_24LocalParticipant.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_24Room room = Video.connect(context, connectOptions, roomListener);_24LocalParticipant localParticipant = room.getLocalParticipant();_24localParticipant.setListener(localParticipantListener);_24_24// Get current network quality_24localParticipant.getNetworkQualityLevel();
API Changes
Room
, the WebSocket handshake is required to complete in 15 seconds or less, otherwise
TwilioException.SIGNALING_CONNECTION_ERROR_EXCEPTION
is raised.
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
.
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_10EncodingParameters encodingParameters = new EncodingParameters(64000, 800000);
_10// After_10EncodingParameters encodingParameters = new EncodingParameters(64, 800);
Enhancements
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
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
ABI | APK Size Impact |
---|---|
universal | 22.9MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.3MB |
x86_64 | 6.4MB |
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
_12 ConnectOptions connectOptions =_12 new ConnectOptions.Builder(token)_12 .roomName(roomName)_12 .enableDominantSpeaker(true)_12 .build();_12Room room = Video.connect(context, connectOptions, roomListener);_12_12@Override_12void onDominantSpeakerChanged(_12 @NonNull Room room, @Nullable RemoteParticipant remoteParticipant) {_12 // Handle dominant speaker change_12 }
API Changes
TwilioException.SIGNALING_DNS_RESOLUTION_ERROR_EXCEPTION
, which is now raised instead of TwilioException.SIGNALING_CONNECTION_ERROR_EXCEPTION
in the following scenarios:
ConnectOptions
was invalid.
Enhancements
ConnectOptions.iceOptions
, and overridden Servers
Bug Fixes
CameraCapturer.State
when error occurs.
ConnectOptions.region
to an empty or null value results in the default region being
used.
Room
.
Known issues
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
ABI | APK Size Impact |
---|---|
universal | 22.8MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.2MB |
x86_64 | 6.3MB |
Improvements
video::LogModule::kSignaling
enables logging of low-level connection events.
Bug Fixes
Known issues
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
.
Improvements
Bug Fixes
Known issues
LogModule.SIGNALING
does not produce any logging.
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
ABI | APK Size Impact |
---|---|
universal | 22.7MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.2MB |
x86_64 | 6.3MB |