4.0 Changelog: Twilio Video Android
The Twilio Programmable Video SDKs use Semantic Versioning.
Bug Fixes
- Fixed an SCTP related WebRTC security vulnerability detailed here.
Known issues
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
. - Using Camera2Capturer with a camera ID that does not support ImageFormat.PRIVATE capture outputs results in a runtime exception. Reference this issue for guidance on a temporary work around.
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
- 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
1// 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
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
. - Using Camera2Capturer with a camera ID that does not support ImageFormat.PRIVATE capture outputs results in a runtime exception. Reference this issue for guidance on a temporary work around.
Size Report
ABI | APK Size Impact |
---|---|
universal | 22.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Enhancement
- Upgraded the Gradle plugin used to build the SDK to 3.5.0.
Known issues
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
. - Using Camera2Capturer with a camera ID that does not support ImageFormat.PRIVATE capture outputs results in a runtime exception. Reference this issue for guidance on a temporary work around.
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
- Fixed updating
CameraCapturer.State
when error occurs.
Known issues
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
orLocalVideoTrack
might not be seen by Participants. As a result, tracks published after aRoom.State.RECONNECTED
event might not be subscribed to by aRemoteParticipant
. - Using Camera2Capturer with a camera ID that does not support ImageFormat.PRIVATE capture outputs results in a runtime exception. Reference this issue for guidance on a temporary work around.
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
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
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 |
Improvements
- Added field
enableAutomaticSubscription
toConnectOptions
.enableAutomaticSubscription
toggles automatic track subscription. If set tofalse
, theLocalParticipant
will receive notifications of track publish events, but will not automatically subscribe to them. If set totrue
, theLocalParticipant
will automatically subscribe to tracks as they are published. If unset, the default istrue
. Note: This feature is only available for Group Rooms. Toggling the flag in a P2P room does not modify subscription behavior.
Known issues
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
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.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
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
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
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.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Improvements
- Fixed various Lint errors / warnings.
Known issues
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
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.5MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Improvements
- Added the
AudioSink
interface. When added to aLocalAudioTrack
orRemoteAudioTrack
, developers will receive a callback with the raw audio byte buffer from each audio frame. The example below demonstrates adding anAudioSink
to aLocalAudioTrack
.
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
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
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.4MB |
armeabi-v7a | 5MB |
arm64-v8a | 5.8MB |
x86 | 6.1MB |
x86_64 | 6.2MB |
Bug Fixes
- Fixed bug in
Camera2Capturer.switchCamera
which resulted inonCameraSwitched
being invoked with anull
camera ID #379
Known issues
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
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.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 providedStatsObserver
if called whileRoom.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
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
orLocalVideoTrack
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
- Added new state
Reconnecting
toRoom.State
and new callbacksonReconnecting
,onReconnected
toRoom.Listener
. When theLocalParticipant
experiences a network interruption in signaling or media, the room will transition toReconnecting
andRoom.Listener
will notify the developer of this new state viaonReconnecting
. If the connection is successfully restored,Room.Listener
will notify the developer viaonReconnected
. However, if the connection could not be reestablishedRoom.Listener
will notify the developer viaonDisconnected
. - Added and updated public API nullability annotations.
- Changed
OpusCodec.NAME
andIsacCodec.NAME
to lowercase
Known issues
- Network handoff, and subsequent connection renegotiation is not supported for IPv6 networks #72
- Participant disconnect event can take up to 120 seconds to occur #80 #73
- The SDK is not side-by-side compatible with other WebRTC based libraries #340
- 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
orLocalVideoTrack
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 |