リリースノート¶
- CHANGE
後方互換性のない変更
- UPDATE
後方互換性がある変更
- ADD
後方互換性がある追加
- FIX
バグ修正
2026.1.0¶
- 日時:
2026-03-02
- 対応 Sora:
2025.2.0 以降
- 対応 Android:
5.0 以降
- 対応 libwebrtc:
144.7559.2.2
ハイライト¶
- クライアントの WebRTC 統計情報を取得するための
getStatsメソッドをSoraMediaChannelに追加しました- 詳細は 統計情報 をご確認ください
- CameraVideoCapturer を Sora Android SDK 内で生成し自動制御する機能を追加しました
- 詳細は SDK 内部で CameraVideoCapturer を管理する をご確認ください
- 音声のミュート切り替えを行う
setAudioHardMuteとsetAudioSoftMuteをSoraMediaChannelに追加しました- Sora Android SDK 2025.3.0 ではハードミュートには
setAudioRecordingPaused、ソフトミュートにはAudioTrack.setEnabledを使う必要がありましたが、統一された API になりました - 使い方は ミュート機能 をご確認ください
- Sora Android SDK 2025.3.0 ではハードミュートには
- 映像のミュート切り替えを行う
setVideoHardMuteとsetVideoSoftMuteをSoraMediaChannelに追加しました- Sora Android SDK 2025.3.0 ではハードミュートには
org.webrtc.CameraVideoCapturerのstartCapture()とstopCapture()、ソフトミュートにはVideoTrack.setEnabledを使う必要がありましたが、統一された API になりました - 使い方は ミュート機能 をご確認ください
- Sora Android SDK 2025.3.0 ではハードミュートには
- RPC 機能を追加しました
SoraMediaChannel.rpcで JSON-RPC 2.0 over DataChannel による API 呼び出しができます- 詳細は RPC 機能 をご確認ください
破壊的変更¶
SoraMediaOption.enableSimulcast(rid: SoraVideoOption.SimulcastRid? = null)のデフォルト値を削除してSoraMediaOption.enableSimulcast(rid: SoraVideoOption.SimulcastRid?)に変更しましたenableSimulcast(null)としていた場合は、新旧どちらの enableSimulcast が利用されるかコンパイラが決定できないため以下の対応が必要です- 明示的に
enableSimulcast(requestRid = null)のように名前付き引数を指定する enableSimulcast()と引数を指定しないようにする- 移行先の
enableSimulcast(requestRid: SoraVideoOption.SimulcastRequestRid? = null)が利用されますが、動作に変更はありません
- 移行先の
- 明示的に
- 以下の場合はコンパイラによって自動的に解決されるので移行作業は不要です
enableSimulcast(SoraVideoOption.SimulcastRid.R1)のように引数ありの場合は従来のSoraMediaOption.enableSimulcast(rid: SoraVideoOption.SimulcastRid?)に解決されますenableSimulcast()のように引数なしの場合は移行先のenableSimulcast(requestRid: SoraVideoOption.SimulcastRequestRid? = null)に解決されます
非推奨情報¶
SoraMediaChannel.setAudioRecordingPausedを非推奨にしました- 移行先は
SoraMediaChannel.setAudioHardMuteです
- 移行先は
SoraMediaOption.enableSimulcast(rid: SoraVideoOption.SimulcastRid?)を非推奨にしました- 2027 年 12 月リリースの Sora にて、シグナリング接続時の
simulcast_ridが廃止予定であるため非推奨にしました - 移行先は
SoraMediaOption.enableSimulcast(requestRid: SoraVideoOption.SimulcastRequestRid? = null)です
- 2027 年 12 月リリースの Sora にて、シグナリング接続時の
変更履歴¶
- [CHANGE]
SoraMediaOption.enableSimulcast(rid: SoraVideoOption.SimulcastRid? = null)のデフォルト値を削除してSoraMediaOption.enableSimulcast(rid: SoraVideoOption.SimulcastRid?)に変更しました- 同時に
SoraMediaOption.enableSimulcast(rid: SoraVideoOption.SimulcastRid?)を非推奨化しました。今後はenableSimulcast(requestRid: SoraVideoOption.SimulcastRequestRid? = null)を利用してください
- 同時に
- [UPDATE] libwebrtc を 144.7559.2.2 にアップデートしました
- [UPDATE]
SoraMediaChannel.setAudioRecordingPausedを非推奨にしました - [UPDATE]
SoraMediaOption.enableVideoUpstream(capturer, eglContext)の引数にcameraConfig: SoraCameraConfig? = nullを追加しました- SoraMediaChannel.setVideoHardMute などの VideoCapturer を操作する API を利用する場合は cameraConfig を設定する必要があります
- [ADD]
SoraMediaOptionにenableSimulcast(requestRid: SoraVideoOption.SimulcastRequestRid? = null)メソッドを追加しました- SimulcastRequestRid は
NONE、R0、R1、R2を指定できます
- SimulcastRequestRid は
- [ADD]
SoraMediaOptionにenableVideoUpstream(eglContext, cameraConfig)を追加しました- Sora Android SDK の内部で
CameraVideoCapturerを生成させる場合はこちらのメソッドを使います
- Sora Android SDK の内部で
- [ADD]
SoraMediaChannelにgetStatsメソッドを追加しました - [ADD]
SoraMediaChannelに音声ミュート用のsetAudioHardMuteとsetAudioSoftMuteメソッドを追加しました - [ADD]
SoraMediaChannelに映像ミュート用のsetVideoHardMuteとsetVideoSoftMuteメソッドを追加しました - [ADD]
SoraMediaChannelにswitchCameraとchangeCaptureFormatメソッドを追加しました - [ADD]
SoraMediaOptionにSoraCameraConfigクラスを追加しました - [ADD]
SoraAudioOptionにinitialAudioHardMuteを追加しました - [ADD]
SoraVideoOptionにCaptureType列挙型を追加しました - [ADD]
SoraVideoOptionにSimulcastRequestRid列挙型を追加しました - [ADD] RPC 機能を追加しました
2025.3.0¶
- 日時:
2025-11-11
- 対応 Sora:
2025.1.0 以降
- 対応 Android:
5.0 以降
- 対応 libwebrtc:
142.7444.2.1
ハイライト¶
変更履歴¶
- [UPDATE] libwebrtc を 142.7444.2.1 にアップデートしました
- [UPDATE] Sora Android SDK のビルドで利用する Kotlin バージョンを 2.0.20 にアップデートしました
- [ADD]
SoraMediaChannelにsetAudioRecordingPausedを追加しました - [ADD] 音声データを音声トラックごとにコールバックで受け取るためのインターフェースである
AudioTrackSinkを追加しました - [ADD]
AudioTrackに AudioTrackSink を関連付けるためのメソッドを追加しましたaddSink- AudioTrack と AudioTrackSink を関連付けるためのメソッドです
removeSink- AudioTrack と AudioTrackSink の関連付けを解除するためのメソッドです
2025.2.0¶
- 日時:
2025-09-17
- 対応 Sora:
2025.1.0 以降
- 対応 Android:
5.0 以降
- 対応 libwebrtc:
m138.7204.0.5
ハイライト¶
SoraMediaChannel.Listenerに、Sora から切断された際のステータスコードと理由を取得できるonClose(SoraMediaChannel, SoraCloseEvent)を追加しました- これにより、Sora から切断された際の理由を詳細に取得できるようになりました
- 詳細は Sora からの切断理由を取得できる onClose の追加 を参照してください
破壊的変更¶
- シグナリング type: connect メッセージの
multistreamを自動で true に設定する仕様を廃止しました - WebSocket が Sora から切断された際に受信したステータスコードが 1000 以外の場合でも onError を呼び出さないように変更しました
SoraMediaOption.videoCodecが未設定の場合のデフォルト動作を変更しました- 詳細は SoraMediaOption.videoCodec 未設定時の動作変更 を参照してください
SoraMediaOption.audioCodecが未設定の場合のデフォルト動作を変更しました- 詳細は SoraMediaOption.audioCodec 未設定時の動作変更 を参照してください
- SoraMediaChannel.Listener の
onError(SoraMediaChannel, SoraErrorReason)を廃止しました- 詳細は onError(SoraMediaChannel, SoraErrorReason) を廃止 を参照してください
- 解像度維持方法の fixedResolution を廃止し、 DegradationPreference を追加しました
- 詳細は 解像度維持方法の fixedResolution を廃止、 DegradationPreference を追加 を参照してください
非推奨情報¶
SoraMediaChannel.ListenerのonClose(SoraMediaChannel)を非推奨にしました- 今後は
onClose(SoraMediaChannel, SoraCloseEvent)を利用してください - 移行方法は Sora からの切断理由を取得できる onClose の追加 を参照してください
- 今後は
変更履歴¶
- [CHANGE]
CameraCapturerFactory初期化時の引数fixedResolutionを廃止しました- これまでは
CameraCapturerFactory.createの引数fixedResolutionに true を指定することにより送信する映像の解像度維持をすることができていましたが、この仕様を廃止しました。 - 代替の機能として、
SoraMediaOption.degradationPreferenceを追加しました
- これまでは
- [CHANGE] connect メッセージの
multistreamを自動で true に設定する仕様を廃止しましたSoraMediaOption.enableSpotlightを設定すると、内部で multistream を true に設定していましたが、この仕様を廃止しました- 以下の設定の組み合わに応じて自動で multistream を true に設定していましたが、この仕様を廃止しました
enableAudioDownstreamenableVideoDownstreamenableAudioUpstreamenableVideoUpstream
- [CHANGE]
SignalingChannelImplのWebSocketListener.onClosedの処理において、WebSocket のステータスコードが 1000 以外の場合でもonErrorを呼び出さないように変更しました- これまでの実装では、onError のコールバック呼び出しが定義されていましたが、実際には
onClosingが実行された時点でSignalingChannelImplの listener の参照が削除されるため、onErrorが確実に呼び出される保証はありませんでした - 今回の変更により、
onCloseにおいてステータスコードと切断理由を取得できるようになりエラーハンドリングが可能となったため、onErrorの呼び出しは不要となりました - これにより、
onErrorはネットワーク切断などによる異常終了のみを通知する仕様となります - もし、ステータスコード 1000 以外の Sora からの切断を
onErrorによって検知する実装を行っていた場合、今後はonCloseのステータスコードを参照し、適切な処理を行う必要があります
- これまでの実装では、onError のコールバック呼び出しが定義されていましたが、実際には
- [CHANGE]
SoraMediaOption.videoCodecが未設定の場合の動作変更- これまでは、
SoraMediaOption.videoCodecが未設定の場合、connect メッセージのvideo.codec_typeにデフォルトでVP9が設定され、送信されていました - 今回の変更により、未設定の場合は
video.codec_typeを送信しなくなりました - 未設定の場合、Sora 側でデフォルトのビデオコーデックとして
VP9が設定されます SoraMediaOption.videoCodecが未設定であり、かつSoraMediaOption.videoVp9Paramsを設定している場合は破壊的変更の影響を受けるため、明示的にSoraMediaOption.videoCodecにSoraVideoOption.Codec.VP9を設定する必要があります
- これまでは、
- [CHANGE]
SoraMediaOption.audioCodecが未設定の場合の動作変更- これまでは
SoraMediaOption.audioCodecが未設定の場合、connect メッセージのaudio.codec_typeにデフォルトでOPUSが設定され、送信されていました - 今回の変更により、未設定の場合は
audio.codec_typeを送信しなくなりました - 未設定の場合、Sora 側でデフォルトのオーディオコーデックとして
OPUSが設定されます SoraMediaOption.audioCodecが未設定であり、かつSoraMediaOption.audioOption.opusParamsを設定している場合は破壊的変更の影響を受けるため、明示的にSoraMediaOption.audioCodecにSoraAudioOption.Codec.OPUSを設定する必要があります
- これまでは
- [CHANGE]
SoraMediaChannel.ListenerのonError(SoraMediaChannel, SoraErrorReason)を廃止しましたonError(SoraMediaChannel, SoraErrorReason)を呼び出していた箇所はonError(SoraMediaChannel, SoraErrorReason, String)に置き換えられます- String にはエラーの詳細情報が渡されます
- 詳細がない場合は空文字列が渡されます
- [UPDATE] libwebrtc を 138.7204.0.5 にアップデートしました
- [UPDATE] Sora 2025.1.0 でのレガシーストリーム廃止に伴い不要となる設定を非推奨に変更しました
- Sora 2025.1.0 以降は connect メッセージの
multistream項目が廃止されました - これに合わせ、SDK でも
multistreamを自動でtrueに設定する挙動を廃止しました(関連: シグナリングの "type": "connect" メッセージの multistream を自動で true に設定する仕様を廃止) - 非推奨にした設定
SoraMediaOption.enableMultistream: これまでmultistream: trueを明示するための設定でしたが、Sora 2025.1.0 以降は非推奨ですSoraMediaOption.enableLegacyStream: これまでmultistream: false(レガシーストリーム)を明示するための互換設定でしたが、レガシーストリーム自体が廃止されたため非推奨です
- Sora 2025.1.0 以降は connect メッセージの
- [UPDATE]
SoraMediaChannel.Listenerに、Sora から切断された際のステータスコードと理由を取得できるonClose(SoraMediaChannel, SoraCloseEvent)を追加しました- Sora から切断された際に通知されるイベントである
SoraCloseEventを追加しました - WebSocket シグナリング切断時に通知されるイベントである
SignalingChannelCloseEventを追加しました - 以下の場合に、Sora から切断された際に
SoraCloseEventが通知されます:- SoraMediaChannel.disconnect() を呼び出した場合
- WebSocket 経由のシグナリングを利用している場合
- DataChannel 経由のシグナリングを利用する場合、かつ
ignore_disconnect_websocketが true であり、かつ Sora の設定でdata_channel_signaling_close_messageが有効な場合
- Sora から切断された際に通知されるイベントである
- [UPDATE]
SoraMediaChannel.ListenerのonClose(SoraMediaChannel)を非推奨にしました- 今後は
onClose(SoraMediaChannel, SoraCloseEvent)を利用してください
- 今後は
- [UPDATE] compileSdk と targetSdkVersion を 36 にアップデートしました
- [UPDATE] Android Gradle Plugin (AGP) を 8.10.1 にアップデートしました
- [UPDATE] Gradle を 8.11.1 にアップデートしました
- [UPDATE] 依存ライブラリーのバージョンをアップデートしました
- org.jetbrains.dokka:dokka-gradle-plugin を 1.9.20 にアップデートしました
- com.google.code.gson:gson を 2.13.1 にアップデートしました
- org.ajoberstar.grgit:grgit-gradle を 5.3.2 にアップデートしました
- org.jetbrains.kotlinx:kotlinx-coroutines-android を 1.9.0 にアップデートしました
- org.robolectric:robolectric を 4.15.1 にアップデートしました
- [ADD]
SoraMediaOptionにdegradationPreferenceを追加しました- クライアント側の状況により設定した解像度やフレームレートを維持できなくなった場合にどのように質を下げるか制御できるオプションです
- オプション追加前よりデフォルトの挙動で動作していたため互換性に影響はありません
- [ADD] サイマルキャストの映像におけるエンコーディングパラメーター
scaleResolutionDownToを追加しました- scaleResolutionDownTo の詳細については Sora のドキュメントの サイマルキャスト機能 を参照してください
- [ADD] Sora から DataChannel シグナリングを切断する際に
"type": "close"メッセージを受信する機能を追加する- DataChannel シグナリングが有効、かつ
ignore_disconnect_websocketが true、かつ Sora の設定でdata_channel_signaling_close_messageが有効な場合に受信可能です - 受信したメッセージは
SoraCloseEventとしてonClose(SoraMediaChannel, SoraCloseEvent?)に通知されます
- DataChannel シグナリングが有効、かつ
- [ADD]
SoraMediaOptionにsoftwareVideoEncoderOnlyを追加しました- 映像配信時に端末のハードウェアエンコーダーを使わず、ソフトウェアエンコーダーのみで送信するためのオプションです
- デフォルトは false であるため互換性に影響はありません
- true の場合、サイマルキャスト有効時を含めソフトウェアエンコーダーのみでエンコードするようになります
- 映像の配信が有効な場合に適用されるため、視聴のみの場合は影響ありません
videoEncoderFactoryを設定している場合は本オプションは無視されます- ソフトウェアエンコードは CPU 使用率・発熱・電力消費が増える可能性がありますので注意してください
- [FIX]
SoraMediaChannel.internalDisconnectにおけるSoraMediaChannel.Listener.onCloseの呼び出しタイミングを、切断処理の完了後に修正しました- 従来は切断処理の完了前に
onCloseが呼び出されていましたが、onCloseは切断後に通知されるのが望ましいため、切断完了後に呼び出されるよう修正しました
- 従来は切断処理の完了前に
2025.1.1¶
- 日時:
2025-08-07
- 対応 Sora:
2024.2.0 以降
- 対応 Android:
5.0 以降
- 対応 libwebrtc:
m132.6834.5.0
- [FIX] Sora の設定が、DataChannel 経由のシグナリングの設定、かつ、WebSocket の切断を Sora への接続が切断したと判断しない設定の場合に、SDP 再交換に失敗することがある問題を修正しました
- WebSocket 経由から DataChannel 経由へのシグナリング切替時に
type: switchedとtype: re-offerをほぼ同時に受信した際、type: re-answerを WebSocket 経由で送信する前に WebSocket を切断してしまいtype: re-answerの送信に失敗することがあるためです - DataChannel 経由へのシグナリング切替後でも、まだ WebSocket 経由で送信中のメッセージが存在する可能性を考慮し、余裕を持って切断するために 10 秒の待機時間を設けるようにしました
- WebSocket 経由から DataChannel 経由へのシグナリング切替時に
2025.1.0¶
- 日時:
2025-01-27
- 対応 Sora:
2024.2.0 以降
- 対応 Android:
5.0 以降
- 対応 libwebrtc:
m132.6834.5.0
- [UPDATE] libwebrtc を 132.6834.5.0 にアップデートしました
- [UPDATE] SoraForwardingFilterOption 型の引数を Sora での 2025 年 12 月の廃止に向けて非推奨にしました
- [UPDATE] OfferMessage に以下の項目を追加しました
versionsimulcastMulticodecspotlightchannelIdsessionIdaudioaudioCodecTypeaudioBitRatevideovideoCodecTypevideoBitRate
- [UPDATE] NotificationMessage に以下の項目を追加しました
timestampspotlightNumberfailedConnectionIdcurrentStatepreviousState
- [ADD] 転送フィルター機能の設定を表すクラス
SoraForwardingFilterOptionにnameとpriorityを追加しました - [ADD] 転送フィルターをリスト形式で指定するためのプロパティを追加しました
- [FIX] SoraMediaChannel の
signalingMetadataとsignalingNotifyMetadataの Map オブジェクトに value が null のフィールドを設定した場合、そのフィールドが connect メッセージに含まれない問題を修正しましたsignalingMetadataとsignalingNotifyMetadataに設定する情報はユーザが任意に設定する項目であり value 値が null の情報も送信できるようにする必要がありましたが Gson は JSON シリアライズ時にデフォルトで null フィールドを無視するため、null を持つフィールドは省略されていました- 今後は value 値が null の情報も送信されます。値を送信したくない場合は Map オブジェクトに含めないようにしてください