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