Differences from the JavaScript SDK
Public Beta
The Video Media SDK for Node.js is currently available as a Public Beta product and the information contained in this document is subject to change. This means that some features are not yet implemented and others may be changed before the product is declared as Generally Available. Public Beta products are not covered by the Twilio Support Terms or Twilio Service Level Agreement.
The Video Media SDK for Node.js is not a US Health Insurance Portability and Accountability Act (HIPAA) Eligible Service or Payment Card Industry Data Security Standard (PCI DSS) compliant and should not be enabled in workflows that are subject to HIPAA or PCI.
The Video Media SDK for Node.js shares the Room, Participant, and Track model and event names with the Twilio Video JavaScript SDK. It connects with the same Access Token and VideoGrant format. It uses the JavaScript SDK object model.
The Node.js SDK runs on a server without camera, microphone, or screen. The following table maps each feature between browser and server.
| Video JavaScript SDK | Video Media SDK for Node.js | |
|---|---|---|
| Send video frames | Captures local media from a camera or microphone. | Push raw frames without device capture. |
| Render video frames | Renders remote media. | Has no attach() method. Delivers raw decoded frames through the frames() async iterator. |
| Accept audio inputs | Accepts various input from devices. | Uses 48 kHz mono S16LE PCM. |
| Choose codecs | Uses the codecs the browser supports, including VP8, VP9, and H.264. | Supports only VP8 video and Opus or PCMU audio. Can't publish or subscribe to H.264 or VP9 video tracks. Any other value in preferredVideoCodecs or preferredAudioCodecs makes connect() reject with a TypeError. |
| Tune bandwidth | Supports adaptive simulcast and the TrackPriority API. | Uses bandwidthProfile, encodingParameters, and setContentPreferences(). |
| Create local tracks | Creates asynchronously after device permission. | Creates synchronously without device prompt. |
| Send data messages | send() returns nothing. | send() returns a promise that always resolves to { ok, messageId, error }, never rejects, and throws a RangeError synchronously for a message larger than 64 KB. |
| End a session | Your app calls room.disconnect(). | Your app calls room.disconnect(), and then room.dispose() to release native resources. Until your app calls dispose(), the Node.js process doesn't exit. |
The JavaScript SDK runs in a browser. The Node.js SDK runs on Node.js version 24.0.0 or later on Linux x86-64, or on macOS x86-64 for local development. On an Apple Silicon Mac, you need an x64 build of Node.js. To learn more, see system requirements.
- Quickstart: Connect to a Room and move your first frames.
- Work with media frames: Learn the I420 video and PCM audio formats that replace device capture and rendering.