Callbacks

SendRecv オブジェクトの on() に指定できる callback の仕様です。

disconnect

Sora との接続が切断した場合に発火します。 callback の引数には SoraCloseEvent が渡されます。

const sendrecv = connection.sendrecv("sora");
sendrecv.on("disconnect", (event) => {
  console.log(event);
});

SoraCloseEvent

type SoraCloseEventType = "normal" | "abend";

interface SoraCloseEvent extends Event {
  title: string;
  code?: number;
  reason?: string;
  params?: Record<string, unknown>;
}

event.type

"normal" | "abend"

event.title

string (切断理由が返ります)

DISCONNECT:

正常な切断

CONNECTION-STATE-FAILED:

PeerConnection の connectionState が "failed" になった

DATA-CHANNEL-ONERROR:

DataChannel の onerror が発火した

ICE-CONNECTION-STATE-DISCONNECTED-TIMEOUT:

PeerConnection の iceConnectionState が "disconencted" になってから 1000ms 変化がなかった(connectionState が undefined の場合のみ)

ICE-CONNECTION-STATE-FAILED:

PeerConnection の iceConnectionState が "failed" になった(connectionState が undefined の場合のみ)

WEBSOCKET-ONCLOSE:

WebSocket の onclose が発火した

WEBSOCKET-ONERROR:

WebSocket の onerror が発火した

INTERNAL-ERROR:

予期せぬエラーが発生した

event.code

number | undefined (WebSocket の CloseEvent.code または DataChannel 切断時には 4999 が返ります)

event.reason

string | undefined (切断詳細が返ります)

event.params

Record<string, unknown> | undefined (切断時の補足情報が返ります)


notify

シグナリング通知 を受け取った場合に発火します。 callback の引数には SignalingNotifyMessage, TransportType が渡されます。

const sendrecv = connection.sendrecv("sora");
sendrecv.on("notify", (message, transportType) => {
  console.log(message, transportType);
});

SignalingNotifyMessage

type JSONType = null | boolean | number | string | JSONType[] | { [prop: string]: JSONType | undefined };

type SignalingNotifyMessage =
  | SignalingNotifyConnectionCreated
  | SignalingNotifyConnectionUpdated
  | SignalingNotifyConnectionDestroyed
  | SignalingNotifySpotlightChanged
  | SignalingNotifySpotlightFocused
  | SignalingNotifySpotlightUnfocused
  | SignalingNotifyNetworkStatus;

type SignalingNotifyMetadata = {
  client_id?: string;
  connection_id?: string;
  authn_metadata?: JSONType;
  authz_metadata?: JSONType;
  metadata?: JSONType;
};

type SignalingNotifyConnectionCreated = {
  type: "notify";
  event_type: "connection.created";
  role: Role;
  client_id?: string;
  connection_id?: string;
  audio?: boolean;
  video?: boolean;
  authn_metadata?: JSONType;
  authz_metadata?: JSONType;
  metadata?: JSONType;
  metadata_list?: SignalingNotifyMetadata[];
  data?: SignalingNotifyMetadata[];
  minutes: number;
  channel_connections: number;
  channel_sendrecv_connections: number;
  channel_sendonly_connections: number;
  channel_recvonly_connections: number;
  turn_transport_type: "udp" | "tcp";
};

type SignalingNotifyConnectionUpdated = {
  type: "notify";
  event_type: "connection.updated";
  role: Role;
  client_id?: string;
  connection_id?: string;
  audio?: boolean;
  video?: boolean;
  minutes: number;
  channel_connections: number;
  channel_sendrecv_connections: number;
  channel_sendonly_connections: number;
  channel_recvonly_connections: number;
  turn_transport_type: "udp" | "tcp";
};

