---
"@context": https://schema.org
"@type": TechArticle
"@id": https://www.twilio.com/docs/video/node#article
headline: Video Media SDK for Node.js overview
description: Learn how the Video Media SDK for Node.js gives server-side apps direct access to raw audio and video frames in a Twilio Video Room.
url: https://www.twilio.com/docs/video/node
inLanguage: en
dateModified: 2026-10-05T15:56:06.000Z
author:
  "@type": Organization
  name: Twilio Developer Education Team
publisher:
  "@type": Organization
  name: Twilio
---

# Video Media SDK for Node.js overview

> \[!IMPORTANT]
>
> 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][sla].
>
> The Video Media SDK for Node.js is not a US [*Health Insurance Portability and Accountability Act* (HIPAA)][hipaa] Eligible Service or [*Payment Card Industry Data Security Standard* (PCI DSS)][pci] compliant and should not be enabled in workflows that are subject to HIPAA or PCI.

[hipaa]: https://en.wikipedia.org/wiki/Health_Insurance_Portability_and_Accountability_Act

[pci]: https://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard

[sla]: https://help.twilio.com/articles/115002413087-Twilio-Beta-product-support

The Video Media SDK for Node.js provides a server-side SDK for Twilio Video [Group Rooms][vRoom] with raw media frame access. It lets a Node.js process join a Room and push and receive media frames. A media frame includes the decoded video, audio, and data track messages that flow through the Room one frame at a time. Twilio built the SDK on top of [*Web Real-Time Communication* (WebRTC)][webrtc], so it doesn't require a browser or a device.

The SDK shares the [Room][vRoom], [Participant][vPart], and [Track][vTrack] model and event names with the [Twilio Video JavaScript SDK][]. It connects with the same [Access Token][access-token] and `VideoGrant` format. If you know the JavaScript SDK, most concepts carry over.

To learn the differences between the client and server SDKs, see [Differences from the JavaScript SDK][].

The Video Media SDK for Node.js processes real-time media in a Room. It differs from the [`twilio-node` helper library][], which calls the Twilio REST APIs. You can use both in the same app. You can create an Access Token with `twilio-node` and move media with the Media SDK.

To try an example, see the [`examples` directory][] in the SDK repository.

## System requirements

The SDK ships a prebuilt native binary. It requires Node.js version 24.0.0 or later running on x86-64, on one of the following platforms:

* Linux on x86-64, with glibc version 2.34 or later (Ubuntu 22.04 or later, Debian 12 or later) and the `libX11` library installed.
* macOS 26 or later on x86-64, for local development.

On macOS, npm can't check the operating system version. On versions prior to macOS 26, `npm install` succeeds and the SDK fails when it loads the native binary.

Use macOS for local development only. Twilio doesn't support the macOS build in production.

The SDK doesn't provide an arm64 build for either platform. On x86-64, `process.arch` reports `x64`. Alpine and other musl-based distributions aren't supported.

> \[!NOTE]
>
> The SDK requires an x64 build of Node.js. Rosetta lets an x64 build run on Apple Silicon, but installing Rosetta doesn't change which build of Node.js you have. If your Node.js is an arm64 build, the SDK doesn't install.
>
> To install an x64 build of Node.js on an Apple Silicon (M-series) Mac, follow these steps:
>
> 1. In Terminal, install Rosetta:
>    ```shell
>    /usr/sbin/softwareupdate --install-rosetta --agree-to-license
>    ```
> 2. Install an x64 build of Node.js version 24.0.0 or later. Open a shell that runs under Rosetta, and then install Node.js with nvm:
>    ```shell
>    arch -x86_64 zsh
>    nvm install 24
>    ```
> 3. Confirm that your Node.js install uses the `x64` architecture:
>    ```shell
>    node -e "console.log(process.arch)"
>    ```
>    A successful install returns `x64`. If this commands returns `arm64`, you're running an arm64 build:
>    * If you have an arm64 build of Node.js 24, remove it, and then repeat steps 2 and 3:
>      ```shell
>      nvm deactivate
>      nvm uninstall 24
>      ```
>
> If `npm install` fails with `npm error code EBADPLATFORM` and reports `"cpu":"arm64"`, you're running an arm64 build of Node.js. Follow the preceding steps to switch to an x64 build.

## Known issues and limitations

The SDK supports fewer [codecs][] than the Twilio Video client SDKs:

* **Video**: VP8 only. The SDK can't publish or subscribe to H.264 or VP9 video tracks.
* **Audio**: Opus and PCMU only. The SDK doesn't support PCMA or G.722.

If you pass any other codec in `preferredVideoCodecs` or `preferredAudioCodecs`, `connect()` rejects with a `TypeError`. If a remote participant publishes an H.264 video track, the subscription fails with error [53404][]. To make sure the SDK receives video from every participant, set `preferredVideoCodecs: ['VP8']` in your client apps. To fix codec errors, see [Troubleshoot Node.js Media SDK issues][troubleshoot-codecs].

## Resources

* [Quickstart][]: Connect to a Room and push and receive frames.
* [Work with media frames][]: Understand the I420 video and PCM audio frame formats.
* [Differences from the JavaScript SDK][]: See what changes when you move to the server.
* [API Reference][]: Browse the full Node.js API reference.
* [Changelog][]: Review changes in each release.
* [SDK repository][]: Read the source and file issues.

[`examples` directory]: https://github.com/twilio/twilio-video-node/tree/main/examples

[`twilio-node` helper library]: https://github.com/twilio/twilio-node

[53404]: /docs/api/errors/53404

[API Reference]: https://twilio.github.io/twilio-video-node/latest/

[Changelog]: https://github.com/twilio/twilio-video-node/blob/main/CHANGELOG.md

[codecs]: /docs/video/managing-codecs

[Differences from the JavaScript SDK]: /docs/video/node-differences-from-javascript-sdk

[Quickstart]: /docs/video/node-getting-started

[SDK repository]: https://github.com/twilio/twilio-video-node

[troubleshoot-codecs]: /docs/video/media-sdk-troubleshooting

[Twilio Video JavaScript SDK]: /docs/video/javascript

[vPart]: /docs/video/api/participants

[vRoom]: /docs/video/api/rooms-resource

[vTrack]: /docs/video/api/publishedtrack

[Work with media frames]: /docs/video/node-working-with-media-frames

[WebRTC]: https://webrtc.org

[access-token]: /docs/video/node-getting-started#create-an-access-token
