Video Javascript SDK Release Notes
v2.36.0 — November 2026
Added
-
Performed iOS 27 validation. The Vonage Web SDK has been validated on iOS 27, confirming smooth operation across iOS mobile browsers and WebView applications.
-
Client Observability: quality restriction insights. Statistics now provide more detail on why video quality is being limited, for both subscribers and publishers:
- Subscriber video statistics now report whether the received video quality is being restricted, and where the restriction originates. The new
senderQualityRestrictionproperty of the subscriber video statistics (stats.video) reflects restrictions applied by the immediate sender (the Media Router in routed sessions, or the publisher in relayed sessions). - The new
remotePublisherQualityRestrictionproperty reflects restrictions applied by the originating publisher, such as CPU or uplink bandwidth constraints. - Changes in the sender quality restriction are now also reported in the subscriber
videoQualityChangedevent, with thereasonproperty set to"senderQualityRestriction". - The network condition reason now includes two new values, which apply only to the publisher's transport:
"noSubscribers"(the publisher bitrate is limited because there are no active subscribers) and"downstreamConstraint"(the publisher bitrate is constrained by downstream receiver conditions, typically when client simulcast is disabled).
For more information, see this documentation.
- Subscriber video statistics now report whether the received video quality is being restricted, and where the restriction originates. The new
-
Built-in publish retry. The SDK now automatically retries a failed
session.publish()when the failure is caused by a recoverable error, so applications no longer need to implement their own retry logic. Three new optional properties of the publisher options object (passed toOT.initPublisher(), or tosession.publish()when publishing without a pre-initialized publisher) control this behavior:maxPublishTimeout(default15000ms) sets the maximum time allowed for the publish operation to succeed. While the timer runs, the SDK retries on any recoverable error. Non-recoverable errors are still returned immediately, and a timeout error is returned if the timeout expires. When set explicitly, it acts as a hard timeout. When left at the default, the timer pauses while the socket is disconnected and resumes when it reconnects.onRetryis a callback invoked each time a recoverable error is encountered and a retry is about to be attempted. It receives the error that triggered the retry. It is informational only and cannot cancel the retry.fallbackOnPartialPermission(defaultfalse), whentrue, lets the publish continue with the permitted devices if the user grants access to only some of them, or if a device permission is revoked after publishing has started. Denied or revoked devices are reported via theaccessDeniedevent. If all requested devices are denied, publishing fails as before.
For more information, see this documentation.
-
End-to-end encryption: new error when encryption is not enabled. Setting an encryption secret in a session that was not created with end-to-end encryption enabled now results in a new
OT_ENCRYPTION_NOT_ENABLEDerror. Previously, the secret was silently ignored. For more information, see this documentation.
Fixed
- Fixed an issue on iOS WKWebView where applying a background blur or background replacement video filter caused the published video to appear rotated 90 degrees, both in the publisher preview and for subscribers.
- Improved the stability of the background replacement video filter on Safari.
- Improved the reliability of publishers and subscribers in sessions that use adaptive media routing, when switching between relayed and routed connections.
- Fixed memory leaks that could occur when publishers were repeatedly created and destroyed, or when the published stream changed.
- Improved automatic reconnection to the session. When the server rejects a reconnection attempt with an error that cannot be recovered, the client now stops retrying and disconnects right away, instead of retrying until the reconnection timeout expires.
- Fixed an issue where a publisher without an audio source could throw an error when updating its audio level.
- Fixed an issue where calling
Subscriber.subscribeToCaptions()before the subscriber had finished connecting to the stream could fail. The call is now applied once the subscriber is ready.
- Fixed an issue where retrieving WebRTC statistics could fail in some browsers and webviews, affecting statistics collection and network tests. The SDK now detects the statistics API supported by the browser more reliably.
v2.35.4 — November 2026
Fixed
- Fixed an issue where deprecation warnings for the
transportStatsandsenderStatsstatistics properties and theaddEventListenerAPI were logged to the console even when the application did not use these deprecated APIs. The warnings now appear only when the application uses a deprecated API. This version also fixes thestatsContainerproperty of the PublishernetworkConditionChangedevent, which now includes thestats,subscriberId, andconnectionIdproperties, like thevideoQualityChangedevent.
v2.35.3 — October 2026
Fixed
- Fixed an issue in AMR sessions where a Subscriber could emit a
disconnectedevent without subsequently emitting aconnectedevent after the connection recovered.
- Fixed an issue where
networkDegradationSourcecould report onlybothOrUnclearin AMR-enabled Routed 1:1 sessions. Sender statistics activation is now retried after subscription completes when necessary, improving detection of whether degradation is local or remote.
- Fixed an issue where video could remain disabled after audio fallback and an AMR media-mode transition, even after network conditions improved.
- Fixed an issue where
networkDegradationSourcecould incorrectly identify the source of network degradation in peer-to-peer (P2P) connections.
- Fixed an issue where enabling a video filter, changing the publisher's preferred resolution, and then toggling video off and on produced an unexpected zoom effect.
- Fixed a race condition that could cause an
OpenTok:MediaProcessor:errorerror whenpublishVideo(true)was called whileapplyVideoFilter()was still in progress.
- Improved Subscriber audio fallback state handling so that
networkConditionChangedreports network conditions consistently while Subscriber Audio Fallback is active.
- Reduced unnecessary
audioAcquisitionProblemevents during PeerConnection reconnection, disconnection, or failure.
- Fixed duplicate
promisedeclarations in the TypeScript definitions that could cause TypeScript errors TS2300 and TS2717 in projects using OpenTok.js 2.35.1 or 2.35.2.
- Fixed an issue where Publisher Audio Fallback could remain active after calling
publishVideo(false)followed immediately bypublishVideo(true), preventing video from resuming when network conditions improved.
- Fixed an issue where calling
publishAudio(false)during Publisher Audio Fallback could cause Subscribers to receive unexpectedvideoEnabledorvideoDisabledevents withreason=publishVideo.
- Fixed an issue where a Subscriber did not receive a
connectedevent after AMR recovered from a disconnected P2P connection and transitioned back to Routed media mode.
- Improved subscription reliability in Safari 26 by extending the timeout for gathering relay ICE candidates, reducing timeout errors 1501 and 1554.
v2.34.3 — September 2026
Fixed
- Fixed an issue where retrieving WebRTC statistics could throw a
TypeErroron iOS WKWebView and Capacitor-wrapped apps, causing errors when collecting stats or running network tests.
- Fixed an issue where the
audioLocalCandidateType,videoLocalCandidateType,audioRemoteCandidateType, andvideoRemoteCandidateTypefields in the QoS stats could report incorrect values by using the last ICE candidate instead of the selected one.
- Improved the automatic reconnection logic so that the reconnection timeout window is no longer reset on every transport reconnection, preventing the client from getting stuck in an infinite reconnection cycle.
- Fixed an issue where video filters, background blur, and background replacement did not work on Safari 27 and iOS 27.
v2.35.2 — September 2026
Fixed
- Fixed an issue where a black flicker could briefly appear on a subscribed stream immediately after subscribing during 1-on-1 calls on Safari.
- Fixed an issue where retrieving WebRTC statistics could throw a
TypeErroron iOS WKWebView and Capacitor-wrapped apps, causing errors when collecting stats or running network tests.
- Fixed an issue on Firefox where rapidly toggling video off and on (calling
publishVideo(false)immediately followed bypublishVideo(true)) could intermittently leave the published video disabled, showing a black frame until the next toggle.
- Fixed an issue where the
audioLocalCandidateType,videoLocalCandidateType,audioRemoteCandidateType, andvideoRemoteCandidateTypefields in the QoS stats could report incorrect values by using the last ICE candidate instead of the selected one.
- Fixed an issue where a subscriber could fail to start when the browser's autoplay policy blocked video playback. The subscriber now times out the play attempt and continues with muted audio (which the user can unmute) instead of failing to subscribe.
- Improved the automatic reconnection logic so that the reconnection timeout window is no longer reset on every transport reconnection, preventing the client from getting stuck in an infinite reconnection cycle.
- Fixed an issue where video filters, background blur, and background replacement did not work on Safari 27 and iOS 27.