リリースノート

CHANGE

後方互換性のない変更

UPDATE

後方互換性がある変更

ADD

後方互換性がある追加

FIX

バグ修正

2026.4.0

日付:

2026-10-20

対応 Sora:

2025.2.0 以降

対応 iOS:

14.0 以降

対応 libwebrtc:

m155(8059)

ハイライト

非推奨情報

  • Utilities.Stopwatch を非推奨にしました
    • 1 秒ごとに経過時間を "時:分:秒" の文字列で handler へ通知するカウンタです
    • Sora iOS SDK 固有の機能ではなく SDK 内でも利用していないため、 2027 年中に廃止予定です
    • 1 秒ごとの定期実行や表示の更新には、 Timer を MainActor 上のタイマーとして管理する方法か、 ContinuousClock と Task.sleep(for:) を組み合わせる方法へ移行してください
    • 経過時間の計測には、 ContinuousClock / SuspendingClock の now の差分 (Duration) へ移行してください
    • 用途によって移行先が異なるため、 SDK 固有の代替タイマーは提供しません
  • Utilities.randomString を非推奨にしました
    • 紛らわしい文字 ( l / I / O) を除く 59 文字の英数字から length の長さの文字列を返す汎用ユーティリティです
    • Sora iOS SDK 固有の機能ではなく SDK 内でも利用していないため、 2027 年中に廃止予定です
    • ランダムな文字列が必要な場合は、 UUID や標準の乱数 API ( randomElement() / UInt32.random(in:) など) へ移行してください
    • 出力の長さ指定と文字集合が変わるため、同じ出力が必要な場合は文字集合を自前で定義してください
    • 用途によって移行先が異なるため、 SDK 固有の代替ユーティリティは提供しません

