Releases: twilio/twilio-video.js
2.32.1
2.32.1 (August 1, 2025)
Bug Fixes
- Fixed an issue where video tracks would freeze when the video element was offscreen in a document Picture-in-Picture window.
- Fixed an issue where
LocalVideoTrack.restart()
would fail on some devices when a video processor was active. - Fixed an issue where SDP munging would generate duplicated payload types, causing SDP negotiation failures with Chrome 137+.
2.32.0
2.32.0 (July 23, 2025)
New Features
Real-Time Transcriptions Support
Added real-time transcription capabilities for group rooms, allowing the capture and display of real-time captions during video calls.
Usage
To receive transcriptions, set the receiveTranscriptions
option to true
when connecting to a room. Then, subscribe to the transcription
event to receive real-time transcription data:
import { connect } from 'twilio-video';
const room = await connect(token, {
name: 'my-room',
receiveTranscriptions: true
});
room.on('transcription', (transcriptionEvent) => {
console.log(`${transcriptionEvent.participant}: ${transcriptionEvent.transcription}`);
});
See the Transcription's documentation for more details.
2.31.0
2.31.0 (April 21, 2025)
New Features
Document Picture-in-Picture API Support
Previously, when Client Track Switch Off Control
was set to auto
, video tracks were automatically switched off—even if they were visible and rendered in a Document Picture-in-Picture (PiP) window. This caused issues where users could see the video element, but the track itself was disabled. In this new SDK version, video tracks will remain active and continue to play when displayed in a PiP window.
2.30.0
2.30.0 (March 28, 2025)
New Features
WebRTC Overrides (Beta)
The SDK now enables you to override WebRTC APIs with the following options. If your environment supports WebRTC redirection—such as Citrix HDX's WebRTC redirection technologies—your application can leverage this new beta feature to enhance media quality in those environments. For more details, please refer to the JavaScript WebRTC Overrides documentation.
ConnectOptions
rtcConfiguration
- An optionalRTCConfiguration
object passed to the RTCPeerConnection constructor.RTCPeerConnection
- Allows overriding the nativeRTCPeerConnection
class.
ConnectOptions and CreateLocalTracksOptions
getUserMedia
- Overrides the nativeMediaDevices.getUserMedia
API.enumerateDevices
- Overrides the nativeMediaDevices.enumerateDevices
API.MediaStream
- Overrides the nativeMediaStream
class.mapMediaElement
- Callback triggered after a media track is attached to an audio or video element.disposeMediaElement
- Callback triggered after a media track is detached from an audio or video element.
Bug Fixes
- Fixed a bug where a Chrome iOS Participant's local audio (Krips Noise Cancellation enabled) did not recover after disconnecting a bluetooth headset. (VIDEO-13010)
2.29.0
2.29.0 (December 6, 2024)
Changes
Video Processor V3 support (Beta)
AddProcessorOptions.outputFrameBufferContextType = 'bitmaprenderer'
is now supported on Safari and Firefox. (VBLOCKS-3643, VBLOCKS-3644)AddProcessorOptions.inputFrameBufferType
now has a new valuevideoframe
. On browsers that supportVideoFrame
, theinputFrameBuffer
argument ofVideoProcessor.processFrame()
will be aVideoFrame
. On other supported browsers, it will be anHTMLVideoElement
.AddProcessorOptions.outputFrameBufferContextType
now has a new valuebitmaprenderer
. Currently, this is only supported for Chromium-based browsers. On other supported browsers, it falls back to2d
.- Patched the build script to work around the issue: markdown-it/linkify-it#111.
2.28.2
2.28.2 (November 22, 2024)
Bug Fixes
- Fixed a bug in Desktop Safari 18 and all iOS browsers on iOS 18 where cloning a disabled
MediaStreamTrack
would incorrectly set theenabled
property totrue
instead of preserving the original disabled state. This ensures track cloning behavior matches the MediaStreamTrack specification and works consistently across browsers. Bug report: https://bugs.webkit.org/show_bug.cgi?id=281758
2.29.0-preview.1
2.29.0-preview.1 (August 13, 2024)
Changes
AddProcessorOptions.inputFrameBufferType
now has a new valuevideoframe
. On browsers that supportVideoFrame
, theinputFrameBuffer
argument ofVideoProcessor.processFrame()
will be aVideoFrame
. On other supported browsers, it will be anHTMLVideoElement
.AddProcessorOptions.outputFrameBufferContextType
now has a new valuebitmaprenderer
. Currently, this is only supported for Chromium-based browsers. On other supported browsers, it falls back to2d
.- Patched the build script to work around the issue: markdown-it/linkify-it#111.
2.28.1
2.28.1 (October 3, 2023)
Bug Fixes
- Previously, a Chrome iOS 17 Participant's local audio (Krisp noise cancellation enabled) did not recover after foregrounding the browser following the playing of a YouTube video (or some other application which requires microphone permissions). We work around this by permanently disabling the Krisp noise cancellation upon foregrounding the browser. (VIDEO-13006)
2.28.0
2.28.0 (September 14, 2023)
Bug Fixes
- Fixed a bug where a Chrome iOS 17 Participant's local and remote media (Krisp Noise Cancellation enabled) failed to recover after interacting with a PSTN call in full-screen mode. (VIDEO-13011)
- Fixed a bug where a Chrome iOS 17 Participant's audio with Krisp Noise Cancellation did not recover after interacting with a system popup. (VIDEO-13012)
- Fixed a bug where a Chrome iOS 17 Participant's audio with Krisp Noise Cancellation did not recover after invoking Siri. (VIDEO-13013)
2.27.0
2.27.0 (March 21, 2023)
Changes
VideoTrack.addProcessor
now works on browsers that support OffscreenCanvas
as well as HTMLCanvasElement
. When used with
@twilio/video-processors v2.0.0, the Virtual Background feature will work on browsers that supports WebGL2. See VideoTrack.addProcessor and @twilio/video-processors v2.0.0 for details.
Example
import { createLocalVideoTrack } from 'twilio-video';
import { Pipeline, VirtualBackgroundProcessor } from '@twilio/video-processors';
const virtualBackgroundProcessor = new VirtualBackgroundProcessor({
pipeline: Pipeline.WebGL2,
// ...otherOptions
});
await virtualBackgroundProcessor.loadModel();
const videoTrack = await createLocalVideoTrack({
width: 640,
height: 480,
frameRate: 24
});
videoTrack.addProcessor(processor, {
inputFrameBufferType: 'video',
outputFrameBufferContextType: 'webgl2',
});