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 ObservableObject to the @Observable macro 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.

Full Changelog


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.

Full Changelog


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 disconnected event without subsequently emitting a connected event after the connection recovered.
  • Fixed an issue where networkDegradationSource could report only bothOrUnclear in 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 networkDegradationSource could 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:error error when publishVideo(true) was called while applyVideoFilter() was still in progress.
  • Improved Subscriber audio fallback state handling so that networkConditionChanged reports network conditions consistently while Subscriber Audio Fallback is active.
  • Reduced unnecessary audioAcquisitionProblem events during PeerConnection reconnection, disconnection, or failure.
  • Fixed duplicate promise declarations 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 by publishVideo(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 unexpected videoEnabled or videoDisabled events with reason=publishVideo.
  • Fixed an issue where a Subscriber did not receive a connected event 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.