変更履歴

  • [CHANGE] swift-tools-version を 6.3 に上げ、 Swift Package Manager の manifest で Swift 6 言語モードを宣言するようにしました
    • Swift Package Manager 6.3 未満 (Xcode 26.6 未満) では package を解決できなくなります
    • swiftLanguageModes: [.v6] により、 Swift Package Manager で取り込んだアプリも SDK を Swift 6 言語モードでコンパイルするようになります。公開 API と SDK の挙動は変わりません
    • アプリ側が Swift 5 言語モードの場合は、そのまま利用できます
    • 詳細は 2026.3.x から 2026.4.x への移行 をご確認ください
  • [CHANGE] システム要件の Xcode を 26.6 以降に更新しました
  • [CHANGE] RPCErrorDetail.data の型を Any? から JSONValue? に変更しました
    • RPCErrorDetail を Sendable な型とするためです
    • data を as? [String: Any] のようにキャストしていたコードは常に nil になるため、 JSONValue の case 分岐へ書き換える必要があります
    • JSON-RPC 2.0 の error.data が省略された場合は nil 、 null の場合は .null になります
    • 数値は JSONSerialization を経由して decimal / double の case で復元されるため、小数の表記が変わることがあります (例: 0.1 は .decimal(0.10000000000000001) になる)
  • [CHANGE] WebRTC の enum 型への CustomStringConvertible 準拠を削除しました
    • 別モジュールの型へプロトコル準拠を追加していた retroactive conformance の警告 (SE-0364) を解消するためです
    • RTCSignalingState / RTCIceConnectionState / RTCIceGatheringState / RTCDataChannelState / RTCDegradationPreference / RTCPriority の準拠を削除しました
    • description を呼び出していた利用者コードはコンパイルエラーになり、文字列補間と String(describing:) は RTCSignalingState(rawValue: 0) のような raw 表現に変わります
    • RTCDegradationPreference は rawValue で判定するようになり、 libwebrtc m154 で追加された maintainFramerateAndResolution (値 0、削除予定の disabled の別名) も "disabled" として扱います
    • RTCRtpParameters.description から Optional(...) が消え、未知の値は "unknown(<rawValue>)" になります (messagingError の reason と SDK のログにも現れます)
  • [CHANGE] 公開 API Utilities.Stopwatch を非推奨にしました
    • 2027 年中に廃止予定です
    • 移行方法は「非推奨情報」をご確認ください
  • [CHANGE] 公開 API Utilities.randomString を非推奨にしました
    • 2027 年中に廃止予定です
    • 移行方法は「非推奨情報」をご確認ください
  • [UPDATE] libwebrtc を m155.8059.4.1 に更新しました
    • m155 で iOS 用 ADM で録音の pause / resume を WebRTC の worker スレッド上で実行するようになったため、RTCPeerConnectionFactory.run(onWorker:) 経由で呼ぶようにしました
    • m154 で RTCAudioDeviceModule のステレオ再生設定が生成時の指定に変更されたため、 AudioDeviceModule の生成時に stereoPlayoutEnabled を渡すようにしました
    • m154 で追加された RTCDegradationPreference.maintainFramerateAndResolution に対応しました
  • [UPDATE] Swift 6 言語モードに対応するため、公開値型を Sendable に準拠させました
    • ConnectionState / SoraCloseEvent / MediaConstraints / Configuration.Spotlight / ForwardingFilterRule / AudioMode / CameraSettings / Log / Logger.Group / SignalingAnswer / SignalingUpdate / SignalingClose / RPCErrorDetail などの公開値型が対象です
    • 利用者が actor / Task 境界へ SDK の値をそのまま渡せるようにするためです
    • SoraCloseEvent.error が運ぶ Error の実体が Sendable であることまでは保証しません
    • 利用側で独自に Sendable 準拠を追加していた場合は削除が必要です (重複適合は警告になり、 warnings-as-errors を有効にした build ではエラーになります)
  • [UPDATE] Swift 6 言語モードに対応するため、 RPC の params / result 型を Sendable に準拠させました
    • RequestSimulcastRidParams / RequestSpotlightRidParams / ResetSpotlightRidParams / RequestSimulcastRidResult / RequestSpotlightRidResult / ResetSpotlightRidResult へ Sendable 準拠を追加しました
    • PutSignalingNotifyMetadataParams は Metadata が Sendable の場合、 PutSignalingNotifyMetadataItemParams は Value が Sendable の場合に Sendable へ準拠します
    • 非ジェネリックな組み込みメソッド RequestSimulcastRid / RequestSpotlightRid / ResetSpotlightRid は SendableRPCMethodProtocol へも準拠します
    • 利用側で独自に Sendable 準拠を追加していた場合は削除が必要です (重複適合は警告になり、 warnings-as-errors を有効にした build ではエラーになります)
    • 詳細は Swift 6 言語モードに対応する Sendable な RPC を利用する をご確認ください
  • [UPDATE] Swift 6 言語モードに対応するため、接続設定を immutable な Sendable snapshot へ変換するようにしました
    • 数値の表記が変わることがあります (Float / Double の指数表記の展開、 -0.0 の符号)
    • dataChannels を設定している場合は、 connect message に載る Double / Float の 17 桁表記が解消され JSONEncoder の表記に揃います
    • JSON オブジェクトのキー順は不定になります (Dictionary の順序のため、 JSON として等価です)
  • [UPDATE] Swift 6 言語モードに対応するため、 CameraVideoCapturer のカメラ状態の所有者を単一化しました
    • CameraVideoCapturer は Sendable に準拠し、 front / back / current / isRunning / format / frameRate は computed property になりました (読み取り専用の利用はソース互換です)
    • CameraVideoCapturer.stream は capturer が MediaStream を強参照しなくなり、利用者が capturer 以外に強参照を保たない場合は nil になります
  • [UPDATE] Swift 6 言語モードに対応するため、 MediaStream の映像フレーム処理 executor を単一化しました
    • VideoRenderer の callback は main queue で配送されます (これまでと異なるスレッドから呼ばれる場合があります)。ストリームをまたぐ callback の順序は保証しません
    • MediaStream.videoRenderer / videoEnabled / audioEnabled の setter と VideoView.start() は callback の配送完了を待たず、 getter は即時に新値を返します
    • MediaStream.send(videoFrame:) は配送の完了を待たずに戻り、呼び出し側はフレームの所有権を SDK へ移します。 MediaStream.terminate() は冪等になり、以降のフレームと renderer の callback を配送しません
  • [UPDATE] Swift 6 言語モードに対応するため、イベントハンドラのプロパティの読み書きを排他しました
    • MediaChannelHandlers / WebSocketChannelHandlers / CameraVideoCapturerHandlers / MediaStreamHandlers が持つハンドラプロパティの get / set を NSLock で排他します
    • 配送側は lock を解放してからハンドラを呼ぶため、ハンドラの中から別のハンドラを設定しても deadlock しません
  • [UPDATE] Swift 6 言語モードに対応するため、 Logger の共有可変状態を同期しました
    • Logger.shared / level / groups / onOutputHandler の読み書きを lock で保護し、 Logger の @unchecked Sendable を checked な Sendable へ置き換えました
    • 並行に設定を変更した場合に、 1 回の出力が異なる時点の設定を混ぜて観測しなくなります
    • level / groups / onOutputHandler は computed property になりますが、読み書きの利用はソース互換です
    • 詳細は SDK のログをコンソールに出力する をご確認ください
  • [UPDATE] Swift 6 言語モードに対応するため、シグナリングの状態所有者を統一しました
    • シグナリングの phase、接続 URL、 data_channel_signaling / ignore_disconnect_websocket のフラグ、 URLSessionWebSocketChannel の可変状態を 1 つの所有者が保持します
    • connect / send / redirect / disconnect と URLSession delegate callback を同じ直列 queue で順序付けます
  • [UPDATE] Swift 6 言語モードに対応するため、 PeerChannel の接続ライフサイクルの排他を接続状態の所有者へ統合しました
  • [UPDATE] Swift 6 言語モードに対応するため、 MediaChannel.state の保持と読み出しを単一の lock 付き storage へ移しました
  • [UPDATE] ScreenCaptureSettings.videoSampleBufferTransformer が受け取る sample buffer の所有契約を明確にしました
    • 受け取る CMSampleBuffer は ReplayKit が渡した buffer の浅いコピーになり、画素データは従来どおり共有されます
    • ScreenCaptureSettings.videoSampleBufferTransformer と MediaChannel.startScreenCapture のドキュメントに、呼び出し executor と返却した sample buffer の所有契約を明記しました
    • 詳細は スクリーンキャスト機能 をご確認ください
  • [ADD] Swift 6 言語モードの検査に対応した統計情報取得 API を追加しました
    • MediaChannel.getStatsSnapshot(handler:) / MediaChannel.getStatsSnapshot() を追加しました
      • 既存の getStats(handler:) と同じ統計情報を、不変で Sendable な StatisticsSnapshot として取得できる追加 API です
      • MediaChannel.getStats(handler:) は非推奨ではなく、引き続き利用できます
    • 詳細は Swift 6 言語モードに対応する Sendable な統計情報を取得する をご確認ください
  • [ADD] Swift 6 言語モードの検査に対応した RPC 送信 API を追加しました
  • [ADD] Swift 6 言語モードの検査に対応したイベント購読 API を追加しました
  • [ADD] JSON の値を表す公開型 JSONValue を追加しました
    • Sendable に準拠しており、 RPC の params と result としてそのまま利用できます
    • 詳細は 任意の JSON を送受信する をご確認ください
  • [FIX] 切断要求後に届いた受信メッセージで利用者の handler が呼ばれることがある問題を修正しました
    • Configuration.webSocketChannelHandlers の onReceive を、切断要求後に届いた受信結果では呼ばないようにしました
  • [FIX] Configuration.dataChannels を設定していると connect message に載る Decimal が Double の精度に丸められて送信される問題を修正しました
    • signalingConnectMetadata / signalingConnectNotifyMetadata / codec 別パラメーター / ForwardingFilter.metadata の Decimal が丸められる問題を修正しました
  • [FIX] JSON 化できない Configuration.dataChannels を設定すると接続時にプロセスが異常終了する問題を修正しました
    • Data / Date / Set / URL / 非 String キーの辞書 / NaN / Infinity / Decimal の NaN / 入れ子の非有限値を設定した場合に、接続開始前に SoraError.configurationError として返すようにしました
  • [FIX] connect message に載る metadata の encode に失敗すると接続がタイムアウトする問題を修正しました
    • Configuration.signalingConnectMetadata / signalingConnectNotifyMetadata / codec 別パラメーター / ForwardingFilter.metadata の encode に失敗した場合に、接続開始前に SoraError.configurationError として返すようにしました
    • JSONEncoder がエラーにしない Decimal の NaN も検出します
  • [FIX] MediaChannel.setVideoHardMute(true) の失敗時に映像が黒塗りのまま残る問題を修正しました
    • VideoHardMuteActor の所有権を取得できなかった呼び出しは videoEnabled を変更しないようにしました
    • 接続終了中 (lease が無効) の失敗では復元せず、黒塗りのまま終了します
    • setVideoHardMute(true) の経路では onSwitchVideo が VideoHardMuteActor の executor で発火します (これまでと異なるスレッドから呼ばれる場合があります)
  • [FIX] 未知の WebRTC enum 値で description が fatalError を呼び、プロセスが異常終了する問題を修正しました
    • RTCSignalingState / RTCIceConnectionState / RTCIceGatheringState の description の @unknown default が fatalError("unknown state") を呼んでいたためです
  • [FIX] SDK 内部の排他区間を保持したまま Logger を呼ぶと利用者の出力 handler が deadlock する問題を修正しました
    • 排他区間を保持したままログを出していた箇所のログ出力を排他区間の外へ移しました
    • ログの内容 (level / type / message) と同一スレッド・同一経路での出力順序は変わりません
    • 詳細は SDK のログをコンソールに出力する をご確認ください
  • [FIX] createAnswer の setRemoteDescription 完了 closure で self が解放済みの場合も handler を呼ぶようにし、 handler を呼ばずに return する経路をなくしました
  • [FIX] PeerChannel.onConnect が複数スレッドから排他制御なしで読み書きされるデータ競合を解消しました
  • [FIX] MediaStream.videoEnabled / audioEnabled を複数の公開 API から並行に変更したときに、失敗時の復元が後続の変更を上書きすることがある問題を修正しました
    • MediaStream.videoEnabled / audioEnabled の getter は SDK の保持する確定値を返し、 onSwitchVideo / onSwitchAudio は値の変化ごとに 1 回だけ呼ばれます
    • 並行して変更した場合、書き込みは世代で比較され、より大きい世代が先に確定している場合は、後から来た書き込みを破棄します
  • [FIX] WrapperVideoEncoderFactory.shared.simulcastEnabled が排他制御なしで読み書きされるデータ競合を解消しました
    • simulcastEnabled の get / set を NSLock で排他します
  • [FIX] redirect の無効化と並行した MediaChannel.sendMessage が旧 DataChannel へ送信されるデータ競合を解消しました
    • redirect の無効化が完了した後に開始した sendMessage は SoraError.messagingError を返し、旧 DataChannel へ送信しないようにしました
  • [FIX] 画面キャプチャの ReplayKit コールバックが MainActor 隔離を継承し、配信開始時に実行時隔離チェックでプロセスが異常終了する問題を修正しました
    • ReplayKit の handler と stopCapture の完了クロージャが MainActor 隔離を継承していたためです

