The Twilio Programmable Video SDKs use Semantic Versioning.
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.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
API Changes
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 changes1// Enable network quality2ConnectOptions connectOptions =3new ConnectOptions.Builder(token)4.roomName(roomName)5.enableNetworkQuality(true)6.build();78// Override onNetworkLevelChanged to observe network quality level changes9LocalParticipant.Listener localParticipantListener = new LocalParticipant.Listener() {10...1112@Override13public void onNetworkQualityLevelChanged(14@NonNull LocalParticipant localParticipant,15@NonNull NetworkQualityLevel networkQualityLevel) {}16}1718// Connect to room and register listener19Room room = Video.connect(context, connectOptions, roomListener);20LocalParticipant localParticipant = room.getLocalParticipant();21localParticipant.setListener(localParticipantListener);2223// Get current network quality24localParticipant.getNetworkQualityLevel();
For more information, refer to the API docs and to the Network Quality Tutorial.
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.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Enhancement
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.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Bug Fixes
CameraCapturer.State
when error occurs.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.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
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
This release is available here
1ConnectOptions connectOptions =2new ConnectOptions.Builder(token)3.roomName(roomName)4.enableDominantSpeaker(true)5.build();6Room room = Video.connect(context, connectOptions, roomListener);78@Override9void onDominantSpeakerChanged(10@NonNull Room room, @Nullable RemoteParticipant remoteParticipant) {11// Handle dominant speaker change12}13
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.7MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.9MB |
x86 | 6.2MB |
x86_64 | 6.3MB |
Improvements
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
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.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Bug Fixes
ScreenCapturer
.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.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Improvements
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.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Improvements
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
.1AudioSink audioSink = (audioSample, encoding, sampleRate, channels) -> {2Log.v("AudioSink", "Received audio frame");3};4localAudioTrack.addSink(audioSink);
The AudioSink
can then be removed with the following code.
localAudioTrack.removeSink(audioSink);
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.4MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Bug Fixes
Camera2Capturer.switchCamera
which resulted in onCameraSwitched
being invoked with a null
camera ID #379Known 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.4MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Bug Fixes
Room.getStats()
will raise a callback to the provided StatsObserver
if called while Room.getState() == Room.State.RECONNECTING
.Known issues
LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants.Size Report
ABI | APK Size Impact |
---|---|
universal | 22.4MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Improvements
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
.OpusCodec.NAME
and IsacCodec.NAME
to lowercaseKnown issues
LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants.Size Report
ABI | APK Size Impact |
---|---|
universal | 22.3MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.7MB |
x86 | 6MB |
x86_64 | 6.2MB |