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.
Deprecation Notice - Versions 1.0.0-beta10 and earlier |
---|
Please note that older versions of the Programmable Video Android SDK prior to 1.0.0-beta11 are deprecated and will stop working on September 13, 2018. Please make sure you're using the latest version of the library in your apps, and make sure your customers update their apps by that date. For more information please review the knowledge base. |
Compatibility Notice - All versions |
---|
Please note that all 1.x versions are incompatible with Firefox 63+ in a Peer-to-Peer Room. For more information please review the Github Issue. |
The Twilio Programmable Video SDKs use Semantic Versioning.
Improvements
3.1.0
and Gradle version to
4.4
Bug Fixes
Known issues
Improvements
Bug Fixes
Known issues
Bug Fixes
Room#disconnect()
twice.
#255
Known issues
Bug Fixes
turns
scheme are now supported. The SDK will now use
turns
by default if turn is enabled for your Room.
stuns
scheme are now supported.
Known issues
Improvements
targetSdkVersion
to 27
buildToolsVersion
to 27.0.3
Known issues
Improvements
Bug Fixes
Known issues
Improvements
Known issues
Improvements
VideoView#setVideoScaleType
. Scale type will only
be applied to dimensions defined as
WRAP_CONTENT
or a custom value. Setting a width or height to
MATCH_PARENT
results in the video being scaled to fill the maximum value of the dimension.
setVideoScaleType
when width or height is set to
MATCH_PARENT
Known issues
Improvements
If you are downloading Video Android SDK artifacts from the Twilio CDN then there is one options available moving forward.
All Javadocs back to 1.0.0-preview1
are now hosted on Github Pages
with the following URL scheme. https://twilio.github.io/twilio-video-android/docs/{version}
1.3.7
Javadocs go to
https://twilio.github.io/twilio-video-android/docs/1.3.7
Bug Fixes
takePicture
on
CameraCapturer
.
Known issues
Improvements
Known issues
Improvements
Known issues
Bug Fixes
Known issues
Improvements
Known issues
Improvements
Room
that has not connected
#116
Known issues
Improvements
CameraCapturer
incorrectly reported a failure to close the
camera.
Known issues
Room
that has not connected sometimes results in a crash
#116
Features
CameraCapturer.isSourceAvailable
that validates if a camera source is
available on the device. This method is used when creating a
CameraCapturer
instance and when
calling
CameraCapturer#switchCamera
to validate that a source can be used for capturing frames.
Improvements
Participant.Listener
,
ScreenCapturer.Listener
,
VideoCapturer.Listener
,
and
VideoRenderer.Listener
.
Bug Fixes
Known issues
Room
that has not connected sometimes results in a crash
#116
Improvements
Participant#setListener
with
null
is no longer allowed.
Bug Fixes
LocalMedia
in
CameraCapturer
javadoc.
Known issues
Room
that has not connected sometimes results in a crash
#116
Improvements
Known issues
Room
that has not connected sometimes results in a crash
#116
Features
Improvements
LocalParticipant#release
. This method is not meant to be called and is now a
no-op until it is removed in
2.0.0-preview1
release.
#132
CameraCapturer
to help identify cases when the camera service cannot be reached.
#126
getSupportedFormats
for
CameraCapturer
,
ScreenCapturer
, and
Camera2Capturer
to
be
synchronized
.
Bug Fixes
Known issues
Room
that has not connected sometimes results in a crash
#116
Bug Fixes
VideoConstraints
logic where valid VideoCapturer video formats were ignored due to very strict checking of aspect ratios in WebRTC.
LocalVideoTrack
where FPS check was incorrectly marking a constraint as incompatible.
#127
Known issues
Room
that has not connected sometimes results in a crash
#116
Improvements
Camera2Capturer
.
Camera2Capturer
uses
android.hardware.camera2
to implement
a
VideoCapturer
.
Camera2Capturer
does not yet implement
takePicture
and the ability to modify
camera parameters once
Camera2Capturer
is running.
Create LocalVideoTrack
with Camera2Capturer
1// Check if device supports Camera2Capturer2if (Camera2Capturer.isSupported(context)) {3// Use CameraManager.getCameraIdList() for a list of all available camera IDs4String cameraId = "0";5Camera2Capturer.Listener camera2Listener = new Camera2Capturer.Listener() {6@Override7public void onFirstFrameAvailable() {}89@Override10public void onCameraSwitched(String newCameraId) {}1112@Override13public void onError(Camera2Capturer.Exception exception) {}14}15Camera2Capturer camera2Capturer = new Camera2Capturer(context, cameraId, camera2Listener);16LocalVideoTrack = LocalVideoTrack.create(context, true, camera2Capturer);17}
This release adds Insights statistics collection, which reports RTP quality metrics back to Twilio. In the future, these statistics will be included in customer-facing reports visible in the Twilio Console. Insights collection is enabled by default, if you wish to disable it reference the following snippet.
1ConnectOptions connectOptions = new ConnectOptions.Builder(token)2.enableInsights(false)3.build();
Bug Fixes
onParticipantDisconnected
was
invoked
#125
Known issues
Room
that has not connected sometimes results in a crash
#116
Bug Fixes
Known issues
Room
that has not connected sometimes results in a crash
#116
Improvements
ScreenCapturer
performance by enabling capturing to a texture.
Bug Fixes
Known issues
Room
that has not connected sometimes results in a crash
#116
We've promoted 1.0.0-beta17 to 1.0.0 as our first General Availability release.
Known issues
Room
that has not connected sometimes results in a crash
#116
Improvements
LocalMedia
class with Track factories for
LocalVideoTrack
and
LocalAudioTrack
Working with LocalVideoTrack
and LocalAudioTrack
before 1.0.0-beta17
1// Create LocalMedia2LocalMedia localMedia = LocalMedia.create(context);3LocalVideoTrack localVideoTrack = localMedia.addVideoTrack(true, videoCapturer);4LocalAudioTrack localAudioTrack = localMedia.addAudioTrack(true);56...78// Destroy LocalMedia to free native memory resources9localMedia.release();
Working with LocalVideoTrack
and LocalAudioTrack
now
1// Create Tracks2LocalVideoTrack localVideoTrack = LocalVideoTrack.create(context, true, videoCapturer);3LocalAudioTrack localAudioTrack = LocalAudioTrack.create(context, true);45...67// Destroy Tracks to free native memory resources8localVideoTrack.release();9localAudioTrack.release();
ConnectOptions.Builder
now takes a
List<LocalAudioTrack>
and
List<LocalVideoTrack>
instead of
LocalMedia
Providing LocalVideoTrack
and LocalAudioTrack
before 1.0.0-beta17
1LocalMedia localMedia = LocalMedia.create(context);2LocalVideoTrack localVideoTrack = localMedia.addVideoTrack(true, videoCapturer);3LocalAudioTrack localAudioTrack = localMedia.addAudioTrack(true);45ConnectOptions connectOptions = new ConnectOptions.Builder(accessToken)6.roomName(roomName)7.localMedia(localMedia)8.build();9VideoClient.connect(context, connectOptions, roomListener);
Providing LocalVideoTrack
and LocalAudioTrack
now
1List<LocalVideoTrack> localAudioTracks =2new ArrayList<LocalVideoTrack>(){{ add(localVideoTrack); }};3List<LocalAudioTrack> localVideoTracks =4new ArrayList<LocalAudioTrack>(){{ add(localAudioTrack); }};56ConnectOptions connectOptions = new ConnectOptions.Builder(accessToken)7.roomName(roomName)8.audioTracks(localAudioTracks)9.videoTracks(localVideoTracks)10.build();11VideoClient.connect(context, connectOptions, roomListener);
getVideoTracks()
and
getAudioTracks()
moved from
LocalMedia
and
Media
to
LocalParticipant
and
Participant
Media
from
Participant
and migrated
Media.Listener
to
Participant.Listener
.
AudioTrack
and
VideoTrack
events are raised with the corresponding
Participant
instance.
This allows you to create tracks while connected to a
Room
without immediately adding them to the connected
Room
textureId
and
samplingMatrix
fields to
I420Frame
so implementations of
VideoRenderer
can extract YUV data from frame represented as texture.
org.webrtc.YuvConverter
to facilitate converting a texture to an in memory YUV buffer.
ScreenCapturer.Listener
callbacks on the thread
ScreenCapturer
is created on.
Room
for the first time occasionally leading to a 53001 error
onConnectFailure
response.
Room#getParticipants
returns
List<Participant>
instead of
Map<String, Participant>
.
Bug Fixes
org.webrtc.voiceengine.WebRtcAudioManager
and
org.webrtc.voiceengine.WebRtcAudioTrack
construction.
#102
Known issues
Improvements
VideoFrame.RotationAngle
to ensure
VideoFrame
objects are constructed with
valid orientation values.
CameraCapturer
to be powered by latest WebRTC camera capturer.
CameraCapturer
to allow scheduling a picture to be taken while the capturer is not
running.
Bug Fixes
VideoRenderer
s receiving
null
YUV data for
VideoTrack
s
#93
Known issues
org.webrtc.voiceengine.WebRtcAudioManager
and
org.webrtc.voiceengine.WebRtcAudioTrack
construction.
#102
Improvements
VideoClient
class to
Video
.
Known issues
VideoRenderer
to
VideoTrack
#93
Improvements
StatsReport
.
Bug Fixes
Known issues
VideoRenderer
to
VideoTrack
#93
Improvements
Bug Fixes
Room#disconnect
when releasing
Participant
media
Known issues
VideoRenderer
to
VideoTrack
#93
Improvements
VideoClient
an abstract class.
TwilioException
will now carry a numeric code belonging to one of these ranges, an error message, and an optional error explanation.
VideoConstraints
. Adding a
LocalVideoTrack
with no constraints, results in
LocalMedia
applying a set of default constraints based on the closest supported
VideoFormat
to 640x480 at 30 FPS. Adding a
LocalVideoTrack
with custom constraints, results in
LocalMedia
checking if the constraints are compatible with the given
VideoCapturer
before applying. If the constraints are not compatible
LocalMedia
applies default constraints.
#68
Bug Fixes
Known issues
VideoRenderer
to
VideoTrack
#93
Improvements
connect
from instance method to static method on
VideoClient
class. Calling the new static
connect
method requires a
Context
in addition to
ConnectOptions
and a
Room.Listener
.
VideoClient
is no longer an object that can be instantiated and an instance is no longer required to connect to a
Room
.
VideoClient
constructor to
ConnectOptions.Builder
constructor.
Connecting to a Room
before 1.0.0-beta11
1// Create VideoClient2VideoClient videoClient = new VideoClient(context, accessToken);3ConnectOptions connectOptions = new ConnectOptions.Builder()4.roomName(roomName)5.localMedia(localMedia)6.build();7videoClient.connect(connectOptions, roomListener);
Connecting to a Room
with static connect
1ConnectOptions connectOptions = new ConnectOptions.Builder(accessToken)2.roomName(roomName)3.localMedia(localMedia)4.build();5VideoClient.connect(context, connectOptions, roomListener);
Bug Fixes
Room
on HTC 10.
Room#disconnect
.
Known issues
VideoRenderer
to
VideoTrack
#93
Improvements
Bug Fixes
Known issues
VideoRenderer
to
VideoTrack
#93
Bug Fixes
Known issues
VideoRenderer
to
VideoTrack
#93
Features
isRecording
method to
Room
, and callbacks to
RoomListener
. Please note that recording is only available in our Group Rooms developer preview.
isRecording
will always return
false
in a P2P Room.
Bug Fixes
CameraCapturer#updateCameraParameters
API #54
getStats()
immediately after disconnecting from
Room
Known issues
VideoRenderer
to
VideoTrack
#93
Improvements
LocalMedia#addAudioTrack
enabled parameter
Bug Fixes
Known issues
Room
immediately after calling
getStats()
results in a crash.
VideoRenderer
to
VideoTrack
#93
Bug Fixes
EglBaseProvider
.
Known issues
Room
immediately after calling
getStats()
results in a crash.
VideoRenderer
to
VideoTrack
#93
New features
getStats()
method to
Room
that builds a
StatsReport
with metrics for all the audio and video tracks being shared to a
Room
.
Room
.
VideoException
to
TwilioException
.
Bug Fixes
takePicture
.
PictureListener
callbacks are invoked on the calling thread of
takePicture
.
Known issues
Room
immediately after calling
getStats()
results in a crash.
VideoRenderer
to
VideoTrack
#93
New features
CameraCapturer
for taking a picture.
Known issues
New features
CameraCapturer
for providing custom
Camera.Parameters
.
isScreencast()
method to
VideoCapturer
. This indicates if a capturer is providing screen content and affects any scaling attempts made while media is flowing.
Bug fixes
LocalMedia
will now return
null
when attempting to add a
LocalAudioTrack
without RECORD_AUDIO permission.
CameraCapturer
will log an error and provide an error code via a new
CameraCapturer.Listener
when trying to capture video without CAMERA permission.
Known issues
New features
AccessManager
in
VideoClient
constructor. Only a context and access token are required to create a
VideoClient
.
updateToken
method to
VideoClient
that allows for an access token to be updated in case it has expired
Bug fixes
Known issues
New features
Bug fixes
release()
method on the
I420Frame
object allowing developers to free native memory once they are done using the frame when implementing their own custom renderers
Known issues
New features
Known issues
VideoRenderer
New features
Bug fixes
Known issues
VideoRenderer