2026.3.0

日付:

2026-09-10

対応 Sora:

2025.2.0 以降

対応 iOS:

14.0 以降

対応 libwebrtc:

m150(7871)

ハイライト

非推奨情報

  • TLSSecurityPolicy および ICEServerInfo.tlsSecurityPolicy を非推奨にしました
    • WebSocket シグナリング、 TURN-TLS の両方においてサーバー証明書検証を無効化するための移行先として Configuration.insecure を追加しました
  • Configuration.spotlightEnabled を非推奨にしました
    • スポットライト機能を有効にするための移行先として Configuration.isSpotlightEnabled を追加しました

変更履歴

  • [UPDATE] MediaChannelHandlers.onDataChannel の発火タイミングを変更しました
    • ラベルが # から始まるリアルタイムメッセージング用 DataChannel がすべてクライアント側で利用可能になった時点で発火するため、発火時点で送受信可能です
    • onDataChannel と WebSocket の "type": "switched" の前後関係は保証されません
    • リアルタイムメッセージング用 DataChannel が存在しない場合は発火しません
    • 詳細は リアルタイムメッセージング機能 および コールバック をご確認ください
  • [UPDATE] TLSSecurityPolicy および ICEServerInfo.tlsSecurityPolicy を非推奨にしました
    • 移行先は Configuration.insecure です
  • [UPDATE] Configuration.spotlightEnabled を非推奨にしました
    • 移行先は Configuration.isSpotlightEnabled です
  • [UPDATE] PeerChannel の接続状態フラグの所有者を単一の reducer に集約しました
    • 接続状態を単一の所有者で管理し、並行処理によるデータ競合を防ぐようにしました
  • [UPDATE] libwebrtc m150.7871.3.5 に上げました
  • [ADD] ステレオ音声を出力できるようになりました
  • [ADD] Configuration に Opus 音声コーデックのパラメーターを指定できる audioOpusParams を追加しました
  • [ADD] Configuration に insecure を追加しました
  • [ADD] Configuration にスポットライト機能を有効にする isSpotlightEnabled を追加しました
    • Enum 値で指定する spotlightEnabled から Bool 値で指定する isSpotlightEnabled へ移行のため追加しました
    • 詳細は スポットライト機能 をご確認ください
  • [ADD] MediaChannelHandlers.onDataChannelOpened を追加しました
    • ラベルを限定せず、クライアントが受け取った DataChannel がラベルごとにクライアント側で OPEN になったタイミングで 1 回ずつ発火します
    • onDataChannel がリアルタイムメッセージング用 DataChannel の利用開始をまとめて通知するのに対し、 onDataChannelOpened はラベルごとの OPEN を通知します
    • 詳細は リアルタイムメッセージング機能 および コールバック をご確認ください
  • [FIX] 初期マイクミュートの初回解除時にマイク入力が開始されない問題を修正しました
    • SDK 側の音声ハードミュート状態キャッシュにより解除要求が AudioDeviceModule に渡らない問題を修正しました
  • [FIX] TURN-TLS の証明書エラーによる接続失敗後も libwebrtc のログが流れ続ける問題を修正しました
    • 接続試行中に切断要求を受け取った場合、接続開始時のロックを解放し、 RTCPeerConnection を閉じるようにしました
    • 接続失敗時のエラー通知が複数回呼ばれないようにしました
  • [FIX] 受信中にネットワークが切断されてもエラー通知がない問題を修正しました
    • 接続完了後に RTCPeerConnectionState が .disconnected のまま停滞した場合、5 秒の猶予後に切断するようにしました
    • 切断時はシグナリング経由で明示的な切断メッセージを送信します
  • [FIX] ConnectionTask の即時キャンセルが接続開始を止めない競合を修正しました
    • 接続開始前にキャンセルされた場合、以前は接続が開始されていました。接続を開始せず SoraError.connectionCancelled を通知するようにしました
    • 接続完了時もキャンセル済みか確認し、キャンセル後は接続成功を通知しないようにしました
  • [FIX] PeerChannel の接続完了ハンドラーが二重実行または未実行になる問題を修正しました
    • SDP の生成エラーが sdpError として利用者に伝わるようにしました
    • 接続成功、失敗、切断の各経路で完了ハンドラーを 1 回だけ実行するようにしました
  • [FIX] 切断時の invalidate と RPC 呼び出しが競合して、 RPC が完了しない問題を修正しました
    • invalidate 後の RPC 呼び出しを即時に失敗させ、保留中の RPC を競合なく 1 回だけ完了するようにしました
    • MediaChannel.rpc の Task がキャンセルされた場合は CancellationError で完了します
  • [FIX] redirect 受理後も旧 DataChannel と RPC を利用できる問題を修正しました
    • redirect 受理時に旧 transport を無効化し、以後の送信、RPC、統計取得が旧接続を参照しないようにしました
    • 旧 DataChannel の参照を解放し、旧 RPC を無効化するようにしました
    • 旧 MediaStream は終端して解放し、旧 PeerConnection の映像・音声フレームが新しい接続へ混入しないようにしました
  • [FIX] ConnectionTimer の旧タイマーが新しい接続を切断する問題を修正しました
    • 再実行前に既存のタイマーを無効化し、世代が一致するタイマーだけがタイムアウト処理を実行するようにしました
  • [FIX] 画面共有の再開始後に旧フレームが送信される問題を修正しました
    • キャプチャ世代を識別し、停止と再開始の競合後も旧フレームを送信しないようにしました
    • ReplayKit の開始、停止、所有権を接続間で直列化しました
  • [FIX] 映像ハードミュートの capturer が別接続で再開される問題を修正しました
    • カメラ操作の所有者を接続に紐付け、別接続が保存した capturer の取得と再開を拒否します
    • 接続を切断する際は、その接続が所有するカメラだけを停止します
  • [FIX] Camera flip で切り替え先の旧 stream へフレームが送信される問題を修正しました
    • カメラの開始前に切り替え先の stream を設定し、古い stream へフレームを送信しないようにしました
    • 連続した Camera flip の競合を防ぐようにしました

