メッセージング機能¶
概要¶
メッセージング機能は 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()
メッセージを受信する¶
SoraMediaChannel.Listener.onDataChannel にて DataChannel の開始通知を受け取ることができます。また、利用可能な DataChannel 情報の参照が可能です。
SoraMediaChannel.Listener.onDataChannelMessage にてメッセージの受信を行います。
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)
}
}
メッセージを送信する¶
SoraMediaChannel.sendDataChannelMessage を利用してメッセージの送信を行います。String 型、ByteBuffer 型 に対応しています。
// メッセージ送信する
mediaChannel.sendDataChannelMessage("#spam", "Hello World")
DataChannel を利用したメッセージングのみで接続する¶
音声と映像を送受信せずにメッセージのみの送受信を行う方法の詳細については、 Sora のドキュメント 音声と映像を送受信せずにメッセージのみで接続する をご確認ください。 Sora Android SDK では、
SoraMediaOption.role
にSoraChannelRole.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()