4.0 Changelog: Twilio Video Android
The Twilio Programmable Video SDKs use Semantic Versioning.
4.4.1 (September 24th, 2020)
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 |
4.4.0 (October 1st, 2019)
API Changes
Network Quality API
- 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
// Enable network quality
ConnectOptions connectOptions =
new ConnectOptions.Builder(token)
.roomName(roomName)
.enableNetworkQuality(true)
.build();
// Override onNetworkLevelChanged to observe network quality level changes
LocalParticipant.Listener localParticipantListener = new LocalParticipant.Listener() {
...
@Override
public void onNetworkQualityLevelChanged(
@NonNull LocalParticipant localParticipant,
@NonNull NetworkQualityLevel networkQualityLevel) {}
}
// Connect to room and register listener
Room room = Video.connect(context, connectOptions, roomListener);
LocalParticipant localParticipant = room.getLocalParticipant();
localParticipant.setListener(localParticipantListener);
// Get current network quality
localParticipant.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 |
4.3.2 (September 16th, 2019)
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 |
4.3.1 (August 23rd, 2019)
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 |
4.3.0 (August 5th, 2019)
Dominant Speaker Detection API
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
ConnectOptions connectOptions =
new ConnectOptions.Builder(token)
.roomName(roomName)
.enableDominantSpeaker(true)
.build();
Room room = Video.connect(context, connectOptions, roomListener);
@Override
void onDominantSpeakerChanged(
@NonNull Room room, @Nullable RemoteParticipant remoteParticipant) {
// Handle dominant speaker change
}
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 |
4.2.0 (May 13th, 2019)
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 |
4.1.2 (April 26th, 2019)
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 |
4.1.1 (April 11th, 2019)
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 |
4.1.0 (April 3rd, 2019)
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
.
AudioSink audioSink = (audioSample, encoding, sampleRate, channels) -> {
Log.v("AudioSink", "Received audio frame");
};
localAudioTrack.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 |
4.0.2 (March 28th, 2019)
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 |
4.0.1 (March 19th, 2019)
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 |
4.0.0 (February 22, 2019)
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 |
Need some help?
We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd by visiting Twilio's Stack Overflow Collective or browsing the Twilio tag on Stack Overflow.