2026.2.1

日付:

2026-09-09

対応 Sora:

2025.2.0 以降

対応 iOS:

14.0 以降

対応 libwebrtc:

m150(7871)

変更履歴

  • [FIX] PackageInfo の Sora iOS SDK バージョンを修正しました
    • 2026.2.0 リリース時に canary バージョンとなっていたのを修正しました

2026.2.0

日付:

2026-07-29

対応 Sora:

2025.2.0 以降

対応 iOS:

14.0 以降

対応 libwebrtc:

m150(7871)

非推奨情報

  • MediaChannelHandlers.onReceiveSignaling を非推奨にしました
    • シグナリングメッセージの受け取りをより明確にするため、移行先として MediaChannelHandlers.onReceiveSignalingJSON を追加しました

変更履歴

  • [CHANGE] TURN-TLS の証明書検証で、 WebSocket シグナリングと同様に iOS のルートストアを利用するようにしました
    • iOS のルートストアに含まれるルート証明書を用いて TURN-TLS のサーバー証明書の証明書チェーンを検証するようにしました
    • libwebrtc にハードコードされたルート証明書は利用しないようにしました
    • iOS のルートストアに必要な CA 証明書が含まれておらず、turns: 接続に失敗する場合は Configuration.caCertificate に利用する CA 証明書を指定する、または端末に信頼する証明書としてインストールする必要があります
    • Configuration.caCertificate 指定時はユーザー指定の CA 証明書が利用されます
    • 詳細は CA 証明書を指定する をご確認ください
  • [CHANGE] ログ出力時にクレデンシャル情報をマスクするようにしました
    • access_token、token、secret、authorization、credential を含むキーの値はログ上で *** に置換されます
  • [UPDATE] WebRTC m150.7871.3.0 に上げました
  • [UPDATE] Swift 6 言語モードでのビルドに対応しました
    • 公開型の一部を Sendable に対応しました
      • Sora、Role、SignalingRole、Proxy、DeviceInfo、Logger 等が該当します
      • 今回の変更で SDK 側に Sendable 準拠が追加された型について、利用側で独自に Sendable 準拠を追加している場合は削除が必要です
  • [UPDATE] MediaChannelHandlers.onReceiveSignaling を非推奨にしました
    • 移行先は MediaChannelHandlers.onReceiveSignalingJSON です
  • [ADD] WebSocket シグナリングでユーザー指定の CA 証明書を検証できるようにしました
    • Configuration.caCertificate に PEM 形式の CA 証明書を設定できるようにしました
    • WebSocket シグナリングの server trust challenge で、指定した CA 証明書を用いた検証を行うようにしました
    • 不正な PEM 文字列を指定した場合は、接続開始前に configurationError を返すようにしました
    • ATS( App Transport Security )および iOS のルートストアによる接続制約は、引き続き利用アプリ側で考慮が必要です
  • [ADD] TURN-TLS でユーザー指定の CA 証明書を検証できるようにしました
    • Configuration.caCertificate に指定した CA 証明書を TURN-TLS の信頼アンカーとして利用できるようにしました
    • サーバーからは中間証明書を含む完全な証明書チェーンが送出されている必要があります
  • [ADD] シグナリングパラメーターに H.265 映像コーデックパラメーターを追加しました
  • [ADD] シグナリング時の offer メッセージの encodings に含まれる networkPriority を RTCRtpEncodingParameters に反映するようにしました
    • Sora 2026.1.0 以降で利用できます
    • Sora 側で指定されたネットワーク優先度を送信側エンコーディングへ反映します
  • [ADD] 接続設定に音声入力処理のバイパスを指定できる Configuration.bypassVoiceProcessing を追加しました
  • [ADD] MediaChannelHandlers にシグナリングメッセージを JSON 文字列として取得する onReceiveSignalingJSON を追加しました
  • [ADD] 音声ルート変更を検知するイベントハンドラを追加しました
  • [ADD] iOS 端末のアプリ画面をキャプチャして配信するスクリーンキャスト機能を追加しました
  • [FIX] Sora.setAudioMode(.default) で入力経路のオーバーライドが正しくリセットされない問題を修正しました
    • 入力経路を .speaker へオーバーライドした後でも、 .default 指定で経路を戻せるようにしました

