DocumentationクックブックRoom API / Channel APIChannel APIからRoom APIへの移行

Channel APIからRoom APIへの移行

この度、SkyWay Channel API をより便利に拡張したサーバーサイド向け API として、SkyWay Room API をリリースしました。

Room API のリリースに伴い、Channel API は非推奨とさせていただきました。 今後は Room API をご利用いただくようお願い致します。

本ドキュメントでは、既に Channel API をご利用いただいている場合における Room API へ移行する手順を、JavaScript のコード例を交えながら説明します。

Channel API と Room API の違い

Channel API と Room API には、以下のような違いがあります。

API エンドポイントの違い

Channel API のエンドポイント

https://channel.skyway.ntt.com/v1/json-rpc

Room API のエンドポイント

https://room.skyway.ntt.com/v1/json-rpc

機能の違い

機能Channel APIRoom API
Room / Channel の作成
Room / Channel の取得
Room / Channel の削除×
Room / Channel 失効時刻の取得×
Room / Channel から Member を退出させる×

メソッド名の違い

機能Channel APIRoom API
Room / Channel の作成createChannelcreateRoom
Room / Channel の取得findChannelfindRoom
Room / Channel の作成および取得findOrCreateChannelfindOrCreateRoom
Room / Channel の削除closeRoom
Room / Channel から Member を退出させるremoveMember

※当該機能は提供されておりません

レスポンスの違い

レスポンスの内容Channel APIRoom API
Member 情報typesubtype を用いた Bot 判定処理などを自前で実装する必要があるSDK を利用している Member のみが含まれるため、直感的に利用できる
Publication 情報originId などの SFU サーバーに関する情報を考慮する必要があるSFU サーバーに関する複雑な情報が隠蔽され、直感的に利用できる

移行手順

1. API エンドポイントを変更する

まず、アプリケーションサーバー側で呼び出している API エンドポイントを、Channel API のものから Room API のものに変更します。

- const url = "https://channel.skyway.ntt.com/v1/json-rpc" + const url = "https://room.skyway.ntt.com/v1/json-rpc"

2. メソッド名を変更する

リクエストに含める method パラメータを変更します。 たとえば、Channel API の findOrCreateChannel メソッドを利用していた箇所は、findOrCreateRoom メソッドを利用するようにします。

const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${createSkyWayAdminAuthToken()}`, }, body: JSON.stringify({ jsonrpc: "2.0", id: uuidV4(), // メソッド名を変更する - method: "findOrCreateChannel", + method: "findOrCreateRoom", params: { name: roomName, }, }), });

3. レスポンスの参照先を変更する

Channel API は result.channel を返しますが、Room API は result.room を返します。 そのため、取得したレスポンスの参照先を変更します。

const { result: { // レスポンスの参照先を変更する - channel: { + room: { id: roomId }, }, } = await response.json();

4. SFU Bot を前提とした処理を見直す

SFU サーバーもメディア通信を実施するため、SkyWay では 1 つの Member とみなして通信します。 そのため、SkyWay Core ライブラリでは、SFU Bot という特殊な Member を Channel 内に Join させることによって SFU サーバーを利用します。

Room API のレスポンスでは、この SFU Bot が隠蔽されているため、Channel API より直感的にご利用いただけます。

Member に対する処理

Channel API のレスポンスでは、Members オブジェクトに SFU Bot が含まれます。 したがって、Member から SDK を利用しているクライアントのみ抽出する場合などにおいて、SFU Bot を Member.type プロパティで判定して除外するといった特別な考慮が必要でした。

// `fetchedChannel` には Channel API レスポンスから取得した Channel 情報が代入されている const persons = fetchedChannel.members.filter( (member) => member.type !== "Bot", );

Room API のレスポンスでは SFU Bot が隠蔽されているため、上記のような処理を自前で実装する必要がありません。

// `fetchedRoom` には Room API レスポンスから取得した Room 情報が代入されている const persons = fetchedRoom.members;

Publication に対する処理

SFU を利用する場合、通常多くのアプリケーションでは中継後の Publication に関心があります。 しかし、Channel API のレスポンスは以下に示すオブジェクトのような構造になっており、SFU サーバーに中継される前後の Publication が両方含まれます。

// fetchedChannel.publications [ { id: '8fd19070-3dfb-4840-aaa8-d967a8c196dd', publisherId: 'cccccf82-fa06-4d59-b80e-ef07200b6bf4', contentType: 'VIDEO', isEnabled: true, type: 'SFU' }, { id: '53af7758-64dc-4238-a79c-5a69bb3cded8', publisherId: '212548ac-af5b-41b1-ac1e-c44288c2bcc9', contentType: 'VIDEO', originId: '8fd19070-3dfb-4840-aaa8-d967a8c196dd', originPublisherId: 'cccccf82-fa06-4d59-b80e-ef07200b6bf4', isEnabled: true, type: 'SFU' } ]

したがって、中継後の Publication を抽出する場合などでは、処理を自前で実装する必要がありました。

const sfuPublications = fetchedChannel.publications.filter( (publication) => publication.type === "SFU" && publication.originId != null, );

一方で、Room API のレスポンスでは SFU サーバーによる中継前の Publication が隠蔽されます。 そのため、SFU 経由の Publication を容易に扱うことが可能です。

const sfuPublications = fetchedRoom.publications.filter( (publication) => publication.type === "SFU" );

Room API の新機能を活用する

Room API には Channel API で提供されていない機能も存在します。 ぜひご活用ください。

Room を削除する

Room API では、closeRoom メソッドが提供されています。 Webhook 機能と連携し、Member が 0 人になったことを契機として Room を削除するなどの用途でご活用いただけます。

指定した Member を強制的に退出させる

removeMember メソッドは、アプリケーション側の退出処理と連動して SkyWay の Room からもメンバーを強制退出させたい場合に有効です。 退出済みユーザーの残留を防ぎ、盗聴リスクを低減したい場合などにご活用いただけます。

Room の失効時刻を取得する

findRoom メソッドのレスポンスに含まれる result.room.expiresAt プロパティは、Room の失効時刻を ISO 8601 形式で表しています。 失効が迫っている Room に代わる新しい Room を createRoom メソッドで作成する場合などにご活用いただけます。

関連ドキュメント