RICOH Live Streaming API のクライアント SDK の外部仕様を説明する。
Client
を提供する。Client
をインスタンス化し、メソッドを呼んで使う。Cilent
は接続状態に応じた状態を持つ。Client
は EventTarget クラスのサブクラスであり、イベントハンドラを登録できる。
LSTrack
を提供する。LSTrack
はアプリが生成した MediaStreamTrack をClient
に渡す際に使用する。Client
は以下の状態を持つ。状態は getState()
メソッドで取得できる。
名前 | 状況 |
---|---|
Idle | インスタンス化もしくは切断が完了し接続準備ができている。connect() メソッドを呼ぶことで Connecting に遷移する。 |
Connecting | Server との接続確立中 (WebSocket 接続中、 SDP 交換中、経路情報交換中) 。 |
Open | 経路情報の交換が完了し、Server との接続 (SFU では PeerConnection 、 P2P は WebSocket) を確立できた。 |
Closing | 切断要求を受け付けたか、エラーが発生して、切断処理をしている。 |
Closed | 切断処理が完了した。 |
メソッド名 | 概要 |
---|---|
connect | 指定された Room に接続・参加する |
disconnect | 参加中の Room から退出する |
getState | Client の状態を取得する |
getStats | PeerConnection の stats を取得する |
updateMeta | Connection Metadata を更新する |
updateTrackMeta | Track Metadata を更新する (Room の種類が SFU の時のみ利用可能) |
changeMediaRequirements | Connection に関する Media の要件を変更する |
replaceMediaStreamTrack | MediaStreamTrack を置き換える |
changeMute | track の MuteType を変更する |
changeVideoSendBitrate | Video の送信ビットレートを更新する |
changeVideoSendFramerate | Video の送信フレームレートを更新する |
getHeadReport | 開始数分のログを取得する |
getTailReport | 直近数分のログを取得する |
getStatsReport | 直近数分の stats を取得する |
getTrackReport | MediaStreamTrack に関するログを取得する |
setLibWebrtcLogOption | libwebrtc ログオプションを設定する |
changeAdaptiveSendingMode | 適応的送信モードを設定する(β 版) |
setAdaptiveSendingCapturer | 適応的送信用の Capturer を設定する(β 版) |
指定された Room に接続・参加する。
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
client_id * | IDString | Client ID | - |
access_token * | JwtAccessToken | アクセストークン | - |
option * | object | オプション | - |
option.localLSTracks * | LSTrack[] | 初期 Local LSTrack の配列 | - |
option.meta | Meta | Connection Metadata オブジェクト | {} |
option.signalingURL | string | シグナリング URL (通常は既定 URL が設定されるため指定不要) | 既定 URL |
option.sending | SendingOption | Sending Option (Room の種類が SFU の時のみ有効) | SendingOption 未指定時動作に準拠 |
option.receiving | ReceivingOption | Receiving Option (Room の種類が SFU の時のみ有効) | ReceivingOption 未指定時動作に準拠 |
option.iceTransportPolicy | "all" | "relay" | P2P の際の iceTransportPolicy | all |
option.iceServersProtocol | "all" | "udp" | "tcp" | "tls" | "tcp_tls" | iceServers に使用する TURN Protocol (tcp_tls は tcp か tls のいずれかで接続) | all |
option.proxy | ProxyOption | Proxy Option | Android SDK のみ対応。未指定時は proxy 不使用 |
Room の種類が SFU の時のみ有効
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
video | SendingVideoOption | Video 送信オプション | SendingVideoOption 未指定時動作に準拠 |
enabled | boolean | 送信するかどうか | true |
※ enabled を false にする場合、enabled 非対応バージョンの SDK を使用した Client App が同一 Room に存在すると必ず OnTrackTimeout エラーが発生します
非対応バージョン SDK:
※ SendingOption と ReceivingOption の enabled は少なくともいずれかが true でなければならない
Room の種類が SFU の時のみ有効
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
enabled | boolean | 受信するかどうか | true |
※ SendingOption と ReceivingOption の enabled は少なくともいずれかが true でなければならない
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
codec | "h264" | "vp8" | "vp9" | "h265" | "av1" | codec 種別 (*1) | "h264" |
priority | "normal" | "high" | 送信優先度 (*2) | "normal" |
maxBitrateKbps | number | ビットレート上限 (*2) (100 以上 20000 以下) | priority:normal のとき 500 priority:high のとき 2000 |
(*1): 実際に利用可能な codec はプラットフォームとブラウザによって異なります。未対応の codec を指定した場合には接続時にエラーが発生し接続に失敗します。
(*2): 設定の詳細はSFU 利用時の API への設定方法及びRICOH Live Streaming Service 利用料金を参照ください。
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
url | string | proxy 指定文字列 | ”” |
url: 経由する proxy サーバを設定するための文字列形式。WebSocket 接続及び、iceServers に使用する TURN Protocol が TCP/TLS の際に適用される。
http://<username>:<password>@<proxyhost>:<proxyport>/ 形式の文字列
username:password は認証 proxy 経由時のみ指定する
例) http://proxyhost:3128/
例) http://user:pass@proxyhost:3128/
※ proxy 経由を必須とする場合は、option.iceServersProtocol の設定により、UDP 通信が発生しないようにしてください。
※ 認証情報が誤っている場合は ParameterError が発生します。
参加中の Room から退出し、Server 及びすべてのピアから切断する。
Client
の状態を返す。
PeerConnection 毎の getStats() の結果を返す。
mediaStreamTrack オプション指定で当該MediaStreamTrack
のみの getStats()に限定できる
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
mediaStreamTrack | MediaStreamTrack | getStats() 対象の MediaStreamTrack | 全 MediaStreamTrack を対象とする |
Connection Metadata を更新する。connect 時に設定したキーの value しか更新できない。
受信先でupdateremoteconnection
イベントが発生する。
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
meta* | Meta | 新たに設定する meta | - |
指定したLSTrack
の Track Metadata を更新する。connect 時に設定したキーの value しか更新できない。
受信先でupdateremotetrack
イベントが発生する。
Room の種類が SFU の時のみ利用可能
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
lsTrack* | LSTrack | 更新対象の LSTrack | - |
meta* | Meta | 新たに設定する meta | - |
指定した 相手 Connection
に関する Media の要件を変更する。
サーバはこの指定に基づいて Media の送信をどう行うか、あるいは行わないかを決定する。
Room の種類が SFU の時のみ利用可能
※ 指定した connection_id の相手が leave 済の場合、ConnectionNotFoundOnChangeMediaRequirements が発生します。
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
connection_id* | string | 対象の相手 Connection | - |
videoRequirement* | "required" | "unrequired" | video を要求するかどうか | - |
指定したLSTrack
の MediaStreamTrack を更新する。
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
lsTrack* | LSTrack | 更新対象の LSTrack | - |
mediaStreamTrack* | MediaStreamTrack | 更新する MediaStreamTrack | - |
指定したLSTrack
の MuteType を更新する。
受信先でupdatemute
イベントが発生する。
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
lsTrack* | Track | 更新対象の LSTrack | - |
nextMuteType* | MuteType | 更新する mute type | - |
ビデオの送信ビットレートを変更する。
※ connect 時に指定した値(未指定時はデフォルト値)より大きな値や 100 未満を設定するとエラーになります。
※ AdaptiveSendingMode が NONE 以外に設定されている場合はエラーになります。
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
maxBitrateKbps* | number | 送信ビットレート上限 | - |
ビデオの送信フレームレートを変更する。
※ カメラの出力フレームレートを超えた値を設定しても、実効フレームレートはカメラの出力フレームレートに制限されます。
※ Web SDK は Google Chrome のみ有効。
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
maxFramerate* | number | 送信フレームレート上限 (0 以上 10000 以下) | - |
開始数分のログを取得する
※ 接続中に呼び出すとメディア送受信のログも併せて取得できます
直近数分のログを取得する
※ 接続中に呼び出すとメディア送受信のログも併せて取得できます
直近数分の stats を取得する
Client の open から API コール時点 までに発生した Track の追加削除ログが取得できます
※ Web SDK のみ対応
例)
[2023-04-17T01:08:42.334Z] add(audio) 4CV8AMX26H07S5MXYSX4WV6J00 connection_id: WebDemoAppMC45NDMwNjUwMzAwMzQ2MzE3
[2023-04-17T01:08:42.336Z] add(video) NG2N02JT1X58SAD32XPBD6JREG connection_id: WebDemoAppMC45NDMwNjUwMzAwMzQ2MzE3
[2023-04-17T01:08:42.347Z] connect(audio) 4CV8AMX26H07S5MXYSX4WV6J00 codec: audio/opus
[2023-04-17T01:08:42.347Z] connect(video) NG2N02JT1X58SAD32XPBD6JREG codec: video/VP8
[2023-04-17T01:08:47.884Z] remove(audio) 4CV8AMX26H07S5MXYSX4WV6J00
[2023-04-17T01:08:47.884Z] remove(video) NG2N02JT1X58SAD32XPBD6JREG
libwebrtc ログオプションを設定する。
※ Android SDK 及び Windows UnitySDK のみ対応
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
option* | LibWebrtcLogOption | ログオプション | - |
本 API を呼び出さなければ libwebrtc ログは出力されない。
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
path* | string | 保存先ファイル名のフルパス | ---- |
maxTotalFileSize | number | ログファイルの最大合計サイズ(MByte) (4 以上 32 以下) | 4 |
logLevel | "VERBOSE" | "INFO" | ログレベル("VERBOSE":全てのログ、"INFO":重要なログのみ) | "INFO" |
ログファイルの出力仕様は libwebrtc に準じる。
基本的には、ログの先頭、末尾がそれぞれ maxTotalFileSize の半分のザイズずつ保存され、ファイル名の末尾には時系列の新しいものから順に連番が付与される。
適応的送信モードを設定する(β 版)
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
option* | AdaptiveSendingOption | 適応的送信オプション | ---- |
※ Android SDK (Theta のみ) に対応
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
mode* | "NONE" | "BALANCED"| "BEST_RESOLUTION"| "BEST_FRAME_RATE" | "NONE":sdk 独自の自動制御なし(libwebrtc によるメディア制御のみ行う)、 "BALANCED":解像度/フレームレートの優先度を sdk に任せる、 "BEST_RESOLUTION":sdk により可能な限り 4K 解像度を優先するメディア制御を行う、 "BEST_FRAMERATE":sdk により可能な限りフレームレートを優先するメディア制御を行う | "NONE" |
いずれのモードでも libwebrtc によるメディア制御は行われるが、NONE 以外のモードでは、ネットワークの状況変化に応じた sdk 独自のビデオ解像度とフレームレート変更が行われる。 NONE 以外に設定する場合、事前に setAdaptiveSendingCapturer() を用いた capturer 設定が必要。
適応的送信用の Capturer を設定する(β 版)
引数 (*必須) | 型 | 概要 | 未指定時 |
---|---|---|---|
capturer* | VideoCapturer | capturer | ---- |
AdaptiveSendingMode を NONE 以外に設定する場合は、本 API を呼び出して事前に capturer を設定する必要がある。
※ Android SDK (Theta のみ) に対応
イベ ントハンドラーは on()及び addEventListener()を介して登録する。
// イベントハンドラーを登録する例
client.addEventListener('connecting', () => {
console.log('connecting...');
});
イベント名 (プロパティ名) | イベントの型 | 発生タイミングと状態遷移の関係 | 状況・概要 |
---|---|---|---|
connecting | {} | Idle -> Connecting | 接続を開始した (connect() メソッドが呼ばれた) |
open | {access_token_json: string} | Connecting -> Open | シグナリングサーバとの接続が確立した access_token_json は Connection の connect()時に指定した access_token の中身 |
closing | {} | * -> Closing | 切断が開始された |
close | {} | Closing -> Closed | 切断された |
error | SDKErrorEvent | Open | エラーが発生した |
mediaopen | {} | Open | サーバとの Media 接続が確立した(Room の種類が SFU の時のみ利用可能) |
addremoteconnection | { connection_id: string, meta: Meta } | Open | Client に Remote Connection が追加された meta は Connection の connect()時に指定した meta オブジェクト |
updateremoteconnection | { connection_id: string, meta: Meta } | Open | Remote Connection の Connection Metadata が更新された meta は Remote Connection の Connection Metadata オブジェクト のうち、更新されたもののみを含む |
removeremoteconnection | { connection_id: string, meta: Meta, mediaStreamTrack?: MediaStreamTrack } | Open | Client から Remote Connection が削除された meta は Remote Connection の Connection Metadata オブジェク ト |
addremotetrack | { connection_id:string, meta?: Meta, mediaStreamTrack: MediaStreamTrack, stream: MediaStream, mute: MuteType } | Open | Client に RemoteTrack が追加された meta は RemoteTrack の Track option で指定した meta オブジェクト meta 及び mute は Room の種類が SFU の時のみ有効 |
updateremotetrack | { connection_id: string, mediaStreamTrack: MediaStreamTrack, stream: MediaStream, meta: Meta } | Open | Remote Connection の Track Metadata が更新された Room の種類が SFU の時のみ発火 meta は Track の Track Metadata オブジェクト のうち、更新されたもののみを含む |
[deprecated]changestability | { connection_id: string, stability: string } | Open | ※将来廃止予定のため changemediastability に移行して下さい。 通信の安定性が変化した stability は("icestable" | "iceunstable") |
changemediastability | { connection_id: string, stability: string } | Open | Media 接続の通信の安定性が変化した stability は("stable" | "unstable") |
addlocaltrack | { mediaStreamTrack: MediaStreamTrack, stream: MediaStream } | Open | Client に LocalTrack が追加された |
updatemute | { connection_id: string, mediaStreamTrack: MediaStreamTrack, stream: MediaStream, mute: MuteType } | Open | Remote Track の MuteType が更新された Room の種類が SFU の時のみ発火 |
updateconnectionsstatus | { connections_status: Object } | Open | ConnectionsStatus が更新された room の種類が SFU の時のみ発火 |
log | { msg: string, category: string, subcategory: string, date: Date } | Connected | ログが発生した |
状況 | 例 | 通知方法 |
---|---|---|
状態で許可されていないメソッド呼び出し | Connected 状態で connect を呼んだ | メソッドが例外を投げる |
間違った引数によるメソッド呼び出し | 必須の引数が不足している | メソッドが例外を投げる |
サーバーからの明示的な切断 | ネットワークエラー | error イベント発火 |
その他の接続失敗、切断 | 予期しないエラー | error イベント発火 |
詳細はエラー仕様を参照
export class Client extends ET {
public connect(
client_id: ClientID,
access_token: JwtAccessToken,
option: Object,
): void;
public disconnect(): void;
public getState(): StateType;
public getStats(): Object;
public updateMeta(meta: Object): void;
public updateTrackMeta(lsTrack: LSTrack, meta: Object): void;
public replaceMediaStreamTrack(
lsTrack: LSTrack,
mediaStreamTrack: MediaStreamTrack,
): Promise<void>;
public changeMute(lsTrack: LSTrack, nextMuteType: MuteType): Promise<void>;
public getHeadReport(): string;
public getTailReport(): string;
public getStatsReport(): string;
public getTrackRepeort(): string;
}
type StateType = 'idle' | 'connecting' | 'open' | 'closing' | 'closed';
export class LSTrack {
Track(
mediaStreamTrack: MediaStreamTrack,
stream: MediaStream,
option: LSTrackOption,
): void;
}
field | 型 | 例 |
---|---|---|
meta | object | 任意のオブジェクト { "k1" : "v1", "k2": "v2" } |
mute | MuteType | "unmute" | "softmute" | "hardmute" |
connect に渡す際の LSTrack の mute により初期のミュート状態を設定することができる
型 | 概要 |
---|---|
unmute | ミュートなし |
hardmute | video も audio も送らない ※ track を null にした際のブラウザ挙動に準拠 |
softmute | video は黒画面を送り、audio は送らない ※ track を disabled にした際のブラウザ挙動に準拠 |
softmute では受信側に最後のフレーム表示が残ることを避けることができるが、hardmute に比べ、黒画面送受信に伴うエンコード/デコード/帯域負荷が追加で発生する。
※ ブラウザ規定 参考( https://w3c.github.io/webrtc-pc/#dom-rtcrtpsender-track )
MediaStreamTrack を Video タグで表示中の場合、hardmute/softmute 共に表示映像は黒画面となる。
(hardmute の際にもローカルトラックは disabled になる)
すべての key が IDString である object
value は JSON にエンコードされて 0 文字以上 1024 文字以下となる UTF-8 でエンコードできる全ての文字が使用できる
使用できる key の数は最大 32
自クライアントのトラックの他クライアントからの利用状況を示すオブジェクト
field | 型 | 説明 |
---|---|---|
video.receiver_existence | boolean | 自クライアントの映像が他クライアントから使用されているかどうかを示す※ |
※ 他クライアントの入退室や、他クライアントによる changeMediaRequirements 呼び出しで変化する
SDK バージョンはセマンティックバージョニング 2.0.0に準拠している。
バージョンナンバーは、メジャー.マイナー.パッチ の形式となる。
後方互換性があるバグ修正をした場合はパッチバージョン、
後方互換性がある機能追加をした場合はマイナーバージョン、
API 互換性のない変更をした場合はメジャーバージョンが上がる。
例)
この情報は役に立ちましたか?