SkyWay JS-SDK を Node.js に非公式に対応させた SDK です。 JS-SDK と API はほとんど同じですが、一部機能に対応していません。
本 SDK は skyway-js-sdk の v2.5.1 に追従しています。 v2 は破壊的変更を含むメジャーアップデートであり、本 SDK もブラウザ版 v2 の API をそのまま採用しています。
- https://github.com/shinyoshiaki/skyway-nodejs-sdk/tree/nodejs/examples
- https://github.com/shinyoshiaki/skyway-nodejs-playground
ブラウザ版 v2.0.0 の破壊的変更がそのまま適用されます。主な変更点は次のとおりです。
- P2P と SFU を同一 Room で同時に使える統合
Room型が追加された(SkyWayRoom.Create/Find/FindOrCreateでtypeを省略、または'default'を指定すると統合 Room になる)。 SkyWayRoom.Findの第 3 引数が文字列からオブジェクトに変更された。- v1:
SkyWayRoom.Find(context, { id }, 'sfu') - v2:
SkyWayRoom.Find(context, { id }, { type: 'sfu' })
- v1:
SfuRoom→SFURoom、SfuBotMember→SFUBotMemberなどSfuを含む識別子がSFUにリネームされた。updateReminderSec→updateRemindSecにリネームされた。P2PRoom.moveRoom/SFURoom.moveRoomが削除された。cancel/onCanceled/LocalStream.isEnabledなどの deprecated なメンバーが削除された。Memberにsideプロパティが追加された。
- 提供パッケージ
- room
- 対応動作環境
- Node.js v22 以降
- 対応通信方法
- P2P
- SFU
- 対応コーデック
- opus
- vp8
- h264
- 非対応機能
- simulcast
LocalAudioStream.getAudioLevel/RemoteAudioStream.getAudioLevel(Web Audio API に依存するため。呼び出すとnotSupportedInNodejsエラーになります)SkyWayStreamFactory.enumerateDevicesなどのデバイス列挙 API とcreateDisplayStreams(ブラウザのデバイス列挙・getDisplayMediaに依存するため)。 Stream のソースはregisterMediaDevices/registerAudioTestSrc/registerVideoTestSrcで登録してからcreateMicrophoneAudioStream/createCameraVideoStreamを使います。- Analytics(統計情報の SkyWay サーバへの自動送信)。
SkyWay の AnalyticsServer が Node.js からの WebSocket 接続を受け付けないため、
トークンで
analytics: trueを指定しても Analytics セッションは作成されません。 統計情報そのものはPublication.getStats/Subscription.getStatsで取得できます。
- SFU: ./examples/sendrecv/audio.ts
- P2P: ./examples/sendrecv/p2p.ts
- 統合 Room(P2P と SFU の同時利用 /
Member.side/rtcConfig.stunPorts): ./examples/sendrecv/unified_room.ts
ユーザアプリケーションで利用する際は NPM と CDN の 2 通りのインストール方法があります
npm がインストールされている環境下で以下のコマンドを実行します。
npm install @shinyoshiaki/skyway-nodejs-sdkまた SkyWay Auth Token 用モジュールは次の HTML 記述および グローバル変数 skyway_token より取得することができます。
<script src="https://cdn.jsdelivr.net/npm/@skyway-sdk/token/dist/skyway_token-latest.js"></script>const { SkyWayAuthToken, nowInSec, uuidV4 } = skyway_token;一部 API に対応していません。
https://skyway.ntt.com/ja/docs/user-guide/javascript-sdk/
一部 API に対応していません。
examples 配下にサンプルアプリケーションを同梱しております。
- examples ディレクトリ以下の任意のサンプルアプリのディレクトリに移動する
- そのディレクトリで以下のコマンドを実行する
npm i
npm run dev- コマンドを実行するとローカルサーバが起動するので Web ブラウザでアクセスする
以下はこのリポジトリを用いて利用者自身で SDK をビルドするために必要な手順です。なおこのリポジトリはモノリポジトリ構成であり、依存関係は pnpm の workspace によって管理されています。
- Node.js をインストールする(バージョンは v22.0.0 以降。upstream の要求に合わせています)
- examples の依存パッケージをインストール
sudo apt-get -y install build-essential git gobject-introspection libgirepository1.0-dev libcairo2 libcairo2-dev libavdevice-dev libavfilter-dev libopus-dev libvpx-dev pkg-config libsrtp2-dev libasound2-dev libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-pulseaudio gir1.2-gstreamer-1.0
- corepack を有効化するために次のコマンドを実行する
sudo corepack enable- パッケージマネージャは
package.jsonのpackageManager(pnpm 11 系)に従います
- ルートディレクトリで次のコマンドを実行する
pnpm run firstpnpm run first は submodule:init(werift の third_party/wpt は除外)→ pnpm i
→ submodule:install → compile を順に実行します。
env.ts.templateをenv.tsにリネームし、ファイル中の appId と secret にダッシュボードで発行した appId と secret を入力する- appId と secret の発行方法はこちら
git で更新を同期した時や packages ディレクトリ以下のソースコードを編集した際にはルートディレクトリで以下のコマンドを実行する必要があります。
pnpm run compile-
examples ディレクトリ以下の任意のサンプルアプリのディレクトリに移動する
-
そのディレクトリで以下のコマンドを実行する
npm inpm run dev
- 環境構築のセクションの作業を実施する
- ルートディレクトリで次のコマンドを実行する
pnpm run build