2026.1.0

日付:

2026-02-20

対応 Sora:

2025.2.0 以降

対応 iOS:

14.0 以降

対応 libwebrtc:

m144(7559)

ハイライト

  • 音声と映像のミュート機能を追加しました
  • 音声データを音声トラックごとにコールバックで受け取るためのインターフェースである RTCAudioTrackSink を追加しました
  • RPC 機能に対応しました
  • MediaChannel に libwebrtc の統計情報を取得する getStats メソッドを追加しました

非推奨情報

  • Configuration.simulcastRid を非推奨にしました
    • 2027 年 12 月リリースの Sora にて、シグナリング接続時の simulcast_rid が廃止予定であるため非推奨にしました
    • 移行先は Configuration.simulcastRequestRid です

変更履歴

  • [UPDATE] WebRTC m144.7559.2.2 に上げました
  • [UPDATE] PeerChannel.initializeAudioInput での音声入力初期化時にマイク入力をミュートするか設定できるようにしました
  • [UPDATE] VideoHardMuteActor での映像ハードミュート解除時に、カメラキャプチャ未起動なら開始するようにしました
  • [UPDATE] Statistics と StatisticsEntry を API リファレンスに公開しました
  • [UPDATE] Configuration.simulcastRid を非推奨にしました
    • 移行先は Configuration.simulcastRequestRid です
  • [ADD] Configuration に接続確立時のマイク入力を有効にするか設定できる initialMicrophoneEnabled を追加しました
    • 接続時に音声ハードミュートを行うために利用できます
  • [ADD] Configuration に接続確立時にカメラ初期化を行わない設定 initialCameraEnabled を追加しました
    • 接続時に映像ハードミュートを行うために利用できます
  • [ADD] MediaChannel に音声ハードミュートを有効化/無効化するメソッド setAudioHardMute を追加しました
  • [ADD] MediaChannel に音声ソフトミュートを有効化/無効化するメソッド setAudioSoftMute を追加しました
  • [ADD] MediaChannel に映像ハードミュートを有効化/無効化するメソッド setVideoHardMute を追加しました
  • [ADD] MediaChannel に映像ソフトミュートを有効化/無効化するメソッド setVideoSoftMute を追加しました
  • [ADD] MediaChannel に libwebrtc の統計情報を取得する getStats メソッドを追加しました
  • [ADD] RTCAudioTrack から音声データを受け取るためのコールバックプロトコル RTCAudioTrackSink を追加しました
  • [ADD] MediaStream に RTCAudioTrackSink を RTCAudioTrack と関連付ける / 関連付けを解除するためのメソッドを追加しました
    • 関連付けるためのメソッド: addAudioTrackSink(_ sink: RTCAudioTrackSink)
    • 関連付けを解除するためのメソッド: removeAudioTrackSink(_ sink: RTCAudioTrackSink)
  • [ADD] シグナリング接続時に視聴するストリームの rid を指定する Configuration.simulcastRequestRid: SimulcastRequestRid を追加しました
    • rid を指定できる値の列挙型として SimulcastRequestRid を追加しました
    • デフォルト値の unspecified の場合は、シグナリングパラメーターに simulcast_request_rid を含めません
    • この設定は role が sendrecv または recvonly の場合、かつ simulcast が true の場合にのみ有効です
  • [ADD] サイマルキャストの rid を表す汎用型 Rid 列挙型を追加しました
  • [ADD] RPC 機能を追加しました
    • SignalingOffer に rpcMethods: [String]? を追加しました
    • MediaChannel に rpc メソッドを追加しました
    • RPC メソッドを定義するための RPCMethodProtocol プロトコルを追加しました
    • RPCMethodProtocol に準拠した以下の型を追加しました
      • RequestSimulcastRid
      • RequestSpotlightRid
      • ResetSpotlightRid
      • PutSignalingNotifyMetadata
      • PutSignalingNotifyMetadataItem
    • RPC エラー応答の詳細を表す RPCErrorDetail 構造体を追加しました
    • RPC 成功応答を表す RPCResponse<Result> ジェネリック構造体を追加しました
    • SoraError に RPC 関連のエラーケースを追加しました

