Version 2.28.3 -- September 2024
This version fixes an issue where, in some cases, the audio level stayed the same when the publisher was muted.
This version fixes an issue where custom audio devices could potentially cause a crash.
This version fixes an issue where, in some cases, audio from web client SDK users was garbled.
This version fixes an error that occurred when using the application context to initialize a publisher.
Version 2.28.2 -- August 2024
When using this version, you will need to specify sourceCompatibility
and
targetCompatibility
to use Java 17. You can do this by modifying the app's
build.gradle file and adding the following code snippet to the android
section:
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
This version fixes an issue where the video resolution was not updating when devices were rotated.
This version fixes an issue where video was briefly stuttering after connecting to another user.
Version 2.28.1 -- July 2024
Version 2.28.0 -- June 2024
This version adds support for Single Peer Connection. When enabled, it reduces OS resource consumption, improves rate control, and in the case of mobile native devices, supports large sessions. See the documentation for the Session.Builder.setSinglePeerConnection()
method.
This version adds support for advanced noise suppression. This uses the Vonage Media Library to provide enhanced noise cancellation. See the documentation for the Publisher.setAudioTransformers()
method. This was previously a beta feature.
This version requires a minimum Android API level of 24.
This version fixes an issue where, in some cases, the publisher was destroyed when video was muted.
Version 2.27.2 -- June 2024
This version adds support for reading the Certificate Authority certificates in the trust store of the host so that it can use them as valid root certificates when connecting to OpenTok services.
This version adds support for advanced noise suppression. This uses the Vonage Media Library to provide enhanced noise cancellation. See the documentation for the Publisher.setAudioTransformers()
method. This is a beta feature.
This version reduces the size of the SDK by removing the Vonage Media Library code. In order to use methods that use the Vonage Media Library, you must load the Vonage Media Library separately from the Vonage Video Android SDK. This includes using the PublisherKit.setAudioTransformers()
and PublisherKit.setVideoTransformers()
methods to apply audio and video transformers to the stream. For more information, see Vonage Media Library integration.
This version fixes a crash.
Version 2.27.1 -- January 2024
This version fixes a bug where canSubscribe
returned incorrect information in Session.getCapabilities()
.
This version fixes an issue where the state of captions was not properly updated for subscribers under certain circumstances.
This version fixes some crashes.
Version 2.27.0 -- December 2023
This version adds support for the
Vonage Media Processor library
and custom media transformers. You can apply custom video and audio transformations to video and audio streams using the PublisherKit.setVideoTransformers()
and PublisherKit.setAudioTransformers()
methods. This was previously a beta feature.
This version adds support for publisher audio fallback. This was previously a beta feature. See the Publisher audio fallback documentation.
This version adds support for the VP9 codec in relayed sessions. For more information, see the Video Codecs documentation.
This version adds support for end-to-end encryption. You can enable end-to end-encryption using the Session.setEncryptionSecret()
method. For more information, see the End-to-End Encryption documentation.
This version adds support for adaptive media routing. For more information, see the Adaptive Media Routing documentation.
This version adds some memory management improvements.
This version fixes an issue where certain events were being dropped.
Version 2.26.2 -- November 2023
This version adds support for publisher audio fallback. This is a beta feature. See the Publisher audio fallback documentation.
This version adds more support for the
Vonage Media Processor filters. The background blur filter now accepts a custom radius option. And there is a new background replacement filter. You can create these video filters using the VideoTransformer(String name, String properties)
constructor. This is a beta feature.
Version 2.25.4 -- October 2023
Version 2.24.3 -- October 2023
Version 2.26.1 -- October 2023
This version fixes an issue where video dimensions were incorrect if users muted video.
This version fixes a crash that occurred if users published and unpublished video several times in rapid succession.
This version fixes an issue where, in some cases, users were unable to connect to sessions with both custom TURN servers and IP Proxies enabled.
This version fixes an issue where, in some cases, using custom audio devices was causing publishing failures.
This version fixes some memory leaks.
This version fixes an issue where it sometimes took longer than expected to disconnect from a session.
This version fixes an issue where, in some cases, setting the microphone to mute was causing a crash.
Version 2.26.0 -- August 2023
This version adds support for the
Vonage Media Processor library
and custom media transformers. You can apply custom video and audio transformations to video and audio streams
using the PublisherKit.setVideoTransformers()
and PublisherKit.setAudioTransformers()
methods. Using custom media transformers was previously a beta feature.
(Using the background blur transformer remains in beta).
This version adds support for Live Captions. See the docs for PublisherKit.setPublishCaptions()
and SubscriberKit.setSubscribeToCaptions()
. This was previously a beta feature.
This version fixes an issue where the SDK was crashing for subscribers on relayed sessions published using the Android SDK.
Version 2.25.3 -- July 2023
This version fixes some inconsistent cleanup-related audio callbacks for custom devices, which sometimes lead to distorted audio.
This version fixes an issue where publishers were ignoring custom framerate settings.
This version fixes a memory leak.
Version 2.25.2 -- May 2023
This version requires that applications target a minimum Android level of 23.
This version adds support for the
Vonage Media Processor library
and custom media transformers. You can apply custom video and audio transformations to video and audio streams
using the PublisherKit.setVideoTransformers()
and PublisherKit.setAudioTransformers()
methods. This is a beta feature.
This version adds support for Live Captions. See the docs for PublisherKit.setPublishCaptions()
and SubscriberKit.setSubscribeToCaptions()
. This is a beta feature.
This version fixes an issue where captions were enabled by default.
The onStreamHasCaptionsChanged()
method was removed from the StreamPropertiesListener interface and moved
to the new StreamCaptionsPropertiesListener interface. If you implement the StreamPropertiesListener
interface, you will need to remove this method. For the Live Captions feature, you can implement
StreamCaptionsPropertiesListener.onStreamHasCaptionsChanged()
method.
This is a beta feature.
Version 2.25.1 -- May 2023
This version fixes an issue where, for certain models of Bluetooth headsets, there was a delay between Bluetooth reconnects.
This version fixes an issue where occasionally the app would crash if it was publishing for a very long time.
This version fixes some memory leaks.
Version 2.25.0 -- April 2023
This version of the SDK uses an updated version of WebRTC 99, which includes improvements in performance and stability.
A new onStreamHasCaptionsChanged() method was added to the StreamPropertiesListener interface in 2.24.2. If you implement this interface, you will need to implement this method. This is a beta feature.
Version 2.24.2 -- February 2023
This version fixes an issue where starting a session with muted video would disable scalable video.
This version fixes an issue where the camera LED was not turned off when the video was muted.
This version fixes an issue where audio would remain muted for users under certain circumstances.
Version 2.24.1 -- December 2022
Version 2.24.0 -- October 2022
This version of the SDK uses WebRTC 99, which includes improvements in performance and stability.
This version fixes an issue in which participants could not hear audio published by clients using certain models of Huawei devices.
This version fixes an intermittent crash when cycling the camera.
This version fixes an issue in which applications could not connect to a session when IP Proxy was enabled.
This version fixes an issue when AES-256 was enabled and applications could not connect to clients using on Safari 15.3 and below.
Version 2.23.1 -- August 2022
This version fixes an issue that caused excessive bandwidth usage by streams in relayed sessions.
This version fixes an issue where an app may crash when Bluetooth permissions are not enabled.
This version fixes an issue where the Bluetooth connection is lost after a session reconnection.
Version 2.23.0 -- July 2022
Adding support for Full High Definition (1920x1080-pixel) resolution. You can specify High1080p
as the
resolution value you pass into the Publisher.CameraCaptureResolution()
method.
This version adds the ability to enable per-subscriber audio levels. See the docs for the
SubscriberKit.setAudioVolume()
and SubscriberKit.getAudioVolume()
methods. This was previously a beta feature.
This version implements scalable video support
for screen sharing. See the PublisherKit.Builder.scalableScreenshare()
method. This was previously a beta feature.
This version fixes an issue where publishers of 1080p or 720p streams to routed sessions published two scalable video layers instead of three.
This version fixes an issue in Android 12 where apps may crash if Bluetooth permissions are not included.
This version fixes an issue where the app crashes if an unregistered audio device is used.
Version 2.22.3 -- May 2022
Version 2.22.2 -- April 2022
This version adds the ability to enable per-subscriber audio levels. See the docs for the
SubscriberKit.setAudioVolume()
and SubscriberKit.getAudioVolume()
methods. This is a beta feature.
This version implements scalable video support
for screen sharing. See the PublisherKit.Builder.scalableScreenshare()
method. This is a beta feature.
Version 2.22.1 -- March 2022
This version removes support for DTLS 1.0.
For apps that use the IP proxy add-on, this version fixes an issue where some logs were bypassing the IP proxy.
Version 2.22.0 -- February 2022
This version adds the ability to enable Opus DTX.
Enabling Opus DTX can reduce bandwidth usage in streams that have long periods of silence.
This was previously a beta feature. See the docs for the PublisherKit.Builder.enableOpusDtx()
method.
This version removes support for cipher TLS_RSA_WITH_3DES_EDE_CBC_SHA.
When using this version, you will need to specify sourceCompatibility
and
targetCompatibility
to use Java 11. You can do this by modifying the app's
build.gradle file and adding the following code snippet to the android
section:
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
Version 2.21.5 -- January 2022
BLUETOOTH_CONNECT
in addition to the
other required permissions.Version 2.21.4 -- January 2022
READ_PHONE_STATE
in addition to the
other required permissions.Version 2.21.3 -- November 2021
Publisher.CycleCamera()
may fail on certain
models of Samsung phones.Version 2.21.2 -- November 2021
PublisherKit.Builder.audioBitrate()
method was not being respected.Version 2.21.1 -- October 2021
PublisherKit.Builder.enableOpusDtx()
method.Version 2.21.0 -- October 2021
This version adds the ability for moderators to mute participants. This was previously a beta feature.
See the docs for the Session.forceMuteAll()
, Session.forceMuteStream()
, and Session.disableForceMute()
methods. Note that the Session.forceMuteAll()
and Session.forceMuteStream()
methods no longer
include an options
parameter, like they did in the beta version.
This version adds the ability to dynamically change how published video streams are optimized.
This can improve video performance for some screen-sharing streams and in other conditions.
This was previously a beta feature. See the docs for the BaseVideoCapturer.getVideoContentHint()
and BaseVideoCapturer.setVideoContentHint()
methods.
This version fixes an intermittent issue that caused applications to crash when a subscriber joins a session.
Version 2.20.3 -- November 2021
PublisherKit.Builder.audioBitrate()
method was not being respected.Version 2.20.2 -- August 2021
This version adds the ability to dynamically change how published video streams are optimized.
This can improve video performance for some screen-sharing streams and in other conditions.
This is a beta feature. See the docs for the BaseVideoCapturer.getVideoContentHint()
and BaseVideoCapturer.setVideoContentHint()
methods.
This version fixes an issue where an app may crash when gathering audio and video statistics for a subscriber.
Version 2.20.1 -- May 2021
Version 2.20.0 -- May 2021
This version adds the ability for moderators to mute participants. This is a beta feature.
See the docs for the Session.forceMuteAll()
and Session.forceMuteStream()
methods.
This version fixes an issue where the Session.unpublish()
method may fail if called immediately after publishing.
Version 2.19.1 -- April 2021
Version 2.19.0 -- February 2021
This version of the SDK uses WebRTC 84, which includes improvements in performance and stability.
This version adds support for RTC audio and video statistics for publishers and subscribers.
See the docs for the OTPublisherKit.getRtcStatsReport()
and OTSubscriberKit.getRtcStatsReport()
methods.
This version fixes the following issues:
The audio bitrate value set for publishers was handled incorrectly internally.
The SDK was not able to publish in Pixel 4 devices running API Level 30.
Version 2.18.1 -- October 2020
This version fixes the following issues:
The PublisherKit.onError()
callback was not being called in some scenarios where publishing failed.
The BaseVideoCapturer.provideBufferFrame()
method was not interpreting some formats correctly.
The SDK was not proxying all communications correctly when the IP Proxy feature was being used.
The SDK ProGuard rules were causing conflicts with other libraries.
The SDK ProGuard rules were marking internal attributes as public.
Version 2.18.0 -- August 2020
This version adds support for the IP Proxy feature.
This version adds the following methods and properties:
PublisherKit.onStop()
PublisherKit.onRestart()
BaseVideoCapturer.onStop()
BaseVideoCapturer.onRestart()
Please see the documentation for details.
From this version on, RGBA video frames are supported in custom video capturers.
This version fixes the following issues:
Apps could crash when disconnecting from a session when calling the PublisherKit.finalize()
method.
A regression in the Frame Metadata API where the metadata was not being transmitted could cause apps to crash when using the metadata associated with a video frame.
Restore the Stream.compareTo()
method, which was removed in 2.17.0.
The Android video view was not properly rendered when changing from scale type FILL to FIT.
An error getting the type of video for publishers.
Version 2.17.2 -- July 2020
Version 2.17.1 -- June 2020
This version fixes the following issues:
The sessionId
property was null for a Session instance returned from calling Publisher.getSession()
or Subscriber.getSession()
.
AudioDeviceManager.getAudioDevice().getOutputMode()
returned the wrong value
when a Bluetooth device was connected prior to an app connecting to
an OpenTok session.
Version 2.17.0 -- April 2020
This version adds the following methods and properties:
PublisherKit.onAudioLevelUpdated(float)
SubscriberKit.onAudioEnabled()
SubscriberKit.onAudioDisabled()
SubscriberKit.StreamListener.onAudioDisabled()
SubscriberKit.StreamListener.onAudioEnabled()
BaseVideoCapturer.CaptureSettings.mirrorInLocalRender
BaseAudioDevice.getBluetoothState()
Please see the documentation for details.
This version deprecates the following APIs:
Session.Builder.setApiUrl(URL)
PublisherKit.destroy()
SubscriberKit.destroy()
SubscriberKit.onDisconnected()
Stream.getSession()
Publisher.startPreview()
This version can be used along with Google's WebRTC Android library in the same application.
Version 2.16.6 -- March 2020
This version fixes the following issues:
Apps could crash while trying to publish without a valid camera interface.
Apps could crash due to a bug in the default audio device implementation.
Apps could experience issues capturing and rendering audio when the device receives an incoming phone call.
Version 2.16.5 -- February 2020
This version fixes the following issues:
Apps could crash when pausing and resuming audio.
We removed some URLs from the code that were preventing apps from receiving FirstNet certification.
Calling Session.onResume()
before calling Session.onPause()
could result
in video dropping out.
Version 2.16.4 -- February 2020
This version fixes the following issues:
Apps could crash when a disconnecting from a session if a PSTN call was in progress.
The SDK was not proxying all HTTP requests when the IP Proxy feature was being used.
The SDK was reporting incorrect values for the publisher's stream properties after the stream properties had changed.
Version 2.16.3 -- December 2019
This version fixes the following issues:
Apps could crash when disconnecting from a session with more than one subscriber.
Apps could crash because some callbacks threw a NullPointerException.
Version 2.16.2 -- September 2019
This version fixes the following issues:
Data for published streams is not showing up in OpenTok Inspector.
Apps crash when calling the SubscriberKit.getStream()
method in
the SubscriberKit.onDisconnect()
callback, because the method throws
a NullPointerException.
Apps crash or freeze when destroying publishers and subscribers after disconnecting from a session.
When using TextureView, if a publisher or subscriber view is removed from the parent layout, adding the view again results in black views for both publishers and subscribers.
Unsubscribing a subscriber when its stream is dropped results in an error.
When using a TextureView, publisher and subscriber views were not being displayed when an app came into the foreground from the background on devices running Android 6 or below.
Apps could crash shortly after connecting to an OpenTok session.
When communicating with the OpenTok logging infrastructure, the SDK was
creating a temporary cert.pem
file.
Version 2.16.1 -- June 2019
This version fixes the following issues:
The hasAudio
and hasVideo
properties of a subscriber's stream
property
were not updated when the stream's publisher unpublished audio and video.
The SDK could freeze when disconnecting from a session after disconnecting a publisher.
Video rendering was not resizing correctly when a TextureView containing the video was resized.
There were issues with the frame rate and autofocus when using the back camera.
Version 2.16.0 -- April 2019
When using this version, you will need to specify sourceCompatibility
and
targetCompatibility
to use Java 8. You can do this by modifying the app's
build.gradle file and adding the following code snippet to the android
section:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
The android.hardware.camera.autofocus
feature is no longer required in the
Android manifest for your app.
This version of the SDK uses WebRTC 71, which includes improvements in performance and stability.
This version fixes the following issues:
Using a device's volume button while an app using the OpenTok SDK is in the background resulted in the incorrect UI being displayed on the device. This also could cause other issues, such as errors if tries to record video.
If you connected to a session with a subscriber token and attempted to publish, the application would crash.
Subscriber.getStream()
would return null
when the
SessionListener.onStreamDropped()
method is called.
Version 2.15.3 -- January 2019
The OpenTok Android SDK now requests the
android.permission.READ_PHONE_STATE
permission. This additional
permission was added in version 2.15.0. Your app can remove
any permissions requested by the OpenTok Android SDK that it
does not use. See this post and [this
Android documentation.
This version fixes the following issues:
In Android 4.x, an application could crash if it tried
to remove the android.permission.READ_PHONE_STATE
permission that is now used by the SDK.
Calling Session.getCapabilities()
would cause an application to crash.
Version 2.15.2 -- December 2018
BaseAudioDevice.OutputMode.Handset
) to fail.Version 2.15.1 -- November 2018
Version 2.15.0 -- October 2018
The new MediaUtils.SupportedCodecs.getSupportedCodecs()
method
lets you determine the video codecs supported on the device.
The SubscriberKit.onVideoDisabled()
method can be called with the reason
parameter set to the new SubscriberKit.VIDEO_REASON_CODEC_NOT_SUPPORTED
value, which indicates that a subscriber's video was disabled because the
stream uses a video codec (such as H.264) not supported on the device.
The new PublisherKit.setAudioStatsListener()
and
PublisherKit.setVideoStatsListener()
methods let you monitor audio
and video statistics for a publisher.
This version adds support for the x86_64 architecture. This improves performance on devices like the Vuzix M300.
Patners that have the allowed IP list add-on feature
enabled for an OpenTok project should call the new Session.Builder.setIpWhitelist()
method (passing in true
) when instantiating a Session object.
Version 2.14.3 -- August 2018
This version fixes the following issues:
Apps crash upon receiving a signal sent using the OpenTok REST API or the OpenTok server SDKs.
Apps could crash if the dimensions of a subscribed video change.
Version 2.14.2 -- August 2018
Version 2.14.1 -- July 2018
This version fixes the following issues:
When resizing a TextureView containing an OpenTok video, the resized view does not scale the whole video correctly and results in a cropped video. However, when resizing a GLSurfaceView containing an OpenTok video, the resized view produces a properly scaled video. This issue was introduced in v2.14.0.
Sessions sometimes fail to automatically reconnect This issue was introduced in v2.14.0.
Version 2.14.0 -- April 2018
This version adds a metadata
parameter to each of the BaseVideoCapturer methods for
providing video frames to a custom video capturer: BaseVideoCapturer.provideByteArrayFrame()
,
BaseVideoCapturer.provideIntArrayFrame()
, BaseVideoCapturer.provideBufferFrame()
, and
BaseVideoCapturer.provideBufferFramePlanar()
. When implementing a custom video capturer,
you can set this parameter to provide metadata for a video frame. (For backwards compatibility,
the BaseVideoCapturer class retains the existing versions of each of these methods, which
do not include the metadata
parameter.) When implementing a custom video renderer, you can
use the new Frame.getMetadata()
method to get the metadata.
This version fixes the following issues:
Calling Subscriber.getSession()
method after the Session object is destroyed could cause
an app to crash.
The videoPacketsLost
value reported by the SubscriberKit.VideoStatsListener.onVideoStats()
method was always set to 0.
The SDK failed to work on networks with proxy servers.
Version 2.13.0 -- January 2018
This version adds H.264 support on devices that support H.264 encoding (either via hardware or software). Software encoding is only supported on newer Android versions running Android 6+ (Marshmallow). This means that Android clients can interoperate with Safari clients (and others) in Safari OpenTok projects.
This version fixes the following issues:
Subscribing to high-resolution video would sometime result in cropping of the video.
Videos that use the scalable video feature would sometimes magnify. Scalable video is supported in sessions that use the OpenTok media router.
Version 2.12.1 -- October 2017
Version 2.12.0 -- September 2017
Android 8.0 (Oreo) support.
This version fixes the following issues:
Publishing an audio-only stream after previously publishing video fails.
An error getting camera parameters when using the default camera capturer can cause the app to crash.
Audio output might go to the phone speaker when it is set to use the headset speaker.
Reusing a publisher without unpublishing from the first session can cause the app to crash.
Version 2.11.1 -- July 2017
Version 2.11.0 -- April 2017
Audio-tuning API. Use the PublisherKit.Builder.audioBitrate(bitsPerSecond)
method to set the
audio bitrate for a publisher. (For more information, see the reference documentation.)
This version adds errors for stream and connection limits. These errors are useful in large OpenTok sessions:
If you call Session.connect()
when the session's connection limit has been exceeded,
the Session.SessionListener.onError()
method is called with an OTError object
that has an error code set to OpentokError.ErrorCode.SessionConnectionLimitExceeded
.
If you call Session.Subscribe()
when the session's stream limit has been exceeded,
the SubscriberKit.SubscriberListener.onError()
method is called with an OTError object
that has an error code set to OpentokError.ErrorCode.SubscriberStreamLimitExceeded
.
See the OpenTok developer guide on live interactive video broadcasts.
The Session.SessionOptions.isHwDecodingSupported()
method is deprecated, and the method
has no functionality. The SDK no longer supports using the Android MediaCodec class to
decode video.
This version fixes the following issues:
Cameras used by OpenTok publishers are now released when you call Session.onPause()
.
Publishers reacquire cameras when you call Session.onResume()
.
The camera display of a publisher was too dark on the Google Pixel. We added further improvements to those made in the 2.10.1 release.
Version 2.10.1
This version fixes the following issues:
The camera display of a publisher was too dark on the Google Pixel.
Switching the audio driver to use handset (BaseAudioDevice.OutputMode.Handset
) was not working.
The PublisherKit.setCapturer(capturer)
method did not work properly.
Version 2.10.0
This version adds new builder classes for constructing Session, Publisher, PublisherKit, Subscriber, and SubscriberKit objects:
Session.Builder
Publisher.Builder
PublisherKit.Builder
Subscriber.Builder
SubscriberKit.Builder
These classes let you define any combination of initialization settings to be used when creating Session, Publisher, PublisherKit, Subscriber, and SubscriberKit objects.
The existing constructor methods of the Session, Publisher, PublisherKit, Subscriber, and SubscriberKit classes are deprecated.
This version of the OpenTok Android SDK is supported on Android 4.1+ (Jelly Bean, API Level 16). For a list of supported devices, see the Developer and client requirements section of the OpenTok Android SDK page at the Vonage Video API developer center.
This version fixes an issue in which the video for a publisher was mirrored when using the back camera (on some devices).
Version 2.9.1
Version 2.9.0
This version adds 64-bit support (the armeabi64-v8a architecture).
The OpenTok Media Router now includes the OpenTok scalable video feature (previously in beta). For more information, see the OpenTok Media Router documentation.
This version adds a Session.getCapabilities()
method. Use this method
to check whether the client can publish streams to an OpenTok session,
based on the role assigned to the token used to connect to the session.
Please upgrade your apps to use the latest versions of the OpenTok server SDKs. These now use JSON web tokens (JWT) for authentication. JWT provides increased security along with standards-based encoding, decoding, and verification. The old form of authentication will expire in July 2017. Also, if you use the OpenTok REST API (instead of the server SDKs), please use JWT to authenticate calls to the OpenTok REST methods (see this topic on authentication).
Version 2.8.2
Fixed bug where the publisher audio-video state was not preserved between application lifecycle events.
Fixed a potential memory leak in subscribers.
Fixed a Bluetooth routing issue on certain devices.
Fixed bug in which custom video renderers resulted in black videos.
Version 2.8.1
This version fixes an audio-video synchronization issue in version 2.8.0.
Note that we have added TLS support to OpenTok TURN servers. This fixes media streaming for clients behind network firewalls that block non-TLS traffic over port 443.
Version 2.8.0
The library is now provided as an aar file (not a jar file).
This version add support for Bluetooth SCO profile devices (earpieces and headsets) in the default audio driver.
This version improves quality for published audio.
The new Publisher.startPreview()
method lets you display a publisher's camera video in the
Publisher's view before it starts streaming video.
The new Session.SessionOptionsProvider
interface lets you decide when to use hardware video
decoding.
The Publisher.swapCamera()
, Publisher.getCameraId()
, and Publisher.setCameraId()
methods
are deprecated. You should use the new Publisher.cycleCamera()
method to cycle between cameras,
if there are multiple cameras on the device. Use the new BaseVideoCapturer.CaptureSwitch
interface to define the behavior of the Publisher.cycleCamera()
method in a custom video
capturer.
The PublisherKit.setCapturer(BaseVideoCapturer capturer)
method is deprecated. Instead, use the
PublisherKit.capturer
property when creating a custom PublisherKit implementation. Or use the
new Publisher(Context context, String name, BaseVideoCapturer capturer)
constructor.
This version of the SDK uses WebRTC 49.
Version 2.7.0
Setting the frame rate and resolution for a published stream using the default camera video
capturer. A new version of the Publisher constructor, Publisher(context, name, resolution, fps)
,
includes parameters for setting the frame rate and resolution of the stream.
New methods for getting audio and video statistics for a stream. You can now set listeners to monitor the following statistics for a subscriber's stream:
See the documentation for the SubscriberKit.setAudioStatsListener(AudioStatsListener listener)
and SubscriberKit.setVideoStatsListener(VideoStatsListener listener)
methods.
Added support for armeabi-v7a.
This version requires Android 4.1 (Jelly Bean, API Level 16) or later.
Version 2.6.0
Added the Session.reportIssue()
method. You can call this method when your app
experiences an issue. The method returns an issue ID, which you can use with the
Inspector or when
discussing an issue with the Vonage API support team.
This release fixes the following issues:
Subscribers did not display video when the stream changed from audio-only to audio-video.
Calling the Session.sendSignal()
method when not connected to the session resulted in
the app crashing.
Calling the getData()
method of the Connection object passed into the
Session.SignalListener.onSignalReceived(session, type, data, connection)
method did
not return connection data.
When network connections were re-routed through a proxy or when Session objects were garbage collected, fatal signal 11 (SIGSEGV) errors would occur..
Reference table overflow errors caused apps to crash.
Version 2.5.0
Added proxy support.
Note that the samples directory is no longer included in the SDK bundle. The sample code is now available at the open-source opentok-android-sdk-samples repository on GitHub. This allows us to keep it up to date and provide developers with latest version of the sample code. Feel free to clone the repo or download the source code to see the best-practice examples of OpenTok usage.
Added hardware-accelerated VP8 decoding of videos on the Nexus 5 with Android Lollipop+.
Fixed a bug that could occur when you reuse a Session object to reconnect to a session.
Added a SessionIllegalState
error in the OpentokError.ErrorCode
enum. This defines an error
code for an error that occurs if you try to connect to a session that is already connected or if
you try to subscribe to a stream that is no longer in the session.
Version 2.4.1
Version 2.4.0
This version adds support for testing on the Genymotion x86 emulator and the official Android x86 emulator images in combination with the Intel HAXM software for VM Acceleration.
This version adds support for screen sharing. When publishing a screen-sharing stream,
call the setPublisherVideoType(type)
method of the PublisherKit object and pass in
PublisherKitVideoType.PublisherKitVideoTypeScreen
. This optimizes the video encoding
for screen sharing. It is recommended to use a low frame rate (5 frames per second or lower)
with screen sharing. When using the
screen video type in a session that uses the OpenTok Media Server, you should
call the setAudioFallbackEnabled(boolean enabled)
method of the Publisher object and
pass in true
to disable the audio-only fallback feature, so that the
video does not drop out in subscribers. See the OpenTok Media Router and media
modes.
When a stream is created in a session, you can determine the video type of the stream
(screen or camera) by calling the getStreamVideoType()
method of the Stream object.
The type of stream is defined by constants in the StreamVideoType enum: StreamVideoTypeScreen
,
StreamVideoTypeCamera
, and StreamVideoTypeCustom
.
To publish a screen-sharing stream, you need to implement a custom video capturer for the OTPublisherKit object. For sample code that publishes a screen-sharing stream, see the "screensharing" sample (in the samples directory).
You can disable the audio-only fallback feature for a published stream by calling the
setAudioFallbackEnabled(enabled)
method of the PublisherKit object (passing in false
).
The audio-fallback feature is available in sessions that use the OpenTok Media
Router. With the audio-fallback
feature enabled (the default), when the OpenTok Media Router determines that a stream's quality
has degraded significantly for a specific subscriber, it disables the video for that subscriber
in order to preserve audio quality. The audio-fallback feature is enabled by default.
This version of the SDK takes advantage of hardware acceleration for video decoding on devices that support it. These devices include the Nexus 5 (with OS before 5.0 Lollipop), the Asus K010, the Asus K011, and the Asus K013.
Updated to use BoringSSL, Google's fork of OpenSSL.
Fixed an issue with video not recovering when network conditions improve (after video was disabled, due to network conditions, in a session using the OpenTok Media Server).
Version 2.3.0
The reason parameter has been added to the
SubscriberKit.VideoListener.onVideoDisabled(SubscriberKit subscriber, String reason)
and SubscriberKit.onVideoDisabled(SubscriberKit subscriber, String reason)
methods. This parameter describes the reason why the subscriber video is being
disabled. In the previous version, this method was only called when the video
was disabled due to changes in the stream quality (in a session that uses the
OpenTok Media Router). In version 2.3.0, the method is also called if the
publisher stops sending a video stream or the subscriber stops subscribing to
it (and the reason
parameter value will be set accordingly).
New methods indicate when a subscriber's video stream starts (when there
previously was no video) or resumes (after video was disabled):
SubscriberKit.VideoListener.onVideoEnabled(SubscriberKit subscriber, String reason)
and SubscriberKit.onVideoEnabled(SubscriberKit subscriber, String reason)
.
Use the new PublisherKit.AudioLevelListener and SubscriberKit.AudioLevelListener
classes to monitor changes in the audio levels of publishers and subscribers.
To use these, call the setAudioLevelListener(listener)
method of a PublisherKit
or SubscriberKit object.
The new SubscriberKit.VideoListener.onVideoDisabledWarning(subscriber)
method
is called when the OpenTok Media Router determines that the stream quality has
degraded and the video will be disabled if the quality degrades more. The new
SubscriberKit.VideoListener.onVideoDisabledWarningLifted(subscriber)
method
is called when the stream quality improves. This feature is only available in
sessions that use the OpenTok Media Router (sessions with the
media mode
set to routed), not in sessions with the media mode set to relayed. The
SubscriberKit class also has protected onVideoDisabledWarning()
and
onVideoDisabledWarningLifted()
methods that you can implement (instead of
the VideoListener methods) when you subclass SubscriberKit.
This version includes a new custom audio driver API. This lets you use custom audio streams and define the audio device used to capture and render audio data. The following new classes support the custom audio driver API:
AudioDeviceManager -- Use this class to set the app to specify a custom audio device for use in the app.
BaseAudioDevice -- Defines an audio device for use in a session.
BaseAudioDevice.AudioBus -- The audio bus marshals audio data between the network and the audio device.
BaseAudioDevice.AudioSettings -- Defines the format of the audio.
You can optimize the speaker usage for voice-only calls by calling
AudioDeviceManager.getAudioDevice().setOutputMode(BaseAudioDevice.VOICE_COMMUNICATION)
.
This sets the app to use the headset speaker (and the loudspeaker is disabled), which is
preferable in voice-only apps.
This build improves the video quality under poor network conditions.
The Session.PublisherListener and the Session.onPublisherAdded(publisher)
and Session.onPublisherRemoved(publisher)
methods have been removed. You
can monitor the PublisherKit.PublisherListener.onStreamCreated(stream)
and
PublisherKit.PublisherListener.onStreamDestroyed(stream)
methods to determine
when a publisher's stream is created and destroyed.
Version 2.2.1
Updated to use version 1.0.1h of OpenSSL.
The Session.unpublish()
method now takes a PublisherKit parameter, instead of a Publisher
parameter. (The Publisher class extends PublisherKit.)
Disconnecting from a session may take longer than expected. We are working on a fix for this issue.
In a session with the media mode set to relayed, only one client can subscribe to a stream published by an Android device.
Video streaming is prevented on networks that have firewalls that use authenticated proxies. This is due to a core issue with the current underlying WebRTC implementation. (See this Chromium bug report.)
Audio is distorted in streams published from the Genymotion emulator.
When setting a proxy URL (with the OTSessionSettings.proxyURL
property), please
use the absolute URL root path only. Using the proxy path in the URL does not work currently
and is a known bug. Hence "https://my-proxy.herokuapp.com" and
"https://my-proxy.herokuapp.com:443" are acceptable, while
"https://my-proxy.herokuapp.com/" and "https://my-proxy.herokuapp.com/my-beta-app/version5" are not.
The frame rate of a published stream is decided by the camera driver, even if you a specify a different frame rate for the the published stream.
Google has issued a security notice regarding vulnerabile versions of usrsctp, a library needed for WebRTC data channels. OpenTok does not support WebRTC data channels so users are not impacted. Additionally, usrsctp is not included in the SDK.