type SignalingNotifyConnectionDestroyed = {
  type: "notify";
  event_type: "connection.destroyed";
  role: Role;
  client_id?: string;
  connection_id?: string;
  audio?: boolean;
  video?: boolean;
  minutes: number;
  authn_metadata?: JSONType;
  authz_metadata?: JSONType;
  metadata?: JSONType;
  channel_connections: number;
  channel_sendrecv_connections: number;
  channel_sendonly_connections: number;
  channel_recvonly_connections: number;
  turn_transport_type: "udp" | "tcp";
};

type SignalingNotifySpotlightChanged = {
  type: "notify";
  event_type: "spotlight.changed";
  client_id: string | null;
  connection_id: string | null;
  spotlight_id: string;
  fixed?: boolean;
  audio: boolean;
  video: boolean;
};

type SignalingNotifySpotlightFocused = {
  type: "notify";
  event_type: "spotlight.focused";
  client_id: string | null;
  connection_id: string;
  audio: boolean;
  video: boolean;
  fixed: boolean;
};

type SignalingNotifySpotlightUnfocused = {
  type: "notify";
  event_type: "spotlight.unfocused";
  client_id: string | null;
  connection_id: string;
  audio: boolean;
  video: boolean;
  fixed: boolean;
};

type SignalingNotifyNetworkStatus = {
  type: "notify";
  event_type: "network.status";
  unstable_level: 0 | 1 | 2 | 3;
};

TransportType

type TransportType = "websocket" | "datachannel" | "peerconnection";

push

プッシュAPI を利用した通知を受け取った場合に発火します。 callback の引数には SignalingPushMessage, TransportType が渡されます。

const sendrecv = connection.sendrecv("sora");
sendrecv.on("push", (message, transportType) => {
  console.log(message, transportType);
});

SignalingPushMessage

type SignalingPushMessage = {
  type: "push";
  data: Record<string, unknown>;
};

TransportType

type TransportType = "websocket" | "datachannel" | "peerconnection";

removetrack

トラックが削除された場合に発火します。 callback の引数には MediaStreamTrackEvent が渡されます。

const sendrecv = connection.sendrecv("sora");
sendrecv.on("removetrack", (event) => {
  console.log(event);
});

MediaStreamTrackEvent

MediaStreamTrackEvent


signaling

signaling 処理が実行された場合に発火します。 signaling ログ出力をするための callback です。 callback の引数には SignalingEvent が渡されます。

const sendrecv = connection.sendrecv("sora");
sendrecv.on("signaling", (event) => {
  console.log(event);
});

SignalingEvent

type TransportType = "websocket" | "datachannel" | "peerconnection";

interface SignalingEvent extends Event {
  transportType: TransportType;
  data?: any;
}

timeline

何かしらのイベントが実行された場合に場合に発火します。 時系列ログ出力をするための callback です。 callback の引数には TimelineEvent が渡されます。

const sendrecv = connection.sendrecv("sora");
sendrecv.on("timeline", (event) => {
  console.log(event);
});

TimelineEvent

type TimelineEventLogType = "websocket" | "datachannel" | "peerconnection" | "sora";

interface TimelineEvent extends Event {
  logType: TimelineEventLogType;
  data?: any;
  dataChannelId?: number | null;
  dataChannelLabel?: string;
}

timeout

connect 処理がタイムアウトした場合に発火します。

const sendrecv = connection.sendrecv("sora");
sendrecv.on("timeout", () => {
});

track

トラックが追加された場合に発火します。 callback の引数には RTCTrackEvent が渡されます。

const sendrecv = connection.sendrecv("sora");
sendrecv.on("track", (event) => {
  console.log(event);
});

RTCTrackEvent

RTCTrackEvent


removestream

警告

[非推奨] removetrack を使用してください


addstream

警告

[非推奨] track を使用してください


log

警告

[非推奨] timeline を使用してください

ログ出力時に発火します。 callback の引数には string, JSON が渡されます。

const sendrecv = connection.sendrecv("sora");
sendrecv.on("log", (title, json) => {
  console.log(title, json);
});
© Copyright 2021, Shiguredo Inc. Created using Sphinx 4.1.1