Video API Reference App for Mobile (iOS) Release Notes
v1.4.0 — October 2026
Features
- Authentication Foundation Support — Added a provider-based authentication foundation, with Okta as the first identity provider.
- Multi-Session Call Foundation — Refactored the call and session relationship so a call can support multiple sessions in the future.
- Starter Kit Configuration and Theming — Added builder tooling for generated app configuration and themes, with runtime control over meeting-room features and UI visibility.
- SwiftUI Observation API — Migrated from
ObservableObjectto the@Observablemacro from the Swift Observation framework to reduce unnecessary view re-renders and improve UI performance. - iOS 17 Minimum Support — Raised the minimum supported iOS version from iOS 16 to iOS 17.
v1.4.0 — October 2026
Features
- Authentication Foundation Support — Added a foundation for identity providers, with Okta as the first supported provider.
- Configurable Meeting Room Experience — Added configuration for controls, picture-in-picture, initial layout, and custom speaker-test content.
- Runtime Feature Configuration — Added app-config controls for meeting-room capabilities and the initial audio/video state.
- Configuration Tooling — Added a schema-driven TUI for editing and validating application and theme configuration.
Bug Fixes
- Video Effects After Camera Re-Enable — Active background and blur effects are now reapplied when the camera is turned back on.
- Feature Module Build Variants — Fixed disabled feature providers to match the enabled provider interfaces.
- Release Builds — Updated R8 configuration to prevent release build issues.
v2.34.1 — October 2026
Fixed
-
Fixed an Android crash (SIGSEGV) that occurred during long-running calls with heavy stream churn. The crash was caused by subscriber event callbacks reading stream data from already-freed native memory. Stream data is now read once at subscribe time into an immutable snapshot; all subsequent callbacks read from the snapshot only.
-
Fixed Android performance degradation during prolonged calls caused by unnecessary event processing. Audio level, audio network stats, and video network stats events are now only forwarded to JavaScript when a handler is attached, eliminating overhead when no listener is registered.
-
Fixed a JS listener lifecycle issue in OTSession where remounting a session accumulated duplicate global event listeners, causing multiplied events and unnecessary re-renders.
-
Fixed shared-state leaks on Android where streams, publishers, and subscribers were not correctly removed from internal maps on unsubscribe, unpublish, or an involuntary disconnect, causing the maps to grow unbounded over time.
-
Fixed an issue on Android where calling
publish()before the publisher view had finished attaching could silently drop the publish request. -
Fixed an issue on Android where calling
getCapabilities()before the session connected could crash the app natively. This now rejects with an error instead.
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.33.4 — October 2026
Fixed
-
Fixed an Android crash (SIGSEGV) that occurred during long-running calls with heavy stream churn. The crash was caused by subscriber event callbacks reading stream data from already-freed native memory. Stream data is now read once at subscribe time into an immutable snapshot; all subsequent callbacks read from the snapshot only.
-
Fixed Android performance degradation during prolonged calls caused by unnecessary event processing. Audio level, audio network stats, and video network stats events are now only forwarded to JavaScript when a handler is attached, eliminating overhead when no listener is registered.
-
Fixed a JS listener lifecycle issue in OTSession where remounting a session accumulated duplicate global event listeners, causing multiplied events and unnecessary re-renders.
-
Fixed shared-state leaks on Android where streams, publishers, and subscribers were not correctly removed from internal maps on unsubscribe, unpublish, or an involuntary disconnect, causing the maps to grow unbounded over time.
-
Fixed an issue on Android where calling
publish()before the publisher view had finished attaching could silently drop the publish request. -
Fixed an issue on Android where calling
getCapabilities()before the session connected could crash the app natively. This now rejects with an error instead.