# リリースノート

**CHANGE**
: 後方互換性のない変更

**UPDATE**
: 後方互換性がある変更

**ADD**
: 後方互換性がある追加

**FIX**
: バグ修正

## 2026.1.0

**日付**: 2026-02-20
**対応 Sora**: 2025.2.0 以降
**対応 iOS**: 14.0 以降
**対応 libwebrtc**: m144.7559.2.2

### ハイライト

- 音声と映像のミュート機能を追加しました- 詳細は [ミュート機能](mute.html) をご確認ください
- 音声データを音声トラックごとにコールバックで受け取るためのインターフェースである `RTCAudioTrackSink` を追加しました- 詳細は [受信した音声データを取得する](audio.html#58a2cd) をご確認ください
- RPC 機能に対応しました- 詳細は [RPC 機能](rpc.html) をご確認ください
- `MediaChannel` に libwebrtc の統計情報を取得する `getStats` メソッドを追加しました- 詳細は [統計情報](get_stats.html) をご確認ください

### 非推奨情報

- `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.0.3

### ハイライト

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

### 破壊的変更

- CocoaPods でのライブラリ提供を廃止しました
- シグナリング type: connect メッセージの `multistream` を自動で true に設定する仕様を廃止しました- 詳細は [シグナリング の "type": "connect" メッセージの multistream を自動で true に設定する仕様を廃止](2025_1_to_2025_2.html#2b82a8) をご確認ください
- `MediaChannelHandlers` の `onDisconnect: ((Error?) -> Void)?` を `onDisconnectLegacy` という名前に変更し、非推奨にしました- `onDisconnect: ((SoraCloseEvent) -> Void)?` への移行を推奨します
  - `onDisconnectLegacy: ((Error?) -> Void)?` は2027 年中に削除予定です
  - 移行については [onDisconnect: ((Error?) -> Void)? から onDisconnect: ((SoraCloseEvent) -> Void)? への移行](2025_1_to_2025_2.html#3b0597) をご確認ください

### 非推奨情報

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

### 変更履歴

- [CHANGE] CocoaPods でのライブラリ提供を廃止しました- 詳細は [CocoaPods での提供終了について](index.html#635165) をご確認ください
- [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)?` を追加しました- `onDisconnect: ((Error?) -> Void)?` からの移行については [onDisconnect: ((Error?) -> Void)? から onDisconnect: ((SoraCloseEvent) -> Void)? への移行](2025_1_to_2025_2.html#3b0597) をご確認ください
- [ADD] サイマルキャストの映像のエンコーディングパラメーター `scaleResolutionDownTo` を追加しました- scaleResolutionDownTo の詳細については Sora のドキュメントの [サイマルキャスト機能](https://sora-doc.shiguredo.jp/SIMULCAST) をご確認ください
- [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.5.2

- [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.5.2

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

## 2025.1.1

**日付**: 2025-01-23
**対応 Sora**: 2024.2.0 以降
**対応 iOS**: 14.0 以降
**対応 libwebrtc**: m132.6834.5.2

- [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.5.1

- [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.1.1

- [CHANGE] `MediaChannelConfiguration` を非推奨にしました- SDK 内部では利用していないため非推奨としています
  - 現在ご利用の方はこのクラス定義をご自分のプロジェクトにコピーしてご利用ください
- [UPDATE] libwebrtc `m127.6533.1.1` にアップデートしました
- [UPDATE] [SignalingOffer](_static/api/docs/Structs/SignalingOffer.html) に `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.1.0

- [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.4.0

- [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` に追加しました- 詳細については [CPU やネットワーク帯域等逼迫時における映像品質優先項目の設定](signaling.html#1b993e) をご確認ください
- [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.6.1

- [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.6.1

- [CHANGE] `@available(*, unavailable)` アトリビュートの項目を削除しました- Swift 5.9 以降 `@available(*, unavailable)` アトリビュートが禁止されたことによる対応です
  - 削除した項目を利用していた場合ビルドエラーが発生するため [利用不可項目の削除について](2023_2_to_2023_3.html#a0a8bc) を参照して対応をお願いします
- [CHANGE] `@available(*, deprecated, ... )` としていた非推奨項目を削除する- 非推奨であった項目について削除に移行しました
  - 削除した項目を利用していた場合ビルドエラーが発生するため [利用不可項目の削除について](2023_2_to_2023_3.html#a0a8bc) を参照して対応をお願いします
- [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.7.0

- [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] 接続時に転送フィルターを指定できるようにしました- `Configuration` に `forwardingFilter` を追加しました
  - 詳細は [転送フィルターの設定](signaling.html#c0d4ce) をご確認ください
- [ADD] 接続時に映像コーデックパラメーターを指定できるようにしました- `Configuration` に `videoVp9Params`, `videoAv1Params`, `videoH264Params` を追加しました
  - 詳細は [映像コーデックパラメーターの設定](signaling.html#bb41fd) をご確認ください

## 2023.1.0

**日付**: 2023-04-07
**対応 Sora**: 2022.2.0
**対応 iOS**: 13.0 以降
**対応 libwebrtc**: m112.5615.1.0

- [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()` の用途では問題はありません
