メッセージング機能

概要

メッセージング機能は WebRTC の DataChannel を利用して、データの送受信を行う機能です。 詳細は Sora のドキュメント を参照してください。 また、サンプルアプリケーションに メッセージング を用意していますのでこちらも参考にしてください。

Sora Android SDK では SoraMediaChannel の初期化時に dataChannels に compress = true を指定した場合、メッセージの圧縮と解凍は SDK 内部で自動的に行われます。アプリケーション側で意識する必要はありません。

メッセージを送受信する

Sora 接続時にメッセージング用 DataChannel を設定する

Sora の 接続時に SoraMediaChannel にメッセージング用の DataChannel を指定できます。 List<Map<String, Any>> の形式で指定します。

// メッセージング機能に利用する DataChannel を指定する
val dataChannels = listOf(
  mapOf(
      "label" to "#spam",
      "direction" to "sendrecv"
  ),
  mapOf(
      "label" to "#egg",
      "max_retransmits" to 0,
      "ordered" to false,
      "protocol" to "abc",
      "compress" to false,
      "direction" to "recvonly"
  ),
)

// オプションを設定する。通常の接続と設定内容は変わりません。
val mediaOption = SoraMediaOption()
mediaOption.enableMultistream()
mediaOption.enableVideoDownstream(null)

// Sora に接続する。SoraMediaChannel 生成時に dataChannels を設定する。
val mediaChannel = SoraMediaChannel(
              context = this,
              signalingEndpointCandidates = [
                  "wss://sora.example.com/signaling",
              ],
              channelId = "sora",
              mediaOption = option,
              listener = channelListener,
              // DataChannel シグナリングを有効化する
              dataChannelSignaling = true,
              dataChannels = dataChannels)
mediaChannel.connect()

メッセージを受信する

val channelListener = object : SoraMediaChannel.Listener {

  // DataChannel が利用可能になったタイミングで実行されるコールバック
  override fun onDataChannel(mediaChannel: SoraMediaChannel, dataChannels: List<Map<String, Any>>?) {
      super.onDataChannel(mediaChannel, dataChannels)
      // メッセージングで利用できる DataChannel 一覧を出力する
      Log.d("onDataChannel", "$dataChannels")
    }
  }

  // DataChannel メッセージ受信時のコールバック
  override fun onDataChannelMessage(mediaChannel: SoraMediaChannel, label: String, data: ByteBuffer) {
    // ByteBuffer を String に変換して出力する
    val message = mediaChannel.dataToString(data)
    Log.d("onDataChannelMessage", message)
  }

}

メッセージを送信する

// メッセージ送信する
mediaChannel.sendDataChannelMessage("#spam", "Hello World")

DataChannel を利用したメッセージングのみで接続する

音声と映像を送受信せずにメッセージのみの送受信を行う方法の詳細については、 Sora のドキュメント 音声と映像を送受信せずにメッセージのみで接続する をご確認ください。 Sora Android SDK では、 SoraMediaOption.roleSoraChannelRole.SENDRECV を指定して接続を行います。

// オプションを設定する
val mediaOption = SoraMediaOption()
mediaOption.role = SoraChannelRole.SENDRECV
mediaOption.enableMultistream()

// Sora に接続する
val mediaChannel =
   SoraMediaChannel(
      context = this,
      signalingEndpointCandidates =
            [
               "wss://sora.example.com/signaling",
            ],
      channelId = "sora",
      mediaOption = option,
      listener = channelListener,
      // DataChannel シグナリングを有効化する
      dataChannelSignaling = true,
      dataChannels = dataChannels
   )

mediaChannel.connect()
© Copyright 2018-2023, Shiguredo Inc. Created using Sphinx 7.3.7