7.0 Changelog: Twilio Video Android
Warning
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.
Support for 6.x ended on September 17th, 2022. This branch will only receive fixes for critical issues until that date. Check this guide when planning your migration to 7.x.
Support for 5.x ended on December 4th, 2021. This branch will only receive fixes for critical issues until that date. Check this guide when planning your migration to 6.x.
Versions 4.x and below reached End of Life on September 8th, 2021. See the changelog here.
Info
To ensure your account has the most up-to-date features and bug fixes, we recommend updating your Twilio Video SDK at least once a quarter.
- Programmable Video Android SDK 7.8.0 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.8.0 [Maven Central], [docs]
- Noise Cancellation Plugin 7.8.0 [Maven Central], [docs]
- Updated to now use WebRTC-m124
- Updated NoiseCancellationPlugin to use Krisp 7.0.1
Video sizing issues can occur in two circumstances:
- Someone publishes a video in landscape mode. The simulcast layers are set for landscape mode. The viewer's device isn't held in landscape mode, so the simulcast layers may not display correctly. This remains true if both devices aren't oriented in portrait mode.
- Someone publishes a video at 720p with VP8 simulcast turned on. The subscriber varies their hints between 180p, 360p, and 720p. This may result in the subscriber receiving larger than expected video.
ABI | APK Size Impact |
---|---|
x86 | 6.6MB |
x86_64 | 6.6MB |
armeabi-v7a | 5.1MB |
arm64-v8a | 6.4MB |
universal | 24MB |
- Programmable Video Android SDK 7.7.1 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.7.1 [Maven Central], [docs]
- Noise Cancellation Plugin 7.7.1 [Maven Central], [docs]
- Added support for Android 15 with 16k memory page sizes.
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
ABI | APK Size Impact |
---|---|
x86 | 6.3MB |
x86_64 | 6.4MB |
armeabi-v7a | 4.9MB |
arm64-v8a | 5.7MB |
universal | 22.6MB |
- Programmable Video Android SDK 7.7.0 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.7.0 [Maven Central], [docs]
- Noise Cancellation Plugin 7.7.0 [Maven Central], [docs]
- Updated to now use WebRTC-m112.
- ISAC codec has been removed as a result of its removal from WebRTC-m112
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 6.3MB |
x86_64 | 6.4MB |
armeabi-v7a | 4.9MB |
arm64-v8a | 5.7MB |
universal | 22.6MB |
- Programmable Video Android SDK 7.6.4 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.6.4 [Maven Central], [docs]
- Noise Cancellation Plugin 7.6.4 [Maven Central], [docs]
- Fixed screen share bug where subscriber would see black frames for extended periods of time when publishing end lacked user interaction. [VIDEO-13031]
- ScreenCapturer capturer now enables developer to specify desired frame rate.
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 6.8MB |
x86_64 | 7MB |
armeabi-v7a | 4.7MB |
arm64-v8a | 6.2MB |
universal | 24MB |
- Programmable Video Android SDK 7.6.3 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.6.3 [Maven Central], [docs]
- Noise Cancellation Plugin 7.6.3 [Maven Central], [docs]
- When a video sink is removed a black frame is now sent such that the last frame rendered by the sink doesn't linger. [VIDEO-12808]
- Fixed a bug where tviMirror layout parameter would not be applied to VideoView and VideoTextureView. [VIDEO-12812]
- Fixed a bug where tviScaleType layout parameter would not be applied to VideoTextureView. [VIDEO-12812]
- Fixed crash bug in External audio device due to improper JVM stack management. [VIDEO-12917]
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 6.8MB |
x86_64 | 7MB |
armeabi-v7a | 4.7MB |
arm64-v8a | 6.2MB |
universal | 24MB |
- Programmable Video Android SDK 7.6.1 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.6.1 [Maven Central], [docs]
- Noise Cancellation Plugin Android 7.6.1 [Maven Central], [docs]
- Updated to now use WebRTC-m105
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 6.8MB |
x86_64 | 7MB |
armeabi-v7a | 4.7MB |
arm64-v8a | 6.2MB |
universal | 24MB |
- Programmable Video Android SDK 7.5.1 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.5.1 [Maven Central], [docs]
- Noise Cancellation Plugin Android 7.5.1 [Maven Central], [docs]
- Added a custom audio device utilizing the SDK's AudioDevice framework that uses Krisp's audio processing solution called NoiseCancellationAudioDevice . This custom audio device can be applied by calling Video.setAudioDevice(NoiseCancellationAudioDevice(...)) [VIDEO-10449]
- Fixed bug where sinks registered with local audio tracks when a custom audio device was being used, failed to deliver frames. [VIDEO-11637]
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.7MB |
x86_64 | 5.6MB |
armeabi-v7a | 4.3MB |
arm64-v8a | 5.3MB |
universal | 20.2MB |
- Programmable Video Android SDK 7.3.1 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.3.1 [Maven Central], [docs]
- This release introduces Adaptive Simulcast along with new Video Encoding modes for publishers. Adaptive Simulcast reduces publisher resource usage by only sending those encodings for a video track that are needed by subscribers or by the media server (when recording is enabled). This is an opt-in feature and can be enabled by setting the new Connect Option videoEncodingMode to AUTO, which allows the SDK to select video codecs, use adaptive simulcast, and manage encodings automatically. When videoEncodingMode Connect Option is set to AUTO, the preferVideoCodecs and/or EncodingParameters.maxVideoBitrate Connect Options cannot be set.
- Added a new videoEncodingMode field to ConnectOptions.
- The videoEncodingMode API is mutually exclusive with existing codec management APIs EncodingParameters.maxVideoBitrate and preferVideoCodecs.
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.7MB |
x86_64 | 5.6MB |
armeabi-v7a | 4.3MB |
arm64-v8a | 5.3MB |
universal | 20.2MB |
- Programmable Video Android SDK 7.3.1 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.3.1 [Maven Central], [docs]
- Added a configuration property to support MediaTek hardware encoding. This feature is in pilot. Contact support for more information. [VIDEO-10792]
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.7MB |
x86_64 | 5.6MB |
armeabi-v7a | 4.3MB |
arm64-v8a | 5.3MB |
universal | 20.2MB |
- Programmable Video Android SDK 7.3.0 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.3.0 [Maven Central], [docs]
- Fixed maxAudioBitrate and maxVideoBitrate behavioral issues. [VIDEO-9081]
- Fixed a grammatical error in the docs regarding the removal of video sinks. [VIDEO-10014]
- Max video bandwidth limits are now applied to each simulcast layer when simulcast is enabled, and the expected behavior for max video bitrates with simulcast is better documented. [VIDEO-6762]
- Fixed several bugs that could cause crashes and deadlocks when a Room is disconnected / destroyed. [VIDEO-9313, VIDEO-9425, VIDEO-9597, VIDEO-10596, VIDEO-10552]
- Fixed a race condition where subscribed callbacks for Remote Participant could be raised for tracks that have been ended. [VIDEO-6322]
- Fixed a crash bug when reconnecting to or disconnecting from a Room. [VIDEO-9425]
- Fixed a crash regarding custom audio devices when writing captured audio samples to WebRTC. [VIDEO-11194]
- Fixed a crash when errant callback from Camera2Capturer for its configuration is invoked after shutdown. [VIDEO-11195]
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.7MB |
x86_64 | 5.6MB |
armeabi-v7a | 4.3MB |
arm64-v8a | 5.3MB |
universal | 20.2MB |
- Programmable Video Android SDK 7.1.2 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.1.2 [Maven Central], [docs]
- Added MD5 hash of video-release.aar & ktx-release.aar to be included in the release notes of every future release. [VIDEO-4637]
- Fixed a crash when connected to a room and a track with an unsupported codec is added by a Remote Participant.[VIDEO-9698]
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.9MB |
x86_64 | 5.9MB |
armeabi-v7a | 4.4MB |
arm64-v8a | 5.5MB |
universal | 20.9MB |
- Fixed a crash caused by repeatedly switching the camera on/off while toggling the camera flash. [VIDEO-9294]
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.9MB |
x86_64 | 5.9MB |
armeabi-v7a | 4.4MB |
arm64-v8a | 5.5MB |
universal | 20.9MB |
- Programmable Video Android SDK 7.1.0 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.1.0 [Maven Central], [docs]
- Added ability to configure enabling/disabling support for video codec hardware encoders via global configuration and a properties file.
The hardware encoder settings are loaded from a properties file located in the assets directory of the application. If the file does not exist, default settings are used. By default the filename is
twilio-video-config.properties
, the filename can be overridden by setting the system propertycom.twilio.video.Video.configPath
.
The properties file currently supports the following settings:
Key | Value | Description |
---|---|---|
tvi.webrtc.DefaultVideoEncoderFactory.enableHWEncoding | true/false | Globally enables or disables support for hardware encoding for all supported video mime types. If disabled, hardware encoding will be disabled regardless if its subsequently enabled for a particular mimetype. |
tvi.webrtc.DefaultVideoEncoderFactory.enableHWVP8Encoding | true/false | Enables or disables support for hardware encoding of VP8 content. |
tvi.webrtc.DefaultVideoEncoderFactory.enableHWVP9Encoding | true/false | Enables or disables support for hardware encoding of VP9 content. |
tvi.webrtc.DefaultVideoEncoderFactory.enableHWH264Encoding | true/false | Enables or disables support for hardware encoding of H.264 content. |
tvi.webrtc.HardwareVideoEncoderFactory.enableH264HighProfile | true/false | Enables "High Profile" H.264 support for hardware encoding H.264 content. Has no effect for software encoding. |
tvi.webrtc.HardwareVideoEncoderFactory.enableIntelVP8Encoder | true/false | Enables support for Intel's VP8 hardware encoder. |
tvi.webrtc.HardwareVideoEncoderFactory.enableH264HuaweiSupport | true/false | Enables support for Huawei's H.264 encoder. |
- Fixed a bug that would cause a crash if a hardware encoder throws an exception when constructed. [VIDEO-8948]
- Fixed a bug that could cause a crash when tracks are repeatedly publish/unpublished. [VIDEO-8649]
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.9MB |
x86_64 | 5.9MB |
armeabi-v7a | 4.4MB |
arm64-v8a | 5.5MB |
universal | 20.9MB |
- Programmable Video Android SDK 7.0.4 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.0.4 [Maven Central], [docs]
- Now builds with Java 11 instead of java 8
- Updated build dependencies
- Now uses gradle 7 and android tools 7.0.3
- Added VP8 simulcast support using the software encoder. When simulcast is enabled, the software VP8 encoder will be used, even on devices with VP8 hardware encoding support.
- Fixed a bug which could occur when connected to a Peer-to-Peer or Go Room and publishing a second video track before another Participant joins, causing the connection to be terminated or the second video track not to be fully established.
- Fixed a bug which could cause the Room connection to be terminated by the server.
- Fixed a bug which could cause the media connection not to be re-established after network changes.
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.8MB |
x86_64 | 5.8MB |
armeabi-v7a | 4.4MB |
arm64-v8a | 5.5MB |
universal | 20.8MB |
- Programmable Video Android SDK 7.0.3 [Maven Central], [docs]
- Programmable Video Android KTX SDK 7.0.3 [Maven Central], [docs]
- Added error code definition
PARTICIPANT_SESSION_LENGTH_EXCEEDED_EXCEPTION
.
- Fixed a bug where if an exception occurs when connecting to a Room, the Room instance could leak and setting a custom audio device could fail.
- Fixed a bug where media could incorrectly be detected as not flowing after the network connectivity changes.
- As of 6.0.0 of the SDK, hardware video encoding doesn't publish all of the three simulcast layers when VP8 simulcast is enabled on Android. This affects Video Content Preferences from working properly for subscribing video participants since the feature requires all three simulcast layers to switch between. Our team is working on a fix for this, but the feature does work when VP8 simulcast is used to publish video from participants using the JavaScript or iOS SDKs.
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.8MB |
x86_64 | 5.8MB |
armeabi-v7a | 4.3MB |
arm64-v8a | 5.5MB |
universal | 20.7MB |
- Programmable Video Android SDK 7.0.2 [Maven Central], [docs]
- Programmable Video Android SDK KTX 7.0.2 [Maven Central], [docs]
- The SDK now supports audio only rooms and added two error codes, ROOM_AUDIO_ONLY_FLAG_NOT_SUPPORTED_EXCEPTION (53124) & TRACK_TRACK_KIND_NOT_SUPPORTED_EXCEPTION (53125).
- Improved reconnection time after network connectivity disruptions.
- As of 6.0.0 of the SDK, hardware video encoding doesn't publish all of the three simulcast layers when VP8 simulcast is enabled on Android. This affects Video Content Preferences from working properly for subscribing video participants since the feature requires all three simulcast layers to switch between. Our team is working on a fix for this, but the feature does work when VP8 simulcast is used to publish video from participants using the JavaScript or iOS SDKs.
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.8MB |
x86_64 | 5.8MB |
armeabi-v7a | 4.3MB |
arm64-v8a | 5.5MB |
universal | 20.7MB |
- Programmable Video Android SDK 7.0.1 [Maven Central], [docs]
- Programmable Video Android SDK KTX 7.0.1 [Maven Central], [docs]
- Fixed an interoperability bug between JavaScript, iOS and Android SDKs which could cause subscription events not to fire in a Peer-to-Peer or Go Room. [VIDEO-7334] #211
- As of 6.0.0 of the SDK, hardware video encoding doesn't publish all of the three simulcast layers when VP8 simulcast is enabled on Android. This affects Video Content Preferences from working properly for subscribing video participants since the feature requires all three simulcast layers to switch between. Our team is working on a fix for this, but the feature does work when VP8 simulcast is used to publish video from participants using the JavaScript or iOS SDKs.
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.8MB |
x86_64 | 5.7MB |
armeabi-v7a | 4.3MB |
arm64-v8a | 5.4MB |
universal | 20.6MB |
- Programmable Video Android SDK 7.0.0 [Maven Central], [docs]
- Programmable Video Android SDK KTX 7.0.0 [Maven Central], [docs]
- The SDK has been upgraded to use Chromium WebRTC 88.
- The SDK uses Unified Plan SDP semantics instead of Plan-B. This brings several important benefits:
- Improved interoperability with Firefox, Safari and Chrome in Peer-to-Peer and Go Rooms.
- Track level operations like publishing and unpublishing are more reliable.
- Improved performance of
Room.getStats()
by adopting the W3C standardized RTC stats API. - Unused codecs for a track are removed from the local SDP offer in order to reduce the SDP size, once codecs for the track have been negotiated.
- The minimum Android SDK version has been increased from 16 to 21. Please visit our migration guide for more details on how to update your application to 7.0!
- The ordering of
RemoteParticipantObserver.onAudioTrackSubscribed()
andRemoteParticipantObserver.onVideoTrackSubscribed()
is not strictly guaranteed. In this release the ordering of these callbacks may be different when compared to previous releases. - The value of
LocalVideoTrackStats.frames_encoded
now reflects the total number of frames encoded for a simulcast track.
- Fixed a bug causing the Connect Option
enableIceGatheringOnAnyAddressPorts
not to have any effect.
- As of 6.0.0 of the SDK, hardware video encoding doesn't publish all of the three simulcast layers when VP8 simulcast is enabled on Android. This affects Video Content Preferences from working properly for subscribing video participants since the feature requires all three simulcast layers to switch between. Our team is working on a fix for this, but the feature does work when VP8 simulcast is used to publish video from participants using the JavaScript or iOS SDKs.
- Video Content Preferences might prefer larger video than needed when device orientations are mismatched. For example, if a participant in landscape mode publishes video, then the subscribing participant must also be in landscape mode in order for the correctly sized simulcast layers to be selected. The same is true for the portrait orientation.
- When the publisher is publishing video at 720p with VP8 simulcast enabled and the subscriber varies their hints between 180p, 360p, and 720p, sometimes the subscriber receives larger video than expected.
- Releases prior to 7.7.1 do not support Android 15 with a 16k page size.
ABI | APK Size Impact |
---|---|
x86 | 5.8MB |
x86_64 | 5.7MB |
armeabi-v7a | 4.3MB |
arm64-v8a | 5.4MB |
universal | 20.6MB |