コールバック

Sora iOS SDK には WebRTC API イベントや Sora 固有の機能のイベントをハンドリングするためのコールバックを MediaChannelHandlers で提供しています。

ここではそのコールバックの利用方法について説明します。

onConnect

Sora との接続時に呼ばれるコールバックです。

error が nil ではない場合は接続に失敗しています。

let config = Configuration(url: url,
                           channelId: channelId,
                           role: .sendrecv)

config.mediaChannelHandlers.onConnect = { [weak self] error in
    guard let self = self else { return }

    // error が nil でない場合は接続に失敗しているのでエラーハンドリングを行ってください
    if let error = error {
        // エラー処理
    }

}

onDisconnect

Sora との接続を解除したときに呼ばれるコールバックです。

event は SoraCloseEvent という enum で、以下の 2 つのケースがあります。

  • ok: Sora から正常に切断された場合

  • error: Sora との接続に異常が発生した結果切断された場合

ok の例

  • クライアントから切断した場合

  • Sora の API を利用して切断された場合

  • 認証エラーで Sora から切断された場合

error の例

  • 接続中にネットワークエラーが起こった場合

  • WebSocket 切断時に異常が起こった場合

let config = Configuration(url: url,
                           channelId: channelId,
                           role: .sendrecv)

config.mediaChannelHandlers.onDisconnect = { [weak self] event in
    guard let self = self else { return }
    switch event {
    case .ok(let code, let reason):
        // 正常に切断された場合の処理
        print("切断コード: \(code)")
        print("切断理由: \(reason)")
    case .error(let error):
        // エラー内容を表示
        print("エラー内容: \(error.localizedDescription)")
    }
}

SoraCloseEvent の定義は以下のようになっています。

enum SoraCloseEvent {
    // 正常系
    case ok(code: Int, reason: String)
    // 異常系
    case error(Error)
}

onAddStream

ストリームが追加されたときに呼ばれるコールバックです。

自分自身のストリームも入ってくるため、Configuration.publisherStreamId を控えておくことでリモートのストリームを判別することができます。

let config = Configuration(url: url,
                           channelId: channelId,
                           role: .sendrecv)

let publisherStreamId = config.publisherStreamId

config.mediaChannelHandlers.onAddStream = { [weak self] stream in
    guard let self = self else { return }

    // 例: リモートストリームの videoRenderer に receiverVideoView をセットする
    if stream.streamId != publisherStreamId {
        stream.videoRenderer = self.receiverVideoView
    }
}

onRemoveStream

ストリームが削除されたときに呼ばれるコールバックです。

let config = Configuration(url: url,
                           channelId: channelId,
                           role: .sendrecv)

let publisherStreamId = config.publisherStreamId

config.mediaChannelHandlers.onRemoveStream = { [weak self] stream in
    guard let self = self else { return }

    // 例: リモートストリーム用の videoRenderer をクリアする
    if stream.streamId != publisherStreamId {
        self.receiverVideoView.stop()
        self.receiverVideoView.clear()
    }
}

onReceiveSignaling

Sora からシグナリングメッセージを受信したときに呼ばれるコールバックです。

Sora から受信する type: notify メッセージなどをアプリケーションで利用したい場合にこのコールバックを利用します。

  let config = Configuration(url: url,
                             channelId: channelId,
                             role: .sendrecv)

  mediaChannel.handlers.onReceiveSignaling = { signaling in
      switch signaling {

      // type: notify
      case .notify(let notify):
          switch notify.eventType {
          case "connection.created":
              // メタデータに含まれる JSON 値 (Any) を任意の型にキャストする
              if let metadata = notify.metadata as? [String: Any] {
                  print("metadata => \(metadata)")
              }
              if let authnMetadata = notify.authnMetadata as? [String: Any] {
                  print("authn => \(authnMetadata)")
              }
              if let authzMetadata = notify.authzMetadata as? [String: Any] {
                  print("authz => \(authzMetadata)")
              }
              ...

          // 他のイベント種別でも同様に処理する
          case "connection.created":
              ...

          default:
              ...
          }

      // type: push
      case .push(let push):
          if let data = push.data as? [String: Any] {
              print("data => \(data)")
          }
          ...

      default:
          ...
      }
}

onDataChannel

DataChannel シグナリングに切り替わったタイミングで呼ばれるコールバックです。

let config = Configuration(url: url,
                           channelId: channelId,
                           role: .sendrecv)

config.mediaChannelHandlers.onDataChannel = { [weak self] mediaChannel in
    // ここに DataChannel が利用可能になった際の処理を書いてください
}

onDataChannelMessage

DataChannel のメッセージ受信時に呼ばれるコールバックです。

詳しい使い方は リアルタイムメッセージング機能 を参照してください。

© Copyright 2018-2025, Shiguredo Inc. Created using Sphinx 8.2.3