2025.2.0

日付:

2025-09-18

対応 Sora:

2025.1.0 以降

対応 iOS:

14.0 以降

対応 libwebrtc:

m138(7204)

ハイライト

  • MediaChannelHandlers に onDisconnect: ((SoraCloseEvent) -> Void)? を追加しました
    • onDisconnect: ((Error?) -> Void)? は onDisconnectLegacy という名前に変更され、非推奨になりました
    • 既存の onDisconnect: ((Error?) -> Void)? では異常発生時のエラーは取得できても、正常に終了した際の理由などを取得することができませんでした
    • onDisconnect: ((SoraCloseEvent) -> Void)? を利用することで、正常に終了した際のステータスコードと理由も取得できるようになります
    • onDisconnect: ((Error?) -> Void)? からの移行については onDisconnect: ((Error?) -> Void)? から onDisconnect: ((SoraCloseEvent) -> Void)? への移行 をご確認ください

破壊的変更

非推奨情報

  • Configuration.multistreamEnabled を非推奨にしました
    • Sora 2025.1.0 でレガシーストリームが廃止されたため、この項目を非推奨にしました
    • 合わせて Configuration のイニシャライザの multistreamEnabled をオプション引数にし、デフォルト値を nil に変更しました
    • 2027 年中に削除予定です

変更履歴

  • [CHANGE] CocoaPods でのライブラリ提供を廃止しました
  • [CHANGE] connect メッセージの multistream を自動で true に設定する仕様を廃止しました
    • Configuration.role に .sendrecv を指定している場合に multistream を true に設定する仕様を廃止しました
    • Configuration.spotlightEnabled に .enabled を指定している場合に multistream を true に設定する仕様を廃止しました
    • Sora iOS SDK 2025.2.0 からは、connect メッセージには Configuration.multistreamEnabled に指定した値がそのまま設定されます
    • 今後は Configuration.role に .sendrecv を指定している場合または Configuration.spotlightEnabled に .enabled を指定している場合に Configuration.multistreamEnabled に false を指定すると接続エラーになります
  • [CHANGE] MediaChannelHandlers の onDisconnect: ((Error?) -> Void)? を onDisconnectLegacy という名前に変更し、非推奨にしました
  • [UPDATE] WebRTC m138.7204.0.3 に上げました
  • [UPDATE] Configuration.multistreamEnabled を非推奨にしました
    • Configuration のイニシャライザの multistreamEnabled をオプション引数にし、デフォルト値を nil に変更しました
    • Sora のデフォルト挙動に合わせる場合は、 Configuration のイニシャライザで mutlistreamEnabled を指定しないようにしてください
  • [UPDATE] Sora との接続が終了したときの状態を表す SoraCloseEvent (enum) を追加しました
  • [UPDATE] MediaChannelHandlers に onDisconnect: ((SoraCloseEvent) -> Void)? を追加しました
  • [ADD] サイマルキャストの映像のエンコーディングパラメーター scaleResolutionDownTo を追加しました
  • [ADD] Sora から DataChannel シグナリングを切断する際に "type": "close" メッセージを受信する機能を追加しました
    • DataChannel シグナリングが有効、かつ ignore_disconnect_websocket が true、かつ Sora の設定で data_channel_signaling_close_message が有効な場合に受信することができます
  • [FIX] Sora から切断された場合の切断処理を修正し適切なエラーを MediaChannelHandlers.onDisconnect で受け取ることができるようになりました
    • Sora iOS SDK 2025.1.1 までは Sora から Close Frame を受け取ったり、ネットワークエラーが起きたりしても、WebSocket メッセージ受信失敗に起因する SoraError.webSocketError しか受信できませんでしたが、以下の内容を受信できるようになりました
      • Sora から Close Frame を受け取った場合のステータスコードと理由
        • ステータスコードが 1000 で正常に切断された場合も MediaChannelHandlers.onDisconnect で通知されます
      • ネットワークエラーや Sora がダウンした場合のエラー内容
    • いままでは WebSocket メッセージ受信失敗時のエラーである The operation couldn’t be completed. Socket is not connected というエラーしか返せていなかった状態が改善されました
    • この変更によって MediaChannelHandlers.onDisconnect で受信するメッセージの内容は変わりますが、コールバックが発火するタイミングに変更はありません

2025.1.3

日付:

2025-07-28

対応 Sora:

2024.2.0 以降

対応 iOS:

14.0 以降

対応 libwebrtc:

