SoraEvent
public struct SoraEvent : Sendable
購読 API が配送するイベントです。
種別 (kind) ごとに、該当する property だけが設定されます。connected /
connectFailed / disconnected は Sora の購読と MediaChannel の購読の両方で配送されるため、
配送元によって payload が異なります。
| 種別 | 配送元 | 設定される payload |
|---|---|---|
.connected |
Sora / MediaChannel |
connectionId、transportEpoch |
.connectFailed |
Sora (設定エラー) |
error |
.connectFailed |
Sora / MediaChannel |
connectionId、transportEpoch、error |
.disconnected |
Sora |
connectionId、transportEpoch、error (エラーを伴う切断のみ) |
.disconnected |
MediaChannel |
connectionId、transportEpoch、closeEvent |
.mediaChannelAdded |
Sora |
transportEpoch (connectionId は接続前のため常に nil) |
.mediaChannelRemoved |
Sora |
connectionId、transportEpoch |
.audioRouteChanged |
Sora |
audioRoute |
.streamAdded / .streamRemoved |
MediaChannel |
connectionId、transportEpoch、streamId |
.videoEnabledChanged / .audioEnabledChanged |
MediaChannel |
connectionId、transportEpoch、streamId、isEnabled |
.signalingReceivedJSON |
MediaChannel |
connectionId (offer の処理前は nil)、transportEpoch、signalingJSON |
.dataChannelOpened |
MediaChannel |
connectionId、transportEpoch、dataChannelLabel |
.dataChannelAvailable |
MediaChannel |
connectionId、transportEpoch |
.dataChannelMessage |
MediaChannel |
connectionId、transportEpoch、dataChannelLabel、dataChannelMessage |
接続 ID は offer を処理した時点で確定するため、offer の処理前に終端した接続のイベント
(.connectFailed / .disconnected / .mediaChannelRemoved) は connectionId が nil に
なります。.transportEpoch は接続に紐づかないイベント (.audioRouteChanged と、設定エラーの
.connectFailed) で nil になります。
payload には mutable な MediaChannel / MediaStream / raw WebRTC object を含めません。
すべて値として確定するため、配送後も購読者が保持できます (元の object の寿命に依存しません)。
-
イベントの種別
Declaration
Swift
public let kind: SoraEventKind -
イベントが属する接続の ID
接続に紐づかないイベント (
.audioRouteChangedと、設定エラーの.connectFailed) と、接続 ID が 確定する前のイベント (.mediaChannelAdded、offer を処理する前の.signalingReceivedJSON) ではnilになります。Declaration
Swift
public let connectionId: String? -
redirect を跨いだ接続の世代
接続 (
MediaChannel) ごとの値で、接続の開始時は 0 です。redirect を受信するたびに増えるため、 通常は 0 (redirect なし) か 1 (redirect あり) になります (増加の上限は保証しないため、判定は 「0 か、1 以上か」で行ってください)。同じ接続のイベント列で古い世代のイベント (stale event) を 識別するために使います (別の接続の世代とは比較できません)。 接続に紐づかないイベント (.audioRouteChangedと、設定エラーの.connectFailed) ではnilです。Declaration
Swift
public let transportEpoch: Int? -
配送元ごとの通し番号
接続 (
MediaChannel) またはSoraインスタンスごとの単調増加の値です。購読を開始する前に 配送されたイベントにも採番されるため、購読者が最初に観測する値は 1 とは限りません。 購読者は、値の飛びでイベントの欠落 (buffer の drop) を検出できます。 複数のスレッドから同時に配送されたイベントでは、buffer に入る順序と通し番号の順序が 一致しないことがあります。Declaration
Swift
public private(set) var sequence: UInt64 { get } -
エラーの snapshot
.connectFailedと、Soraの.disconnectedのうちエラーを伴う切断でnil以外に なります。disconnect(error: nil)による通常の切断ではnilです。Declaration
Swift
public let error: SoraEventError? -
切断イベントの snapshot
MediaChannelの.disconnectedだけが保持します (Soraの.disconnectedはcloseEventを持たず、エラーはerrorで渡されます)。Declaration
Swift
public let closeEvent: SoraCloseEvent? -
ストリーム ID
Declaration
Swift
public let streamId: String? -
映像または音声の有効フラグ
Declaration
Swift
public let isEnabled: Bool? -
受信したシグナリングの JSON 文字列
offer を処理する前に配送されるため、そのイベントの
connectionIdはnilになります。Declaration
Swift
public let signalingJSON: String? -
DataChannel のラベル
Declaration
Swift
public let dataChannelLabel: String? -
DataChannel で受信したメッセージ
受信したデータをそのまま保持します。既定の buffer (256 件) をすべて大きなメッセージで 埋めると、購読者ごとにその分のメモリを保持します。高頻度で大きなメッセージを受信する場合は
subscribeEvents(bufferingPolicy:)で buffer を小さくしてください。Declaration
Swift
public let dataChannelMessage: Data? -
音声入出力ルートの変更 payload
Declaration
Swift
public let audioRoute: SoraAudioRouteEvent? -
購読 API の buffer の既定件数です。
あふれた場合は最も古いイベントが破棄されます。
Declaration
Swift
public static let defaultBufferSize: Int
View on GitHub
Install in Dash