# リリースノート

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

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

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

**FIX**
: バグ修正



## 2024.2.3

**バグフィックスアップデート**

**リリース**: 2025 年 5 月 19 日

### 変更履歴

- [ADD] 録画機能利用時に Safari 18.4 から Safari 18.5 で H.264/H.265 を利用している場合に発生するタイムスタンプの不具合に対するワークアラウンド機能を追加しました- デフォルトでは未指定です
  - 指定する場合は `sora.conf` に `workaround_20250515 = 18.4,18.4.1,18.5` のように、ワークアラウンドに対応させる Safari のバージョンを `,` で区切って指定してください
  - iOS 版 Chrome でもワークアラウンドが有効になります
  - 詳細は [Safari タイムスタンプバグに対するワークアラウンド](WORKAROUND.html#e73b7a) をご確認ください。
- [FIX] 録画機能で Chrome 136 で特定のハードウェアエンコーダーと組み合わせた際、 H.265 の録画が正常に行えない問題を修正しました


## 2024.2.2

**バグフィックスアップデート**

**リリース**: 2025 年 4 月 9 日

### 変更履歴

- [FIX] 依存している OpenSSL を 3.4.1 にアップデートしました
- [FIX] ウェブフック機能、音声ストリーミング機能、統計エクスポーター機能で HTTPS を利用する際、証明書の鍵の使用法と拡張された鍵の使用法の互換性チェックが間違っていたため、サポートされていないサーバー証明書と判断して接続に失敗する場合がある問題を修正しました- これは Sora が利用している PKI ライブラリのバグにより発生していた問題で、ライブラリをアップデートすることで解消しました


## 2024.2.1

**バグフィックスアップデート**

**リリース**: 2025 年 1 月 8 日

### 変更履歴

- [FIX] AV1 コーデック利用時、主にハードウェアエンコーダーなど、 `libwebrtc` が採用している `libaom` 以外のエンコーダーを利用するとキーフレーム判定が失敗する場合がある問題を修正しました
- [FIX] クラスター構成で Sora 2024.1.x からのローリングアップデート中、録画が開始できない場合がある問題を修正しました
- [FIX] クラスター構成で Sora 2024.1.x からのローリングアップデート中、録画を開始すると `recording.report` ウェブフックが送信されない場合がある問題を修正しました


## 2024.2.0

**メジャーアップデート**

**リリース**: 2024 年 12 月 18 日

> **重要**
>
> Sora 2024.1.x から 2024.2.x への移行については [2024.1.x から 2024.2.x への移行](2024_1_TO_2024_2.html) をご確認ください。

### ハイライト

- 録画アーカイブファイルの MP4 形式による出力に対応しました
- 録画アーカイブファイルの H.265 コーデックによる出力に対応しました
- リアルタイムメッセージング機能で、メッセージのヘッダーに送信元の connection_id を付与する機能を追加しました
- 実験的機能として、転送フィルター機能で複数のフィルターを設定できる「マルチ転送フィルター機能」を追加しました
- 実験的機能として、 [session.created](SESSION_WEBHOOK.html#1d1984) の払い出しに、セッションの同時接続数を制限する [trial_max_connections](SESSION_WEBHOOK.html#48346d) を追加しました
- 指定したコネクションにキーフレームを要求する [RequestKeyFrame](API_CONNECTION.html#716b40) API を追加しました

### 正式版

今回のリリースで以下の機能が実験的機能から正式版になりました。

- [クラスター機能](CLUSTER.html)
- [センシティブデータ](SENSITIVE_DATA.html)
- [OBS (WHIP) 対応](WHIP.html)
- [メディア配信ワーカー機能](MEDIA_PUBLISH_WORKER.html)
- [セッションライフタイム機能](SESSION_WEBHOOK.html#36a751)
- [コネクションライフタイム機能](AUTH_WEBHOOK_RETURN.html#8b77ca)
- [TerminateSession](API_SESSION.html#ba022b) API

### 破壊的変更

- 既存のセッションの同時接続数が `0` の際に、このセッションと異なる `multistream` または `spotlight` 設定の新規接続が来た場合、エラーになるように変更しました- 詳細は [既存のセッションの同時接続数が 0 の際に、このセッションと異なる multistream または spotlight 設定の新規接続が来た場合の挙動の変更](2024_1_TO_2024_2.html#964549) をご確認ください
- クライアントに通知されるエラーメッセージを改善しました- 詳細は [シグナリングエラー時のエラーメッセージの改善](2024_1_TO_2024_2.html#7eb150) をご確認ください
- 転送フィルターの認証成功時の払い出しエラーが発生した場合、接続が失敗するようになりました
- 転送フィルターのセッション生成時の払い出しエラーが発生した場合、セッションが破棄されるようになりました- [session_created_response_validate_warning_as_error](SORA_CONF.html#9df65e) が `false` の場合でもエラーとなりセッションを破棄します
- 統計情報に含まれる `total_received_intra_frame` を `total_received_key_frame` に変更しました
- JSON Lines 形式のログ出力に対してエスケープ処理を行わないようにしました

### 廃止情報

- [JoinCluster](OBSOLETE_API.html#17f3f5) API を廃止しました- 今後は同じ機能を持つ [RegisterClusterNode](API_CLUSTER.html#09ed96) API をご利用ください
- E2EE 機能を廃止しました- 将来的に Message Layer Security (MLS) を利用した E2EE 機能を提供予定です
  - ウェブフックに含まれる `e2ee` 項目は予約項目として常に `false` が含まれます
  - `sora.conf` から `e2ee` 項目を廃止しました
- `sora.conf` の移行用の設定 `legacy_auth_webhook_log` 設定を廃止しました
- `sora.conf` の移行用の設定 `legacy_event_webhook_connection_destroyed_reason` 設定を廃止しました

### 非推奨情報

- 転送フィルターを認証成功時やセッション生成時の払い出しで指定できる `forwarding_filter` を非推奨にしました- `forwarding_filter` は 2025 年 12 月リリース予定の Sora で廃止します
  - 代わりに複数の転送フィルターを指定できる `forwarding_filters` をご利用ください
- シグナリング接続時に転送フィルターを指定できる [signaling_forwarding_filter](SORA_CONF.html#d15a40) を非推奨にしました- [signaling_forwarding_filter](SORA_CONF.html#d15a40) は 2025 年 12 月リリース予定の Sora で廃止します
  - 代わりに複数の転送フィルターを指定できる [signaling_forwarding_filters](SORA_CONF.html#bf0e30) をご利用ください
- [session.vanished](MODE.html#9f1b17) を非推奨にしました- [session.vanished](MODE.html#9f1b17) は 2025 年 6 月リリース予定の Sora にて廃止します
  - 代わりに [GetStatsReport](EXPERIMENTAL_API_STATS.html#bbbfca) API の `total_ongoing_connections` をご利用ください。
  - 値の監視については [Sora Exporter](SORA_EXPORTER.html) の利用をお勧めします
- [RTP ストリーム停止/再開 API](EXPERIMENTAL_API_RTP_STREAM_PAUSE_RESUME.html) を非推奨にしました- [RTP ストリーム停止/再開 API](EXPERIMENTAL_API_RTP_STREAM_PAUSE_RESUME.html) は 2025 年 12 月リリース予定の Sora にて廃止します
  - 代わりに [転送フィルター](FORWARDING_FILTER.html) をご利用ください

### 変更履歴

- [CHANGE] JSON Lines 形式のログ出力に対してエスケープ処理を行わないようにしました
- [CHANGE] 統計情報に含まれる `total_received_intra_frame` を `total_received_key_frame` に変更しました- [RequestKeyFrame](API_CONNECTION.html#716b40) API に合わせた変更になります
- [CHANGE] `spotlight.focused` と `spotlight.unfocused` イベントウェブフックの送信を行わない場合はログを書き込まないよう変更しました
- [CHANGE] ウェブフックを送信を行わない (ignore) の設定した場合でも以下のウェブフックはログを出力するように変更しました- `recording.started` セッションウェブフック
  - `session.updated` セッションウェブフック
  - `session.vanished` セッションウェブフック
  - `connection.failed` イベントウェブフック- [legacy_signaling_error](SORA_CONF.html#88aa33) が `true` かつ [ignore_connection_failed_webhook](SORA_CONF.html#45096a) が `true` の場合、ログを出力しません
  - `archive.started` イベントウェブフック
  - `recording.started` イベントウェブフック
- [CHANGE] `E2EE` 機能を廃止しました- `sora.conf` の `e2ee` を廃止しました
  - ウェブフックに含まれる `e2ee` は常に `false` が含まれます
- [ADD] [copy_websocket_signaling_header_names](SORA_CONF.html#db39f3) で指定した WebSocket シグナリングの HTTP ヘッダーを `rtc_stats.jsonl` と `connection.jsonl` に `copy_headers` 項目で出力するようにしました
- [ADD] 特定環境向けに TURN 利用時に 5-TUPLE を無視する設定を追加しました- **この機能を利用する場合は事前にサポートまでご連絡ください**
  - `sora.conf` の [ignore_turn_five_tuple](SORA_CONF.html#14e2aa) を `true` に設定することで、送られてくるパケットの 5-TUPLE を無視するようになります
- [ADD] `"type": "offer"` メッセージに `audio` と `video` 関連項目を追加しました- `audio` は必ず含まれます
  - `audio_codec_type` はオプションで、 `audio` が `true` かつ `role` が `sendrecv` または `sendonly` の場合に含まれます
  - `audio_bit_rate` はオプションで、 `audio` が `true` かつ `role` が `sendrecv` または `sendonly` で `audio_bit_rate` が指定された場合に含まれます
  - `video` は必ず含まれます
  - `video_codec_type` はオプションで、 `video` が `true` かつ `role` が `sendrecv` または `sendonly` の場合に含まれます
  - `video_bit_rate` はオプションで、 `video` が `true` かつ `role` が `sendrecv` または `sendonly` の場合に含まれます
- [ADD] サイマルキャスト機能の設定項目に `scaleResolutionDownTo` を追加しました- `{"maxHeight": 1080, "maxWidth": 1920}` のように解像度を指定することができるようになります
  - この機能は Chrome/Edge 131 以降で利用できます
- [ADD] `connection.jsonl` に `simulcast_encodings` と `simulcast_codecs` 項目を追加しました- `simulcast` のみ `true` の場合は `simulcast_encodings` を出力します
  - `simulcast` と `simulcast_multicodec` が `true` の場合は `simulcast_codecs` も出力します
- [FIX] Safari や Chrome Canary で H.265 の配信ができない問題を修正しました
- [FIX] コネクションの切断が発生しない録画失敗のログレベルを `error` から `warning` に修正しました
- [FIX] 録画ファイル書き込みに失敗するとクラッシュログが出力されることがある問題を修正しました
- [FIX] サイマルキャスト機能利用時に `simulcast_encodings` に `active` を未指定だと接続が失敗する問題を修正しました
- [FIX] H.264 の RTP ペイロードヘッダーが不正な場合、サイレントディスカードするように修正しました

#### sora.conf

- [CHANGE] `sora.conf` の [legacy_recording](SORA_CONF.html#632f06) のデフォルトを `true` から `false` に変更しました
- [CHANGE] `sora.conf` の移行用の設定 `legacy_auth_webhook_log` 設定を廃止しました
- [CHANGE] `sora.conf` の移行用の設定 `legacy_event_webhook_connection_destroyed_reason` 設定を廃止しました
- [CHANGE] `sora.conf` の [default_h264_param_profile_level_id](SORA_CONF.html#1581db) のデフォルト値を `42e01f` から `42e02a` へ変更しました- Chrome / Edge がデフォルト値を変更した事への追従です
- [UPDATE] `sora.conf` の [connection_created_wait_timeout](SORA_CONF.html#0509af) の最小値を `1 s` から `0 s` へ変更しました- 挙動確認などで意図的にエラーを発生させられるように変更しました
- [FIX] ウェブフック送信時にボディを待つ時間に [webhook_response_timeout](SORA_CONF.html#e81d13) が反映されていない問題を修正しました
- [FIX] ウェブフック送信時に TCP コネクションの確立を待つ時間に [webhook_connect_timeout](SORA_CONF.html#7a0122) が反映されていない問題を修正しました

#### API

- [UPDATE] [ListConnections](API_SIGNALING.html#d3da2a) API の戻り値に `node_name` を追加しました
- [UPDATE] [ListChannelConnections](API_SIGNALING.html#d388f3) API の戻り値に `node_name` を追加しました
- [UPDATE] [GetStatsAllConnections](API_STATS.html#ef695a) API の戻り値に `session_id` を追加しました
- [UPDATE] [GetStatsConnection](API_STATS.html#e79b61) API の戻り値に `session_id` を追加しました
- [UPDATE] [GetStatsClient](API_STATS.html#ef69ae) API の戻り値に `session_id` を追加しました
- [ADD] 指定したクライアントにキーフレームを要求する [RequestKeyFrame](API_CONNECTION.html#716b40) API を追加しました- [レガシーストリーム](LEGACY_STREAM_TO_MULTISTREAM.html) では利用できません
- [FIX] [GetStatsReport](EXPERIMENTAL_API_STATS.html#bbbfca) API のウェブフック統計情報はウェブフックを送信したときのみカウントされるように修正しました
- [FIX] [GetStatsReport](EXPERIMENTAL_API_STATS.html#bbbfca) API のウェブフック統計情報が正しくカウントされない問題を修正しました- `total_ignored_session_webhook` が実際よりも少なくカウントされていた問題を修正しました
  - [audio-streaming.started](SESSION_WEBHOOK.html#e7b17a) と [audio-streaming.stopped](SESSION_WEBHOOK.html#13e583) のウェブフック統計情報が `total_ignored_XXX_webhook` と `total_successful_XXX_webhook` の両方がカウントされていた問題を修正しました

#### セッション単位での同時接続数制限機能

**これは実験的機能です**

認証ウェブフックでの接続制限はウェブフックが並列で送信されるため、厳密な同時接続制限ができませんでした。
この機能ではセッション単位での同時接続数を制限することで、厳密に同時接続制限ができるようになります。

この機能を利用することで認証に成功した場合でも、セッションに接続できない場合があります。
その場合は、クライアントには `SERVICE-UNAVAILABLE` が通知されます。

この機能は実験的機能のトライアル中です。
将来的にロール単位やクライアント ID 単位での接続制限機能などを加えていく予定です。

正式版と明確に区別するため `trial_` を prefix として付与しています。

- [ADD] [session.created](SESSION_WEBHOOK.html#1d1984) の払い出しにセッションの同時接続数を制限する [trial_max_connections](SESSION_WEBHOOK.html#48346d) を追加しました- デフォルトは未指定で制限がない状態です
  - 指定できる範囲は 0..10000 です
  - `trial_max_connections` が `0` の場合は誰も接続することができなくなります
  - セッションが同時接続数制限に達した場合はクライアントに `SERVICE-UNAVAILABLE` を通知します

#### 統計情報の追加

- [ADD] [GetStatsReport](EXPERIMENTAL_API_STATS.html#bbbfca) API に SRTP パケットの統計情報を追加しました- `total_received_srtp`- 受信した SRTP パケットの合計数
  - `total_received_srtp_byte_size`- 受信した SRTP パケットの合計バイト数
  - `total_sent_srtp`- 送信した SRTP パケットの合計数
  - `total_sent_srtp_byte_size`- 送信した SRTP パケットの合計バイト数
  - `total_decrypted_srtp`- 復号した SRTP パケットの合計数
  - `total_decrypted_srtp_byte_size`- 復号した SRTP パケットの合計バイト数
- [ADD] [GetStatsReport](EXPERIMENTAL_API_STATS.html#bbbfca) API に DataChannel で利用している SCTP パケットの統計情報を追加しました- `total_received_sctp`- DataChannel で受信した SCTP パケットの合計数
  - `total_received_sctp_byte_size`- DataChannel で受信した SCTP パケットの合計バイト数
  - `total_sent_sctp`- DataChannel で送信した SCTP パケットの合計数
  - `total_sent_sctp_byte_size`- DataChannel で送信した SCTP パケットの合計バイト数
- [ADD] [GetStatsReport](EXPERIMENTAL_API_STATS.html#bbbfca) API に無視されたウェブフックの統計情報を追加しました- `total_ignored_session_webhook`- 無視されたセッションウェブフックの合計数
  - `total_ignored_event_webhook`- 無視されたイベントウェブフックの合計数
  - `total_ignored_stats_webhook`- 無視された統計ウェブフックの合計数

#### Sora 側からのシグナリング切断時のクライアントへの通知改善

- [CHANGE] WebSocket シグナリング利用時にメッセージサイズが大きすぎる場合の `code` を `4490` から `1009` に変更しました- メッセージサイズの最大は 5 MiB です
  - WebSocket の仕様に合わせました
- [CHANGE] WebSocket シグナリング利用時に Sora 側からのクライアントへの通知を改善しました- 正常切断- `code` は `1000` です
    - `reason` には切断理由が含まれます- `TYPE-DISCONNECT`
      - `DISCONNECTED-API`
      - `LIFETIME-EXPIRED`
      - `SESSION-DESTROYED`
  - 異常切断- 異常が発生して Sora 側から切断した場合は `code` に `4490` が含まれます
    - `reason` には切断理由が含まれます
- [ADD] `sora.conf` に [data_channel_signaling_close_message](SORA_CONF.html#058a1e) を追加しました- デフォルトは `false` です
  - `true` の場合は Sora からコネクションを切断する際、 DataChannel シグナリングが有効かつ、`ignore_disconnect_websocket` が `true` な場合 `signaling` ラベルに `"type": "close"` メッセージを送信します
  - `false` の場合は今まで通り、 DataChannel を閉じます
  - `"type": "close"` メッセージには `code` と `reason` が含まれます
  - 正常切断- 切断 API や期限切れで Sora 側から切断した場合は `code` に `1000` が含まれます
    - `reason` には切断理由が含まれます- `LIFETIME-EXPIRED`
      - `SESSION-DESTROYED`
      - `DISCONNECTED-API`
  - 異常切断- 異常が発生して Sora 側から切断した場合は `code` に `4490` が含まれます
    - `reason` には切断理由が含まれます
- [ADD] `sora.conf` に [signaling_normal_close_reason](SORA_CONF.html#4486a4) を追加しました- デフォルトは `true` です
  - `false` を指定した場合、正常切断時の `reason` が空文字になります
  - `false` を指定した場合でも異常切断時は `reason` は含まれます

#### シグナリングエラーの改善

- [ADD] `sora.conf` にレガシーシグナリングエラーを有効にする設定を追加しました [legacy_signaling_error](SORA_CONF.html#88aa33) を追加しました- デフォルトは `false` です
  - **この設定は移行用で 2025 年 6 月に廃止します**
  - この設定は 2024.1.x までの Sora との後方互換性を維持するための機能です
  - `false` の場合は `log/connection_created_wait_timeout` にログが出力されなくなりました
  - `false` の場合は `log/signaling_error.jsonl` にシグナリングエラーログが出力されるようになりました
  - `false` の場合は `connection.failed` ウェブフックは **認証成功時** かつ **connection.created** が送信されていない場合のみ送信されるようになりました
  - `false` の場合は `sora.jsonl` に認証失敗ログが出力されなくなりました
  - `false` の場合は `sora.jsonl` にシグナリング失敗ログが出力されなくなりました
  - `true` の場合は今まで通り `ignore_connection_failed_webhook` が `true` の場合、 `event_webhook.jsonl` にシグナリングログが出力されません
- [CHANGE] クライアントに通知するエラーメッセージを変更しました- クライアントへ通知するエラーがあまりにもサーバーよりのメッセージが多く、混乱を招くため整理しました
  - Sora の内部的なエラーは `INTERNAL-ERROR` を通知するよう変更しました- 以下のメッセージはクライアントへは通知されなくなりました
    - `SIGNALING-INTERNAL-ERROR`
    - `AUTH-WEBHOOK-RESPONSE-EMPTY-BODY`
    - `AUTH-WEBHOOK-RESPONSE-UNEXPECTED-STATUS-CODE`
    - `INVALID-AUTHZ-MEDIA`
    - `WHEP-INCOMPATIBLE-UPSTREAM-TRACK`
    - `DUPLICATED-CONNECTION-ID-ERROR`
    - `INVALID-SPOTLIGHT-NUMBER`
    - `DUPLICATED-CHANNEL-ID`
    - `UNMATCH-CODEC-TYPE-ERROR`
  - Sora が一時的に利用できない場合は `SERVICE-UNAVAILABLE` を通知するように変更しました- 以下のメッセージはクライアントへは通知されなくなりました
    - `EXCEED-MAX-CONNECTIONS`
    - `BLOCK-NEW-CONNECTION`
    - `BLOCK-NEW-SESSION`
    - `INVALID-MODE`
  - Sora でタイムアウトが発生した場合は `TIMEOUT` を通知するように変更しました- 以下のメッセージはクライアントへは通知されなくなりました
    - `CONNECTION-CREATED-WAIT-TIMEOUT-ERROR`
    - `CONNECT-WAIT-TIMEOUT-ERROR`
    - `ANSWER-TIMEOUT-ERROR`
    - `PONG-TIMEOUT-ERROR`
  - シグナリングメッセージが不正な場合は `INVALID-MESSAGE` を通知するように変更しました- 以下のメッセージはクライアントへは通知されなくなりました
    - `INVALID-JSON`
    - `INVALID-SIGNALING-TYPE`
    - `INVALID-SIGNALING-PARAMS`
    - `MISSING-TYPE`
    - `BAD-FINGERPRINT`
    - `TOO-LARGE-JSON`
    - `TOO-MANY-CANDIDATE`
    - `INVALID-VIDEO-FORMAT`
    - `FAILURE-SDP-PARSE`
    - `MISSING-ICE-SDP`
    - `INVALID-VIDEO-FORMAT`
    - `INVALID-AUDIO-FORMAT`
    - `FAILURE-JSON-DECODE`
    - `UNEXPECTED-SIGNALING-TYPE`
    - `UNKNOWN-AUDIO-CODEC-TYPE`
    - `INVALID-AUDIO-BIT-RATE`
    - `UNKNOWN-VIDEO-CODEC-TYPE`
    - `INVALID-VIDEO-BIT-RATE`

#### 録画機能

- [CHANGE] 録画ファイル処理の開始に失敗した場合のログレベルを `ERROR` から `WARNING` に変更しました
- [ADD] イベントウェブフック `archive.*` と `split-archive.*` に項目を追加しました- `split_only`- 指定していない場合、値は `false` になります
  - `format`- `mp4` または `webm` が含まれます
  - `expire_time`- 指定していない場合は項目が含まれません
  - `expired_at`- 指定していない場合は項目が含まれません
  - `split_duration`- 指定していない場合は項目が含まれません
- [FIX] AV1 サイマルキャスト使用時に録画が正常に行われない問題を修正しました

#### MP4 録画機能

**これは実験的機能です**

MP4 形式での録画ファイル出力に対応しました。

- [ADD] MP4 形式での録画に対応しました- **MP4 録画機能はレガシー録画機能では利用できません**
  - OBS が提唱する Hybrid MP4 形式に対応しています
- [ADD] `sora.conf` に [default_recording_format](SORA_CONF.html#f9fa7d) を追加しました- デフォルトは `webm` です
  - `webm` と `mp4` が指定できます
  - MP4 録画機能はレガシー録画機能では利用できません
- [ADD] [StartRecording](API_RECORDING.html#c5b527) API に `format` (オプション) を追加しました- `format` には `webm` と `mp4` が指定できます
  - `format` が未指定の場合は [default_recording_format](SORA_CONF.html#f9fa7d) の値が利用されます
  - 映像コーデックが H.265 の場合 `format` に `mp4` を指定しない場合、録画が行われません
- [ADD] [session.created](SESSION_WEBHOOK.html#1d1984) の払い出しに `recording_format` を追加しました- `recording_format` には `webm` と `mp4` が指定できます
  - `recording_format` が未指定の場合は [default_recording_format](SORA_CONF.html#f9fa7d) の値が利用されます
  - 映像コーデックが H.265 の場合 `format` に `mp4` を指定しない場合、録画が行われません
- [ADD] [session.updated](SESSION_WEBHOOK.html#2a5b1b) の `recording` に `format` を追加しました- `"format": "webm"` または `"format": "mp4"` が含まれるようになりました
- [ADD] セッションウェブフック `recording.*` に `data.format` を追加しました- `"format": "webm"` または `"format": "mp4"` が含まれるようになりました
- [ADD] イベントウェブフック `archive.*` と `split-archive.*` に `data.format` を追加しました- `"format": "webm"` または `"format": "mp4"` が含まれるようになりました
- [ADD] `sora.conf` に録画機能(セッション単位) 利用時に MP4 形式を利用した場合、クライアントへ送るキーフレーム要求 (PLI) の間隔を指定できる [default_recording_mp4_pli_interval](SORA_CONF.html#874e5b) を追加しました- デフォルトは `20 s` です
  - 最小は `1 s` で、最大は `240 s` です
  - WebM 形式ではキーフレームの間隔が最大でも 31 秒までという制約がありましたが、 MP4 形式ではこの制約がなくなりました

#### H.265 録画機能

**これは実験的機能です**

H.265 コーデックでの録画機能に対応しました。

- [ADD] H.265 録画機能に対応しました- H.265 は `format` に `mp4` が設定されている場合のみ録画ができます
  - WebM 形式を設定した場合 H.265 の録画は行われません
  - H.265 録画機能はレガシー録画では利用できません

#### ICE コネクションステート変更のシグナリング通知

**これは実験的機能です**

ICE コネクションステートが変更した際、
同一チャネルに接続している自分を含むクライアント全員へ通知する仕組みを追加しました。

この機能を利用することで、
自分の ICE コネクションステートの変更を **同じセッションに参加している自分を含むクライアント全員** へシグナリング通知が送信されます。
また、接続時に **既にチャネルに参加しているクライアント全員の ICE コネクションステート** を取得できるようになります。

他のシグナリング通知機能とは異なり、この設定は有効にした場合、
自分を含むチャネル参加者全員へ通知を行いますので注意してください。

用途としては 4 人で双方向のビデオ通話をしている際、
特定のクライアントが不安定だという事を知ったり、
1:50 の片方配信の際に配信者の通信状態を視聴者側が知ったりすることができるようになります。

通知されるタイミングは 4 種類あります。

1. connected から checking になった時
2. checking から connected になった時
3. checking から disconnected になった時
4. disconnected から checking になった時

- [ADD] `sora_conf` に [signaling_notify_ice_connection_state](SORA_CONF.html#e65192) を追加しました- デフォルトは `false` です
  - `true` に設定すると ICE コネクションステートが変更された際に、同一チャネルに接続しているクライアントへシグナリング通知 `ice-connection-state.changes` を送信します
  - `true` にするとチャネル参加時のシグナリング通知 `connection.created` の既存参加者の `data` に `ice_connection_state` が含まれるようになります
- [ADD] 認証成功時の払い出しに `signaling_notify_ice_connection_state` を追加しました- デフォルトは [signaling_notify_ice_connection_state](SORA_CONF.html#e65192) の値が採用されます
  - `false` を払い出すことで自身の ICE コネクションステートの状態を他のチャネルに参加しているクライアントへシグナリング通知が送信されなくなります
- [ADD] ICE コネクションステートを強制的に変更し維持する [LockIceConnectionState](TEST_API.html#8b5622) テスト API を追加しました

#### 転送フィルター機能

- [CHANGE] 認証成功時の転送フィルターの払い出しがエラーになった場合、接続が失敗するように変更しました- `INTERNAL-ERROR` エラーとなります
- [CHANGE] セッション生成時の転送フィルターの払い出しがエラーになった場合、セッションを破棄するように変更しました- `INTERNAL-ERROR` エラーとなります
  - [session_created_response_validate_warning_as_error](SORA_CONF.html#9df65e) が `false` の場合でもエラーとなりセッションを破棄します

#### マルチ転送フィルター機能

**これは実験的機能です**

マルチ転送フィルター機能は 1 チャネルや 1 コネクションに対して 1 つしか指定できなかった転送フィルターを
名前と優先度を設定し、複数の転送フィルターを指定できるようにする機能です。

- [ADD] 認証成功時の払い出しに複数の転送フィルターを設定できる `forwarding_filters` を追加しました- 既存の `forwarding_filter` は 2025 年 12 月リリース予定の Sora にて廃止します
- [ADD] セッション生成時の払い出しに複数の転送フィルターを設定できる `forwarding_filters` を追加しました- `forwarding_filter` は 2025 年 12 月リリース予定の Sora にて廃止します
- [ADD] `sora.conf` にシグナリング時に複数の転送フィルターを設定できる `forwarding_filters` を設定できるようになる [signaling_forwarding_filters](SORA_CONF.html#bf0e30) を追加しました- [signaling_forwarding_filter](SORA_CONF.html#d15a40) は 2025 年 12 月リリースの Sora にて廃止します
- [ADD] 転送フィルター設定時に `name` と `priority` を指定できるようになりました
- [ADD] 転送フィルター API [ListForwardingFilters](API_FORWARDING_FILTER.html#a1dd75) にチャネルの転送フィルターをリストで表示する `channel_forwarding_filters` を追加しました- 既存の `channel_forwarding_filter` は 2025 年 12 月リリース予定の Sora にて廃止します
- [ADD] 転送フィルター API [CreateChannelForwardingFilter](API_FORWARDING_FILTER.html#fe98d1) と [CreateConnectionForwardingFilter](API_FORWARDING_FILTER.html#d80a51) に `name` と `priority` を追加しました
- [ADD] 転送フィルター API [UpdateChannelForwardingFilter](API_FORWARDING_FILTER.html#36fc45) と [UpdateConnectionForwardingFilter](API_FORWARDING_FILTER.html#23ed63) に `name` と `priority` を追加しました
- [ADD] 転送フィルター API [DeleteChannelForwardingFilter](API_FORWARDING_FILTER.html#9410fd) と [DeleteConnectionForwardingFilter](API_FORWARDING_FILTER.html#0d65da) に `name` を追加しました

詳細は [マルチ転送フィルター機能](MULTI_FORWARDING_FILTER.html) をご確認ください。

#### OBS WHIP

- [FIX] OBS WHIP で H.264 で一部のエンコーダーを利用した際、録画ファイルの映像が正常に記録されない問題を修正しました
- [FIX] OBS WHIP で AV1 で録画できない問題を修正しました

#### メッセージングヘッダー機能

リアルタイムメッセージング機能において、
メッセージに Sora 側でヘッダーを追加する機能です。
`sender_connection_id` を追加できます。

- [ADD] `data_channels` にメッセージングにヘッダーを追加する `header` 項目を新しく追加しました- **ヘッダーを付与するかどうかはメッセージを受信する側が指定します**- `{"label": "#spam", "direction": "recvonly", "header": [{"type": "sender_connection_id"}]`
    - この設定を行ったクライアントは `#spam` ラベルのメッセージは常に先頭 26 バイトに `sender_connection_id` が含まれるようになります
  - ヘッダーは Sora 側で付与します
  - `header` はオプションです
  - `header` には `[{"type": "sender_connection_id"}]` のように指定します
  - `type` は `sender_connection_id` のみ指定可能です- `sender_connection_id` はメッセージングの送信元の connection_id です
    - 先頭 26 バイトが `sender_connection_id` になります
    - 将来的に指定できる `type` を増やして行く予定です
  - `"type": "offer"` 時の `data_channels` に `header` が含まれる場合、 `length` 項目を追加します- `length` は `sender_connection_id` の長さです
    - `length` の単位はバイトです
    - `sender_connection_id` の場合 `length` は 26 固定です

#### 音声ストリーミングヘッダー機能

音声ストリーミング機能において、HTTP/2 経由で送信する音声パケットに Sora 側でヘッダーを追加する機能です。

- [ADD] 音声ストリーミング機能利用時に `sora.conf` に [audio_streaming_header](SORA_CONF.html#3edcef) を追加しました- デフォルトは `false` です
  - `true` に設定すると音声パケットに Sora がヘッダーを追加します
  - ヘッダーのフォーマットは `[Timestamp:64 bit, SequenceNumber:64 bit, Length:32 bit]` です
  - `timestamp` は音声パケット送信時の UTC 時間マイクロ秒の整数です- RTP のタイムスタンプとは異なります
  - `seq_num` は音声パケットのシーケンス番号で、 1 から始まります- RTP のシーケンス番号とは異なります
  - `length` はヘッダーを除いた音声パケットの長さです

```mermaid
---
title: "音声ストリーミングヘッダーフォーマット"
---
packet-beta
0-63: "Timestamp"
64-127: "SeqNum"
128-159: "Length"
```

#### プレイアウト遅延機能

**実験的機能です**

プレイアウト遅延機能の仕様を変更しました。
今までは配信側に影響する設定でしたが、今回のリリースから視聴側に影響する設定に変更しました。

この変更により視聴側毎にプレイアウト遅延を指定できるようになりました。

- [ADD] sendrecv と recvonly のロールに影響するよう設定を変更しました- sendonly には影響しません
- [CHANGE] `sora.conf` の [default_playout_delay_min_delay](SORA_CONF.html#194218) は視聴側のプレイアウト遅延の最小値のデフォルトを指定するように変更しました- デフォルトは未指定です
- [CHANGE] `sora.conf` の [default_playout_delay_max_delay](SORA_CONF.html#c1b0ab) は視聴側のプレイアウト遅延の最大値のデフォルトを指定するように変更しました- デフォルトは未指定です
- [CHANGE] 認証成功時の払い出し `playout_delay_min_delay` は視聴側の最小値を指定するように変更しました- `playout_delay_max_delay` も一緒に指定する必要があります
- [CHANGE] 認証成功時の払い出し `playout_delay_max_delay` は視聴側の最大値を指定するように変更しました- `playout_delay_min_delay` も一緒に指定する必要があります

詳細は [プレイアウト遅延機能](PLAYOUT_DELAY.html) をご確認ください。

#### テスト API

- [UPDATE] テスト API がクラスターで利用できるようになりました
- [UPDATE] テスト向け API の録画失敗を意図的に起こす [FailArchive](TEST_API.html#80c0b0) API をクラスターに対応しました
- [UPDATE] テスト向け API のシグナリング通知を送信する [SendSignalingNotify](TEST_API.html#c9b5c5) API をクラスターに対応しました