m132(6834)

  • [FIX] Sora の設定が、DataChannel 経由のシグナリングの設定、かつ、WebSocket の切断を Sora への接続が切断したと判断しない設定の場合に、SDP 再交換に失敗することがある問題を修正しました
    • WebSocket 経由から DataChannel 経由へのシグナリング切替時に type: switched と type: re-offer をほぼ同時に受信した際、type: re-answer を WebSocket 経由で送信する前に WebSocket を切断してしまい type: re-answer の送信に失敗することがあるためです
    • DataChannel 経由へのシグナリング切替後でも、まだ WebSocket 経由で送信中のメッセージが存在する可能性を考慮し、余裕を持って切断するために 10 秒の待機時間を設けるようにしました

2025.1.2

日付:

2025-05-07

対応 Sora:

2024.2.0 以降

対応 iOS:

14.0 以降

対応 libwebrtc:

m132(6834)

  • [FIX] マルチストリーム利用時に SDP 再ハンドシェイク中に SDK が終了処理をした際に EXC_BAD_ACCESS (不正なメモリアクセス) によりクラッシュする問題を修正しました

2025.1.1

日付:

2025-01-23

対応 Sora:

2024.2.0 以降

対応 iOS:

14.0 以降

対応 libwebrtc:

m132(6834)

  • [FIX] WebRTC m132.6834.5.2 にアップデートしました
    • Apple 非公開 API を利用していたため、App Store Connect へのアップロードに失敗する問題に対応しました

2025.1.0

日付:

2025-01-21

対応 Sora:

2024.2.0 以降

対応 iOS:

14.0 以降

対応 libwebrtc:

m132(6834)

  • [UPDATE] WebRTC m132.6834.5.1 にアップデートしました
  • [UPDATE] システム条件を変更しました
    • IPHONEOS_DEPLOYMENT_TARGET を 14.0 に変更
    • SwiftPM の platforms の設定を v14 に変更
    • CocoaPods の platform の設定を 14.0 に変更
  • [UPDATE] SignalingOffer に以下の項目を追加しました
    • version
    • simulcastMulticodec
    • spotlight
    • channelId
    • sessionId
    • audio
    • audioCodecType
    • audioBitRate
    • video
    • videoCodecType
    • videoBitRate
  • [UPDATE] SignalingNotify に以下の項目を追加しました
    • timestamp
    • spotlightNumber
    • failedConnectionId
    • currentState
    • previousState
  • [ADD] ForwardingFilter に name と priority を追加しました
  • [ADD] シグナリング connect 時にリスト形式の転送フィルターを設定するための項目を追加しました
    • Configuration と SignalingConnect に forwardingFilters を追加しました

2024.3.0

日付:

2024-09-06

対応 Sora:

2024.1.0 以降

対応 iOS:

13.0 以降

対応 libwebrtc:

m127(6533)

  • [CHANGE] MediaChannelConfiguration を非推奨にしました
    • SDK 内部では利用していないため非推奨としています
    • 現在ご利用の方はこのクラス定義をご自分のプロジェクトにコピーしてご利用ください
  • [UPDATE] libwebrtc m127.6533.1.1 にアップデートしました
  • [UPDATE] SignalingOffer に simulcast: Bool? を追加しました
  • [UPDATE] システム条件を変更しました
    • macOS 14.6.1 以降
    • Xcode 15.4
    • WebRTC SFU Sora 2024.1.0 以降
  • [FIX] SignalingConnect の metadata, signaling_notify_metadata が未設定 (nil) の場合に {} として送信されてしまう問題を修正しました
    • 未設定の場合は項目が含まれて送信されないように修正しました
    • この修正により、Configuration.signalingConnectMetadata の値が未指定の場合は Sora の認証ウェブフックに metadata, authn_metadata の項目が送信されなくなります
    • この修正により、Configuration.signalingConnectNotifyMetadata の値が未指定の場合は Sora のイベントウェブフックに metadata の項目が送信されなくなります
    • 修正前の動作を維持して {} を送信したい場合は、 Configuration.signalingConnectMetadata および Configuration.signalingConnectNotifyMetadata に中身が空の Encodable プロトコルに準拠したオブジェクトを指定してください
    • 例) configuration.signalingConnectMetadata = [String: String]()
  • [FIX] 認証ウェブフック成功時に払い出された simulcast の値が反映されない不具合に対応しました
  • [FIX] スポットライト機能が有効の条件で WrapperVideoEncoderFactory のサイマルキャスト機能が有効になる不具合を修正しました
    • 利用上に不具合はありませんが、意図しないエンコーダーの設定になっていたため修正しました
  • [FIX] TURN URI に IPv6 アドレスが設定されている場合に接続ができない不具合を修正しました
    • TURN URI 文字列に対して、内部処理で意図しないエスケープ処理が行われていた問題を修正しました

2024.2.0

日付:

2024-04-23

対応 Sora:

2023.2.0 以降

対応 iOS:

13.0 以降

対応 libwebrtc:

m122(6261)

  • [CHANGE] シグナリング connect メッセージの libwebrtc に含まれるバージョン文字列を変更しました
    • Android とフォーマットを統一しました
    • "Shiguredo-build M122 (M122.1.0 6b419a0)" から "Shiguredo-build M122 (122.6261.1.0 6b419a0)" に変更されます
  • [UPDATE] libwebrtc を m122.6261.1.0 に更新しました
    • libwebrtc の AV1 デコード機能の脆弱性対応が含まれています
  • [UPDATE] システム条件を変更しました
    • macOS 14.4.1 以降
    • Xcode 15.3
    • Swift 5.10

2024.1.0

日付:

2024-02-26

対応 Sora:

2023.2.0 以降

対応 iOS:

13.0 以降

対応 libwebrtc:

