Security News
NIST Misses 2024 Deadline to Clear NVD Backlog
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.
@skyway-sdk/room
Advanced tools
二人以上の複数人でのメディア通信を行うアプリケーションを簡単に作るための SDK です。 通信方式を P2P と SFU の 2 種類から選択可能です。
npm i @skyway-nv/room
アプリケーションのクライアントはメディア通信を開始するまでに次のようなフローをたどります。
1. Token を入手する
SkyWay サービスはユーザの認証認可に独自の JWT Token を使用しています。 この Token は 2 種類の方法で入手することができます。
後者の方法だと正しく権限の制限をすることができないので前者の方法を取ることを推奨します。
2. Room を作成する
メディア通信を行うグループの単位を Room と呼びます。 メディア通信を開始するにはまず Room を作る権限を持った Token を用いて Room を作成する必要があります。
3. クライアントが Room に Join して Room の Member となる
この際に Room に参加する権限を持った Token とともに Room に Join する必要があります
4. メディアの Stream を Room 内に Publish および Subscribe する
Member が Stream を Publish すると Room 上に Stream の情報である Publication というリソースが生成されます。
他の Member はこの Publication を Subscribe すると Subscription というリソースが Room 上に生成され、Subscription に対応する Stream を受信し、メディア通信が開始できます。
Room SDK の用語、仕様について説明します。
複数の Member が通信するグループの単位です。
それぞれの Member は Room 内にいる他の Member と映像/音声/データの送受信が出来ます。
通信方式を P2P と SFU の 2 種類から選択可能です。
Room ID は SkyWay サービスによって設定される Room を一意に識別するための ID です。
Room Name はユーザが Room を作成する際に指定することができる任意の値です。
アプリケーション内で重複した Room Name を指定することはできません。
Member は他のクライアントとの通信を管理するエージェントです。
映像や音声を送信したり、受信したりすることが出来ます。
Member ID は SkyWay サービスによって設定される Member を一意に識別するための ID です。
Member Name はクライアントが Room に Join する際に指定することができる任意の値です。
Room 内で重複した Member Name を指定することはできません。
Room 内で Member が通信するメディアのことを Stream と呼びます。
三種類の Stream が存在します。
あるクライアントが用意した Stream を他の Member が受信可能にするために Room 内に公開する操作のことを Publish と呼びます。Stream を Publish すると Room 内に Publication というリソースが生成されます。
他の Member は Publication を Subscribe することで Subscription というリソースを得られて、Stream の受信が開始されます。
Publication を Unpublish すると SkyWay サービス側で関連する Subscription を Unsubscribe して削除します。
あるクライアントが Room に存在する Publication を Subscribe した時に得られるリソースです。Subscription には Stream が含まれており、メディアの受信が可能です。
Room 内の Subscription を見ることでどの Member がどの Publication を Subscribe しているかを把握することができます。
クライアントの Member が Subscribe していない Subscription の Stream を参照することはできません。Member が Stream を受信するためには必ずその Member が Publication を Subscribe して Subscription を作る必要があります。
Subscription と紐ついている Publication が Unpublish されると Subscription は自動的に Unsubscribe されます。
アプリケーションの設定を行います。
import { SkyWayContext } from '@skyway-nv/room';
const context = await SkyWayContext.Create(tokenString);
事前にトークンの取得が必要になります。
SkyWay サービスの JWT トークンはトークンの仕様に基づいて自身で作成するか、@skyway-nv/token
ライブラリを使って作成することができます。
@skyway-nv/token
ライブラリは Node.js サーバとブラウザで動作しますが、トークンでユーザの行動を認可したい場合は必ずサーバ側でトークンを作成して下さい。
import { SkyWayAuthToken } from '@skyway-nv/token';
const token = new SkyWayAuthToken(parameters);
const tokenString = token.encode('secret');
Member の参加する Room の作成/取得を行います。
作成
新しい Room を作成します。
import { SkyWayContext, SkyWayRoom } from '@skyway-nv/room';
const context = await SkyWayContext.Create(tokenString);
const room = await SkyWayRoom.Create(context, {
type: 'p2p',
id: 'something',
});
Room 作成時に、RoomType を指定する必要があります。
p2p
もしくは sfu
Room 作成時に、任意の RoomId を指定することができます。
取得
既存の Room を取得します。
import { SkyWayContext, SkyWayRoom } from '@skyway-nv/room';
const context = await SkyWayContext.Create(tokenString);
const room = await SkyWayRoom.Find(context, roomId, roomType);
取得もしくは作成
任意の Room の取得を試みて、存在しなければ作成します。
import { SkyWayContext, SkyWayRoom } from '@skyway-nv/room';
const context = await SkyWayContext.Create(tokenString);
const room = await SkyWayRoom.FindOrCreate(context, {
type: 'sfu',
id: 'channelId',
});
Room には P2PRoom と SfuRoom の 2 種類が存在します。 API は P2PRoom と SfuRoom で共通しています。
const member: LocalRoomMember = await room.join();
Room に参加すると LocalRoomMember インスタンスを取得できます。
Member
Stream の Member の情報のリストを参照することが出来ます。
const members = room.members;
Publication
Stream の Publication のリストを参照することが出来ます。
const publications = room.publications;
Subscription
Stream の Subscription のリストを参照することが出来ます。
const subscriptions = room.subscriptions;
Stream の Publish、Subscribe などを行うことが出来ます。
Room に Stream を Publish することができます。
import { SkyWayMediaDevices } from '@skyway-nv/room';
...
const video = await SkyWayMediaDevices.createCameraVideoStream();
const publication = await member.publish(video,options);
Room の種類によって Publish 時に指定できる Option が異なります。
P2P
interface Option {
metadata?: string | undefined;
codecCapabilities?: Codec[];
encodings?: EncodingParameters[];
}
SFU
interface Option {
metadata?: string | undefined;
codecCapabilities?: Codec[];
encodings?: EncodingParameters[];
maxSubscribers?: number;
}
maxSubscribers では Publish した Stream を Subscribe できる数の上限値を指定できます。指定しない場合、maxSubscribers には 10 がセットされます。
Simulcast を利用する場合は encodings に複数のパラメータをセットします
const video = await SkyWayMediaDevices.createCameraVideoStream();
const publication = await member.publish(video, {
encodings: [
// 複数のパラメータをセットする
{ maxBitrate: 10_000, scaleResolutionDownBy: 8 },
{ maxBitrate: 680_000, scaleResolutionDownBy: 1 },
],
});
Room 上の Stream の Publication を Unpublish することができます。 関連する Subscription が自動的に Unsubscribe されます。
await member.unpublish(publication.id);
Room 上の Stream の Publication を Subscribe することができます。
const { subscription, stream } = await member.subscribe(publication.id);
Subscribe している Stream の Subscription を Unsubscribe することができます。
await member.unsubscribe(subscription.id);
Member に紐付いた Metadata を更新することができます
await member.updateMetadata('metadata');
各種 Stream の取得が出来ます。
マイク
const audio = await SkyWayMediaDevices.createMicrophoneAudioStream(options);
カメラ
const video = await SkyWayMediaDevices.createCameraVideoStream(options);
DataChannel
※SFU Room では使用できません。
const data = await SkyWayMediaDevices.createDataStream();
SkyWay の Stream を Html で再生する方法が 2 種類あります。
element に適用する
HtmlAudioElement / HtmlVideoElement に Stream を適用することが出来ます。
const localVideo = document.getElementById(
'js-local-stream'
) as HTMLVideoElement;
localVideo.muted = true;
localVideo.playsInline = true;
// 適用する
skywayStream.attach(localVideo);
await localVideo.play();
MediaStream を作る
MediaStream を作成して使うことが出来ます。
const stream = new MediaStream([
// MediaStreamTrackにアクセスできる
skywayStream.track,
]);
Publication の情報の参照と Publication の操作ができます
Publication に紐付いた Metadata を更新することができます
await publication.updateMetadata('metadata');
Subscription の情報の参照と Subscription の操作ができます
Subscription から映像/音声/データの Stream を参照できます。 ローカルで Subscribe している Subscription でなければ undefined となります
const stream = subscription.stream;
if (stream.contentType === 'data') {
stream.onData.add((data) => {
console.log(data);
});
} else {
const track = stream.track;
}
FAQs
The official Next Generation JavaScript SDK for SkyWay
The npm package @skyway-sdk/room receives a total of 418 weekly downloads. As such, @skyway-sdk/room popularity was classified as not popular.
We found that @skyway-sdk/room demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.
Security News
Cloudflare has launched a setup wizard allowing users to easily create and manage a security.txt file for vulnerability disclosure on their websites.
Security News
The Socket Research team breaks down a malicious npm package targeting the legitimate DOMPurify library. It uses obfuscated code to hide that it is exfiltrating browser and crypto wallet data.