m121(6167)

  • [CHANGE] Sora 2022.1.0 にて metadata_list が廃止されたのに伴い、 SignalingNotify の metadataList を削除しました
    • 代わりに SignalingNotify の data で値を取得できます
  • [CHANGE] VideoView のバックエンドを RTCEAGLVideoView から RTCMTLVideoView に変更しました
    • libwebrtc のアップデートに伴い RTCEAGLVideoView が deprecated になったことに伴う修正です
  • [UPDATE] システム条件を変更しました
    • macOS 14.3.1 以降
    • WebRTC SFU Sora 2023.2.0 以降
    • CocoaPods 1.15.2 以降
    • Xcode 15.2
    • Swift 5.9.2
  • [UPDATE] CameraVideoCapturer のログを出力するようにしました
  • [UPDATE] libwebrtc のバージョンを 121.6167.4.0 に更新しました
    • HEVC (H.265) 対応パッチを含んだバージョンです
  • [UPDATE] 解像度に qHD (960x540) を追加しました
  • [UPDATE] CocoaPods を v1.15.2 に更新しました
  • [UPDATE] Sora 2023.2.0 で対応した ForwardingFilter の version と metadata を追加しました
  • [ADD] VideoCodec にハードウェアアクセラレーターを利用した HEVC(H.265) の映像を送受信できるようにするコーデック指定 H265 を追加しました
  • [ADD] リソースの逼迫により、送信する映像の品質が維持できない場合に、解像度やフレームレートのどちらを維持するかを指定できる設定 degradationPreference を WebRTCConfiguration に追加しました
  • [FIX] ForwardingFilter の action を未指定にできるように修正しました
  • [FIX] SignalingNotify に項目を追加しました
    • sessionId
    • kind
    • destinationConnectionId
    • sourceConnectionId
    • recvConnectionId
    • sendConnectionId
    • streamId

2023.3.1

日付:

2023-10-24

対応 Sora:

2023.1.0

対応 iOS:

13.0 以降

対応 libwebrtc:

m116(5845)

  • [FIX] AVCaptureDevice.Format の選択時にフレームレートを考慮するように修正しました
    • フレームレートに 60 を設定しても、 AVFrameRateRange が 1-30 の AVCaptureDevice.Format が選択されてしまうケースがあったため修正しました
    • 修正前は、カメラから同じ解像度の AVCaptureDevice.Format が複数取得された場合、最初に解像度が一致した AVCaptureDevice.Format を選択しており、フレームレートが考慮されていなかったことが原因です

2023.3.0

日付:

2023-09-13

対応 Sora:

2023.1.0

対応 iOS:

13.0 以降

対応 libwebrtc:

m116(5845)

  • [CHANGE] @available(*, unavailable) アトリビュートの項目を削除しました
    • Swift 5.9 以降 @available(*, unavailable) アトリビュートが禁止されたことによる対応です
    • 削除した項目を利用していた場合ビルドエラーが発生するため 利用不可項目の削除について を参照して対応をお願いします
  • [CHANGE] @available(*, deprecated, ... ) としていた非推奨項目を削除する
    • 非推奨であった項目について削除に移行しました
    • 削除した項目を利用していた場合ビルドエラーが発生するため 利用不可項目の削除について を参照して対応をお願いします
  • [CHANGE] PeerChannel.swift と SignalingChannel.swift の onConnectHandler を onConnect に置き換えました
    • 既に他のファイルでは名称変更を行なっていたがこのファイルのみ変更が行われていなかったため対応する
  • [UPDATE] WebRTC 116.5845.6.1 に対応しました
  • [FIX] MediaChannel の connectionCount, publisherCount, subscriberCount に値が設定されない不具合を修正しました
    • Sora のシグナリングメッセージ、 channel_upstream_connections, channel_downstream_connections が廃止された契機で値が設定されなくなっていました
    • Sora のシグナリングメッセージ、channel_sendrecv_connections, channel_sendonly_connections, channel_recvonly_connections, channel_connections を元に値を設定するよう修正

2023.2.0

日付:

2023-08-01

対応 Sora:

2023.1.0

対応 iOS:

13.0 以降

対応 libwebrtc:

m115(5790)

  • [UPDATE] WebRTC 115.5790.7.0 に対応しました
  • [UPDATE] システム条件を変更しました
    • macOS 13.4.1 以降
    • WebRTC SFU Sora 2023.1.0 以降
    • Xcode 14.3.1
    • Swift 5.8.1
    • CocoaPods 1.12.1 以降
  • [ADD] サイマルキャストを VP9 / AV1 で利用できるようにしました
  • [ADD] 接続時に転送フィルターを指定できるようにしました
  • [ADD] 接続時に映像コーデックパラメーターを指定できるようにしました

2023.1.0

日付:

2023-04-07

対応 Sora:

2022.2.0

対応 iOS:

13.0 以降

対応 libwebrtc:

m112(5615)

  • [UPDATE] WebRTC 112.5615.1.0 に対応しました
  • [UPDATE] システム条件を変更しました
    • macOS 13.3 以降
    • Xcode 14.3
    • Swift 5.8
    • WebRTC SFU Sora 2022.2.0 以降
  • [UPDATE] CameraSettings の Resolution に uhd2160p, uhd3024p を追加しました
  • [ADD] Configuration に audioStreamingLanguageCode を追加しました
  • [FIX] m107.5304.4.1 利用時、シグナリング時に EXEC_BAD_ACCESS が発生する事象を修正しました
    • RTCPeerConnection.offer() に渡すブロック内で RTCPeerConnection.close() を呼んでいるのが原因だと思われるため、 async/await を使って offer() の終了を待ってから close() するよう修正しました
    • RTCPeerConnection.offer() の実行が非同期で行われるようになりましたが、 NativePeerChannelFactory.createClientOfferSDP() の用途では問題はありません