# リリースノート

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

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

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

**FIX**
: バグ修正













## 2022.1.3

**リリース**: 2022-11-02

### 変更履歴

- [FIX] 依存している OpenSSL を 3.0.7 にアップデートしました
- [FIX] データチャネルの性能ボトルネックを修正しました
- [FIX] データチャネル利用時に高負荷になった状態が継続する問題を修正しました
- [FIX] データチャネル利用時に意図しないメッセージを受信した際の問題を修正しました
- [FIX] データチャネル利用時に意図しないエラーが発生する問題を修正しました
- [FIX] データチャネル利用時に `compress` が `true` になっている Label のメッセージが壊れている場合の問題を修正しました


## 2022.1.1

**リリース**: 2022-07-12

### 変更履歴

- [FIX] 依存している OpenSSL を 3.0.5 にアップデートしました
- [FIX] 録画機能の `type: split-archive-end` ウェブフックには解像度を含めないように修正しました
- [FIX] 録画機能の `split-archive-end-<connection_id>.json` ファイルには解像度を含めないように修正しました
- [FIX] `sora.log` にでるべきログの一部が `internal.log` に出力されていた問題を修正しました
- [FIX] クラスターのノードが異常な状態になったタイミングで `emergency` ログを出力して終了するように修正しました
- [FIX] sora.conf の `default_multistream` が true の時に、 `"type": "connect"` メッセージの `role` に `sendrecv` を指定し、かつ `multistream` を `指定しない` 場合に、エラーとなり接続できない問題を修正しました


## 2022.1.0

**リリース**: 2022-06-29

### ハイライト

- Ubuntu 22.04 に対応しました
- RHEL 9 に対応しました
- サイマルキャスト機能が正式版になりました
- スポットライト機能が正式版になりました
- スポットライト機能がサイマルキャスト無効でも利用できるようになりました
- サイマルキャスト機能やスポットライト機能利用時に、視聴されていないストリームは復号処理を行わない仕組みを追加しました
- 録画機能で、録画ファイル分割出力機能を有効にした場合にも recording.report ウェブフック通知とレポートファイルが作成されるようになりました
- クラスター利用時に、同一ライセンスを利用できる「最大ノード数ライセンス」の提供を開始しました
- クラスター機能で録画状態を共有する機能を追加しました
- クラスター機能でクラスター参加を自動で行う仕組みを追加しました
- クラスター機能でネットワーク障害発生時に自動で復旧を試みる仕組みを追加しました
- 特定の接続からのストリームを受信しないようにできる `bundle_id` を追加しました
- センシティブなデータが含まれる可能性がある `session_metadata` や `event_metadata` の値を `"REDACTED"` という文字列に置き換える仕組みを追加しました

### 廃止情報

- `sora.conf` の `demo` を廃止しました
- `sora.conf` の `remote_stats` を廃止しました
- `sora.conf` の `unuse_metadata_list` を廃止しました
- `sora.conf` の `use_re_offer` を廃止しました
- [GetAllRemoteStats](OBSOLETE_API.html#3a6504) API を廃止しました
- [GetChannelRemoteStats](OBSOLETE_API.html#bbd252) API を廃止しました
- [GetConnectionRemoteStats](OBSOLETE_API.html#2f926d) API を廃止しました
- [StopRecording](API.html#fd0de5) API の `redirect` を廃止しました

### 互換なしの変更情報

- マルチストリームをデフォルトで有効にしました- `sora.conf` の `default_multistream` を `false` にすることでマルチストリームがデフォルトではなくなります
  - この設定は 2023 年 6 月リリースの Sora にて廃止されます
  - 詳細は [sora.conf の default_multistream の廃止](DEPRECATED.html#615559) をご確認ください
- `type: archive.end` を `type: split-archive.end` に変更しました- `sora.conf` の `split_archive_legacy_prefix` を `true` にすることで `type: archive.end` がそのまま利用できます
  - この設定は 2023 年 6 月リリースの Sora にて廃止されます
  - 詳細は [sora.conf の split_archive_legacy_prefix の廃止](DEPRECATED.html#050276) をご確認ください
- `type: archive.split` を `type: split-archive.available` に変更しました- `sora.conf` の `split_archive_legacy_prefix` を `true` にすることで `type: archive.split` がそのまま利用できます
  - この設定は 2023 年 6 月リリースの Sora にて廃止されます
  - 詳細は [sora.conf の split_archive_legacy_prefix の廃止](DEPRECATED.html#050276) をご確認ください
- `archive-<connection-id>_<index>.webm` を `split-archive-<connection-id>_<index>.webm` に変更しました- `sora.conf` の `split_archive_legacy_prefix` を `true` にすることで `archive-<connection-id>_<index>.webm` がそのまま利用できます
  - この設定は 2023 年 6 月リリースの Sora にて廃止されます
  - 詳細は [sora.conf の split_archive_legacy_prefix の廃止](DEPRECATED.html#050276) をご確認ください
- `archive-<connection-id>_<index>.json` を `split-archive-<connection-id>_<index>.json` に変更しました- `sora.conf` の `split_archive_legacy_prefix` を `true` にすることで `archive-<connection-id>_<index>.json` がそのまま利用できます
  - この設定は 2023 年 6 月リリースの Sora にて廃止されます
  - 詳細は [sora.conf の split_archive_legacy_prefix の廃止](DEPRECATED.html#050276) をご確認ください
- セッションウェブフックでセッションの接続数が 0 のタイミングで `multistream` と `spotlight` がセッションと異なる新規接続が来た場合は既存のセッションを破棄し `session.destroyed` ウェブフックを通知した後に、新規でセッションを作成し `session.created` を通知するように変更しました
- セッションウェブフックでセッションの接続数が 0 ではないタイミングで `multistream` と `spotlight` がセッションと異なる新規接続が来た場合は `INVALID-SIGNALING-PARAMS` エラーを返し切断するように変更しました
- セッションウェブフック `session.created` と `session.destroyed` の `created_time` と `destroyed_time` を UNIX 時間に変更しました
- `sora.log` と `internal.log` の時刻を RFC3339 準拠に変更しました
- `cluster` 関連設定名を変更しました- `cluster_node_name` を `node_name` へ変更しました
  - `cluster_api_url` を `external_api_url` へ変更しました
  - `cluster_signaling_url` を `external_signaling_url` へ変更しました
  - `sora_version` を `version` に変更しました
- `cluster` 関連 API の引数や戻り値を変更しました
- クラスター機能を有効にしたときのモードを `initial` へ変更しました
- クラスターに参加したときに自動でモードが `initial` から `normal` へ切り替わるよう変更しました

### 変更履歴

- [CHANGE] セッションウェブフック `session.created` の `created_time` を UNIX 時間に変更しました
- [CHANGE] セッションウェブフック `session.destroyed` の `created_time` を UNIX 時間に変更しました
- [CHANGE] セッションウェブフック `session.destroyed` の `destroyed_time` を UNIX 時間に変更しました
- [UPDATE] 組み込みの開発ツールを `2022.1.0` にアップデートしました
- [ADD] RHEL 9 x86_64 に対応しました
- [ADD] Ubuntu 22.04 x86_64 に対応しました
- [ADD] イベントウェブフック `connection.created` に RFC3339 形式で出力する `created_timestamp` を追加しました
- [ADD] イベントウェブフック `connection.updated` に RFC3339 形式で出力する `created_timestamp` を追加しました
- [ADD] イベントウェブフック `connection.destroyed` に RFC3339 形式で出力する `created_timestamp` を追加しました
- [ADD] イベントウェブフック `connection.destroyed` に RFC3339 形式で出力する `destroyed_timestamp` を追加しました
- [ADD] イベントウェブフック `connection.destroyed` に UNIX 時間で出力する `destroyed_time` を追加しました
- [ADD] [GetStatsReport](EXPERIMENTAL_API.html#bbbfca) API に Sora のバージョンを取得できる `version` を追加しました
- [ADD] 認証成功時の H.265 の払い出しを追加しました
- [ADD] 認証ウェブフックに `simulcast_rid` を追加しました
- [ADD] Sora 内部で利用するファイルを書き出す `data` ディレクトリを追加しました
- [ADD] `sora.conf` に Sora 内部で利用するファイルを書き出す `data` ディレクトリを指定する `data_dir` を追加しました
- [FIX] Opus の RED の仕様変更ともない動作しなくなっていた問題を修正しました
- [FIX] 0 番ポートでパケットが送られてきた場合の問題を修正しました
- [FIX] DTLS で異常なパケットが送られてきた場合でも可能な限り丁寧に終了処理を行うように修正しました
- [FIX] 異常な STUN パケットが送られてきた場合の問題を修正しました
- [FIX] 録画した WebM ファイルの `Cluster Timecode` が負の値になると発生する問題を修正しました

#### マルチストリームをデフォルトで有効化

マルチストリームをデフォルトで有効にしました。

いままでマルチストリームを利用する場合は、シグナリング接続時に `"multistream": true` を指定して有効にする必要がありました。これをデフォルトで有効に変更しました。

今後は、マルチストリームを利用しない場合は明示的に `"multistream": false` を指定する必要があります。

- [CHANGE] マルチストリームをデフォルトで有効に変更しました
- [ADD] `sora.conf` にマルチストリームのデフォルト値を指定する `default_multistream` を追加しました- デフォルトでは `true` が設定されています
  - この設定は 2023 年 6 月リリース予定の Sora にて廃止します
  - 詳細は [sora.conf の default_multistream の廃止](DEPRECATED.html#615559) をご確認ください

例外的にスポットライト機能を利用するときは `"multistream": true` を明示する必要があります。

#### bundle_id の追加

複数のコネクションを同じ端末から接続する際、それぞれのコネクションで同一の `bundle_id` を指定すると、
同一の `bundle_id` を指定した接続からの音声や映像、メッセージングを受信しなくなります。

画面共有の映像を受信したくない場合などにお使いください。

- [ADD] `sora.conf` に `"type": "connect"` 時に `bundle_id` を指定できるかどうかを設定する [signaling_bundle_id](SORA_CONF.html#279311) を追加しました- デフォルトでは `false` が設定されています
- [ADD] `sora.conf` に [signaling_notify_bundle_id](SORA_CONF.html#f2a58f) を追加しました- デフォルトでは `true` が設定されています
- [ADD] `"type": "connect"` で `bundle_id` が指定可能になりました- 詳細は [bundle_id の指定](SIGNALING.html#196326) をご確認ください
- [ADD] 認証成功時の払い出しで `bundle_id` を指定可能になりました- 詳細は [bundle_id の払い出し](AUTH_WEBHOOK_RETURN.html#d2b87b) をご確認ください

#### sora.log と internal.log の出力

- [CHANGE] タイムスタンプの出力を RFC3339 準拠に変更しました- Sora 2021.2.7 まで- `2022-03-07 02:54:26.847 UTC [info] [-/-/-] <0.1218.0> SORA | node_name=sora@192.0.2.1, version=2021.2.7`
  - Sora 2022.1.0 から- `2022-03-07T02:54:26.847130Z [info] [-/-/-] <0.1218.0> SORA | node_name=sora@192.0.2.1, version=2022.1.0`

#### 録画機能

- [CHANGE] 分割録画ファイルとメタデータファイルの出力名を `archive-<connection_id>_<index>.(json|webm)` から `split-archive-<connection_id>_<index>.(json|webm)` に変更しました- `sora.conf` の `split_archive_legacy_prefix` を `true` にすることで `archive-<connection_id>_<index>.(json|webm)` を維持できます
- [CHANGE] 録画分割時のウェブフックのタイプ `"type": "archive.split"` を `"type": "split-archive.available"` に変更しました
- [CHANGE] 録画分割時のウェブフックのタイプ `"type": "split.end"` を `"type": "split-archive.end"` に変更しました
- [CHANGE] 録画一時ファイルディレクトリ `archive_tmp_dir` に保存される録画一時ファイルは、録画が失敗した場合には削除されなくなりました
- [ADD] `report-<connection_id>.json` に `node_name` と `label` 項目を追加しました
- [ADD] `sora.conf` に分割録画ファイル名を `archive-<connection_id>_<index>.(json|webm)` にする `split_archive_legacy_prefix` を追加しました- デフォルトは `false` です
  - この設定は 2023 年 6 月リリース予定の Sora にて廃止します
  - 詳細は [sora.conf の split_archive_legacy_prefix の廃止](DEPRECATED.html#050276) をご確認ください
- [ADD] 録画の状態をクラスターで共有する仕組みを追加しました
- [ADD] `split_only` に `true` を指定した場合に、 `archive.end` ウェブフックと対になる `split-archive-end-<connection_id>.json` ファイルを作成するようになりました
- [ADD] `split_only` に `true` を指定した場合でも `recording.report` ウェブフックリクエストを飛ばすようになりました
- [ADD] `split_only` に `true` を指定した場合でも `report-<recording_id>.json` ファイルを作成するようになりました
- [ADD] 録画メタデータファイルとレポートファイルに `label` と `node_name` を追加するようにしました
- [UPDATE] 録画で生成された WebM ファイルが Windows の `Windows標準アプリケーションの"映画＆テレビ"` で正常に再生できない問題へ対応しました- Sora 側の問題ではなく `Windows標準アプリケーションの"映画＆テレビ"` が WebM の仕様を守っていないことによる問題です

#### サイマルキャストやスポットライト機能利用時の負荷削減

- [ADD] サイマルキャストやスポットライト利用時に誰も視聴していない音声や映像ストリームの復号を行わない処理を追加しました
- [ADD] 統計 API の rtp 項目に `tocal_decrypt_skipped_audio_srtp` を追加しました
- [ADD] 統計 API の rtp 項目に `tocal_decrypt_skipped_video_srtp` を追加しました
- [ADD] 統計 API の simulcast.rtp.(r0|r1|r2) 項目に `total_decrypt_skipped_srtp` を追加しました

#### サイマルキャスト無効でのスポットライト機能利用

- [ADD] スポットライト機能を `"simulcast": false` でも利用可能になりました

#### クラスター機能

- [CHANGE] クラスター有効時に起動した際のモードを `initial` モードに変更しました
- [CHANGE] クラスターに参加したタイミングで自動で `initial` モードから `normal` モードに切り替わるように変更しました
- [CHANGE] `sora.conf` の `cluster_node_name` を `node_name` に変更しました
- [CHANGE] `sora.conf` の `cluster_signaling_url` を `external_signaling_url` に変更しました
- [CHANGE] `sora.conf` の `cluster_api_url` を `external_api_url` に変更しました
- [CHANGE] クラスター有効時に sora.log / internal.log にクラスターノード名を出力するように変更しました
- [CHANGE] [JoinCluster](EXPERIMENTAL_API.html#17f3f5) API の `cluster_node_name` を `contact_node_name` に変更しました
- [CHANGE] [ListClusterNodes](EXPERIMENTAL_API.html#a70901) API の `cluster_node_name` を `node_name` に変更しました
- [ADD] クラスターから特定のノードの情報を消去する [PurgeClusterNode](EXPERIMENTAL_API.html#13b35a) API を追加しました
- [ADD] `sora.conf` に Sora 起動時に自動でクラスター参加を試みる `contact_node_name_list` を追加しました- 詳細は [contact_node_name_list](CLUSTER.html#a3d0fd) をご確認ください
- [ADD] `sora.conf` にネットワーク障害等発生時に自動で再接続を試みる `cluster_auto_reconnect` を追加しました- デフォルトは有効です
  - 詳細は [cluster_auto_reconnect](CLUSTER.html#42cbc5) をご確認ください
- [ADD] ネットワーク障害等発生時に自動で復旧を試みる仕組みを追加しました- 詳細は以下をご確認ください
  - [通信できるノードが過半数未満となった場合の挙動](CLUSTER.html#2ccf66)
  - [通信できるノードが過半数以上となった場合の挙動](CLUSTER.html#1d8f01)
  - [全ノードが過半数未満に所属した場合の挙動](CLUSTER.html#f87161)

#### 最大ノード数対応ライセンス

クラスター利用時に複数のノードに同一ライセンスを利用可能にする最大ノードライセンスの提供を開始しました。

詳細は [最大ノード数ライセンス](LICENSE.html#aee259) をご確認ください。

- [CHANGE] 最大ノード数ライセンスに対応していない同一ライセンスを複数のノードに適用し、クラスターを構築しようとすると `DUPLICATE-LICENSE` が出力されるように変更されました- 無制限ライセンスをご利用のお客様でクラスターを利用されている場合はサポートまでご連絡ください
- [ADD] クラスター利用時に同一ライセンスを利用可能な最大ノード数ライセンスに対応しました- **新規でライセンスを発行し直す必要がありますのでサポートまでご連絡ください**
  - 新しくライセンスに `max_nodes` という項目を追加し、この最大ノード数までは複数の Sora で同一ライセンスを利用可能になります

#### 統計機能

- [ADD] 統計 API の rtp 項目に `total_received_srtp_invalid` を追加しました
- [ADD] 統計 API の turn 項目に `total_received_unknown_packet` を追加しました
- [ADD] 統計 API の turn 項目に `total_received_stun_unknown` を追加しました
- [ADD] 統計 API の turn 項目に `total_received_stun_invalid` を追加しました
- [ADD] 統計 API の turn 項目に `total_received_turn_invalid_stun` を追加しました
- [ADD] データチャネルの破棄やリトライの回数をラベル毎に取得できるようになりました- データチャネルの破棄メッセージ数 `total_data_channel_abandon_message` を追加しました
  - データチャネルの再送メッセージ数 `total_data_channel_retransmit_message` を追加しました
  - データチャネルの `DATA_CHANNEL_OPEN` メッセージ数 `total_data_channel_ack_message` を追加しました
  - データチャネルの `DATA_CHANNEL_ACK` メッセージ数 `total_data_channel_open_message` を追加しました
- [UPDATE] `total_sent_data_channel_message` から `DATA_CHANNEL_OPEN` メッセージを除外しました
- [UPDATE] `total_received_data_channel_message` から `DATA_CHANNEL_ACK` メッセージを除外しました

#### センシティブデータ編集済出力機能

詳細は [センシティブデータ](SENSITIVE_DATA.html) をご確認ください。

- [CHANGE] `auth_webhook.log` に含まれる `event_metadata` の中身を編集済みを表す `"REDACTED"` という文字列に置き換える変更を行いました
- [CHANGE] `session_webhook.log` に含まれる `session_metadata` と `event_metadata` の中身を編集済みを表す `"REDACTED"` という文字列にに置き換える変更を行いました
- [CHANGE] `event_webhook.log` に含まれる `event_metadata` の中身を編集済みを表す `"REDACTED"` という文字列にに置き換える変更を行いました- `event_webhook_error.log` の `event_metadata` は置き換えを行いません
- [ADD] `sora.conf` にAPI 戻り値に含まれるセンシティブな可能性があるデータを編集済みを表す `"REDACTED"` という文字列に置き換える `redact_api_sensitive_data` を追加しました- デフォルトでは `true`
  - `event_metadata` の中身を `"REDACTED"` という文字列に置き換えます
- [ADD] `sora.conf` に録画メタデータファイルに含まれるセンシティブな可能性があるデータを `"REDACTED"` という文字列に置き換える `redact_archive_metadata_sensitive_data` を追加しました- デフォルトでは `true`
  - `event_metadata` の中身を `"REDACTED"` という文字列に置き換えます


## 2021.2.8

**リリース**: 2022-04-11
**対応 Chrome**: M98 以降
**対応 Firefox**: 97 以降
**対応 Safari**: 15.3 以降
**対応 Edge**: 98 以降

### 変更履歴

- [FIX] 依存ライブラリ OpenSSL を 1.1.1n にアップデートしました


## 2021.2.7

**リリース**: 2022-02-24
**対応 Chrome**: M98 以降
**対応 Firefox**: 97 以降
**対応 Safari**: 15.3 以降
**対応 Edge**: 98 以降

### 変更履歴

- [CHANGE] 録画失敗時でも一時ファイルを削除しないようにしました
- [FIX] PauseRtpStream API がイベントウェブフック connection.created を受け取ったタイミングで実行しても正常に動作しない問題を修正しました
- [FIX] 録画ファイル分割出力のみの場合でも、一時ファイルが録画終了時まで削除されずに残っていた問題を修正しました


## 2021.2.1

**リリース**: 2021-12-20
**対応 Chrome**: M97 以降
**対応 Firefox**: 95 以降
**対応 Safari**: 15.1 以降
**対応 Edge**: 97 以降

- [FIX] 録画機能利用時に `sora.conf` の [archive_tmp_dir](SORA_CONF.html#4d75ea) と [archive_dir](SORA_CONF.html#ad2156) で指定される 2 つのディレクトリが異なるファイルシステムにある場合に、録画ファイルの生成に失敗する問題を修正しました


## 2021.2.0

**リリース**: 2021-12-15
**対応 Chrome**: M97 以降
**対応 Firefox**: 95 以降
**対応 Safari**: 15.1 以降
**対応 Edge**: 97 以降

### ハイライト

- クラスター機能を追加しました
- DataChannel を利用したメッセージング機能を追加しました
- 統計エクスポーター機能を追加しました
- スポットライト機能のフォーカス/アンフォーカスを変更する API を追加しました
- ICE コネクションステート機能を追加しました
- シグナリング通知に録画開始/終了の通知を追加しました
- セッションウェブフックを追加しました
- 音声冗長化機能に対応しました
- AV1 コーデック利用時の録画に対応しました

### 廃止情報

- CentOS 8 への対応を終了しました- 詳細は [CentOS 8 対応](OBSOLETE.html#14536f) をご確認ください
- スポットライトレガシー機能を廃止しました- 詳細は [スポットライトレガシー機能の廃止](OBSOLETE.html#9bb8f9) をご確認ください
- 統計機能の `rtp` にある `rtcp` を廃止しました- 詳細は [rtp にある RTCP 関連統計情報を廃止](OBSOLETE.html#4d430c) をご確認ください
- `sora.conf` の `extmap_allow_mixed` 設定を廃止しました- 詳細は [extmap_allow_mixed 設定のデフォルト有効化と廃止](OBSOLETE.html#6099d7) をご確認ください
- `sora.conf` の `dcsctp_association_max_retrans` 設定を廃止しました- 詳細は [sora.conf の dcsctp_association_max_retrans を廃止](OBSOLETE.html#63d7f7) をご確認ください
- 実験的機能である `sora.conf` の `opus_param_clock_rate` 設定を廃止しました
- [ListAllConnections](OBSOLETE_API.html#7a9c4e) API を廃止しました- 今後は [ListConnections](API.html#d3da2a) API をご利用ください。
- [ListChannelClients](OBSOLETE_API.html#a65eee) API を廃止しました- 今後は [ListChannelConnections](API.html#d388f3) API をご利用ください

### 互換性なしの変更情報

**変更点の不明点についてはサポートまでお問い合わせください**

**猶予期間を儲けない変更となっておりますのでご注意ください**

- [ListConnections](API.html#d3da2a) API の戻り値に含まれる `connection_created_timestamp_sec` の項目名を `created_time` に変更、単位を秒からマイクロ秒に変更しております
- [ListChannelConnections](API.html#d388f3) API の戻り値に含まれる `connection_created_timestamp_sec` の項目名を  `created_time` に変更しており、単位を秒からマイクロ秒に変更しております

### 変更履歴

- [CHANGE] `connection.log` のタイムスタンプを秒からマイクロ秒に変更しました
- [CHANGE] Chrome 側の破壊的変更により Chrome M95 以前の AV1 への対応を廃止しました- AV1 を利用する場合は Chrome M96 以降をご利用ください
- [ADD] `sora.conf` に TURN-TCP で Allocate-Success を遅延させる [turn_tcp_allocate_success_delay_time](SORA_CONF.html#60d922) を追加しました- デフォルトは `100 ms` です
  - 0-1000 ms の範囲で指定可能です
- [ADD] Sora 起動時に Sora のバージョンが INFO レベルで `sora.log` に出力されるようになりました- `2021-12-15 12:34:56.789 UTC [info] [-/-/-] <0.235.0> SORA | node_name=sora@127.0.0.1, version=2021.2.0`

#### 移行

- [CHANGE] `sora.conf` の `use_re_offer` が `true` の場合 `type: update` を Sora に送るとエラーになるよう変更しました
- [CHANGE] `sora.conf` の `use_re_offer` のデフォルト値を `true` に変更しました- この設定は 2022 年 6 月リリース予定の Sora にて廃止します
- [CHANGE] `sora.conf` の `unuse_metadata_list` のデフォルト値を `true` に変更しました- この設定は 2022 年 6 月リリース予定の Sora にて廃止します

#### 開発ツール

- [CHANGE] デモ機能を **開発ツール** と名前を変更しました
- [CHANGE] `sora.conf` の `demo` を `true` にした場合 [devtools](SORA_CONF.html#086a45) が有効になるように変更しました- `sora.conf` の `demo` は 2022 年 6 月のリリースにて廃止します
  - 詳細は [sora.conf の demo の廃止](OBSOLETE.html#12e7c9) をご確認ください
- [ADD] `sora.conf` に [devtools](SORA_CONF.html#086a45) を追加しました- デフォルトは `false` です

#### ウェブフック

- [ADD] 認証ウェブフックに `node_name` を追加しました
- [ADD] イベントウェブフックに `node_name` を追加しました
- [ADD] イベントウェブフックの `recording.report` に `filename` と `file_path` を追加しました- `metadata_filename` と `metadata_file_path` は 2022 年 12 月リリース予定の Sora で廃止します
  - 廃止対象は JSON 内の `"data"` 直下のフィールドのみで、 `"archives"` 以下にある`metadata_filename` と `metadata_file_path` は変更ありません

#### セッションウェブフック

詳細は [セッションウェブフック](SESSION_WEBHOOK.html) をご確認ください。

- [ADD] `sora.conf` にセッションウェブフックの URL を指定する [session_webhook_url](SORA_CONF.html#76fa79) を追加しました
- [ADD] `sora.conf` にセッション作成時のタイムアウトを指定する [session_created_timeout](SORA_CONF.html#20c8c6) を追加しました- デフォルトは `5 s` です
- [ADD] `sora.conf` に セッション破棄時のタイムアウトを指定する [session_destroyed_timeout](SORA_CONF.html#642cc4) を追加しました- デフォルトは `15 s` です
- [ADD] `session.created` ウェブフック通知を追加しました- セッションが作成されたタイミングで通知します
- [ADD] `session.destroyed` ウェブフック通知を追加しました- セッションが破棄されたタイミングで通知します
- [ADD] `session.vanished` ウェブフック通知を追加しました- `block_new_connection` または `block_new_session` モード時に全てのセッションが破棄されたタイミングで通知します
- [ADD] `sora.conf` に `session.vanished` をウェブフックとして通知しない [ignore_session_vanished_webhook](SORA_CONF.html#85718d) を追加しました- デフォルトは `true` です
- [ADD] セッションウェブフック通知時の HTTP ヘッダーに `x-sora-session-webhook-type` を追加しました- ヘッダーの値は `type` の値が入ります
- [ADD] セッションウェブフックのログを出力する `log/session_webhook.log` を追加しました
- [ADD] セッションウェブフックの失敗ログを出力する `log/session_webhook_failed.log` を追加しました
- [ADD] [GetStatsReport](EXPERIMENTAL_API.html#bbbfca) API に合計セッション作成回数 `total_session_created` を追加しました
- [ADD] [GetStatsReport](EXPERIMENTAL_API.html#bbbfca) API に合計セッション破棄回数 `total_session_destroyed` を追加しました

#### モード機能

詳細は [モード機能](MODE.html) をご確認ください。

- [ADD] 新規セッションやコネクションを受け付けなくするモードの仕組みを追加しました- 初期値は `normal` です
  - `sora.conf` にて `cluster` を有効にしたときの初期値は `block_new_connection` です
- [ADD] モードを切り替える `ChangeMode API` を追加しました- `"mode": "normal"` を指定するとすべての新規コネクションを受け付けます
  - `"mode": "block_new_session"` を指定することで新規セッションをブロックすることが可能です
  - `"mode": "block_new_connection"` を指定することで新規コネクションをブロックすることが可能です
- [ADD] 現在のモードを取得する `GetMode API` を追加しました

#### クラスター機能

詳細は [クラスター機能](CLUSTER.html) をご確認ください。

- [ADD] クラスター機能利用時にどのノードへも接続ができない場合 `NO-ACCEPTABLE-NODE` を出力するようにしました
- [ADD] 複数 Sora でクラスターを構築し、冗長化する機能を追加しました
- [ADD] クラスター機能利用時に新規のチャネルへの接続する際、同時接続に余裕のある Sora ノードに割り当てる機能を追加しました
- [ADD] クラスター機能利用時に既存のチャネルへの接続する際、そのチャネルへの接続が存在する Sora ノードに割り当てる機能を追加しました
- [ADD] シグナリング接続時に別の Sora ノードにリダイレクトする `"type": "redirect"` を追加しました- リダイレクト先のシグナリング URL が `"location": "wss://node01.example.com/signaling"` に含まれます
- [ADD] リダイレクト先のシグナリング URL を利用する際に `"redirect": true` を `"type": "connect"` に追加できるようにしました
- [ADD] sora.conf にクラスター利用時にリダイレクトに利用する `cluster_signaling_url` の設定を追加しました- `cluster_signaling_url = wss://node01.example.com/signaling`
- [ADD] sora.conf にクラスター利用時の Sora ノード名を指定する `cluster_node_name` の設定を追加しました- `cluster_node_name = node01@192.0.2.10`
- [ADD] sora.conf にクラスター利用時に API URL を指定する `cluster_api_url` の設定を追加しました- `cluster_api_url = https://node01.example.com/`
- [ADD] sora.conf にクラスター利用時のノード間通信に使用するポート番号を指定する [cluster_listen_min_port](SORA_CONF.html#7aa8c7) と [cluster_listen_max_port](SORA_CONF.html#354463) の設定を追加しました- デフォルトは [cluster_listen_min_port](SORA_CONF.html#7aa8c7) が `49010` で、 [cluster_listen_max_port](SORA_CONF.html#354463) が `49020` です
- [ADD] クラスターに参加するための [JoinCluster](EXPERIMENTAL_API.html#17f3f5) API を追加しました- クラスターからの離脱は `bin/sora stop` で可能です
- [ADD] クラスターに参加しているノード一覧を取得するための [ListClusterNodes](EXPERIMENTAL_API.html#a70901) API を追加しました
- [ADD] クラスターに割り当てられているチャネル ID 一覧を取得するための [ListClusterChannels](EXPERIMENTAL_API.html#0a4459) API を追加しました

#### 音声冗長化機能

**この機能は Chrome 96 以降で利用可能です**

- [ADD] `sora.conf` に 音声冗長化機能を有効にする `audio_red` を追加しました。- デフォルトは `false` です
  - 音声冗長化についての詳細は[PSA: opus+red enabled by default in M96](https://groups.google.com/g/discuss-webrtc/c/5761etCrSuA/m/VrbQL3_LBwAJ) を参照ください
- [ADD] 1 チャネルへの接続が `audio_red` への対応が混在していてもやりとりできるようにしました。

#### 録画機能

- [ADD] AV1 の録画に対応しました- この機能は Chrome 96 以降で利用可能です
- [ADD] [StartRecording](API.html#c5b527) API にて `metadata` を指定可能にしました- `metadata` は JSON オブジェクトである必要があります
  - `metadata` はオプションです
- [ADD] `recording.report` や録画メタデータファイルに [StartRecording](API.html#c5b527) API で指定した `metadata` を出力するようにしました- 指定しなければ `metadata` が出力されません
- [ADD] シグナリング通知を利用している場合、録画開始時に ["event_type": "recording.started"](SIGNALING_NOTIFY.html#7698a8) が通知されるようになりました
- [ADD] シグナリング通知を利用している場合、録画終了時に ["event_type": "recording.stopped"](SIGNALING_NOTIFY.html#421054) が通知されるようになりました
- [ADD] `sora.conf` に録画関連をシグナリング通知で送信するかどうかを指定する [signaling_notify_recording](SORA_CONF.html#cfe368) を追加しました

#### 統計エクスポーター機能

クライアントから送られてきた統計情報を HTTP/2 経由で外部へ出力する機能です。

詳細は [統計エクスポーター機能](STATS_EXPORTER.html) をご確認ください。

- [ADD] `sora.conf` に統計エクスポーターの接続先を指定する [stats_collector_url](SORA_CONF.html#98b67f) を追加しました- `stats_collector_url = http://h2c.example.com:5890/collector`
  - `stats_collector_url = https://h2.example.com/collector`
- [ADD] 統計コレクターへ送信時の HTTP ヘッダーに `x-sora-stats-exporter-type` を追加しました- ヘッダーの値は `type` の値が入ります
- [ADD] `sora.conf` に統計エクスポーターの数を指定する [stats_exporter_number](SORA_CONF.html#a047ec) を追加しました- デフォルトは `5` です
- [ADD] `sora.conf` に [stats_exporter_tls_fullchain_file](SORA_CONF.html#9f17b8) を追加しました
- [ADD] `sora.conf` に [stats_exporter_tls_privkey_file](SORA_CONF.html#20eda2) を追加しました
- [ADD] `sora.conf` に [stats_exporter_tls_verify_cacert_file](SORA_CONF.html#bcd961) を追加しました
- [ADD] 頻繁に送らない項目を定義しました- 1 h に 1 回送ります
  - codec / local-candidate / remote-candidate / certificate / peer-connection / track-stream

#### スポットライト機能

フォーカス/アンフォーカス挙動変更 API を追加しました。

- [ADD] スポットライトのフォーカス/アンフォーカス挙動を変更する [RequestSpotlightRid](API.html#5c2650) API` を追加しました
- [ADD] スポットライトのフォーカス/アンフォーカス挙動をリセットする [ResetSpotlightRid](API.html#680344) API を追加しました
- [ADD] スポットライトのフォーカス/アンフォーカス挙動を一括で変更する [BatchRequestSpotlightRid](API.html#a2e06c) API を追加しました

#### ICE コネクションステート機能

詳細は [ICE コネクションステート機能](ICE_CONNECTION_STATE.html) をご確認ください。

- [ADD] `sora.conf` に [ice_connection_state_disconnected_timeout](SORA_CONF.html#3a2e9b) を追加しました- デフォルトは `5 s` です
- [ADD] `sora.conf` に [ice_connection_state_failed_timeout](SORA_CONF.html#7484a4) を追加しました- デフォルトは `10 s` です
- [ADD] `sora.log` に warning で `ICE-CONNECTION-DISCONNECTED` が出力されるようになりました- `1000 ms` 間隔で 5 秒間 `STUN Binding-Request` を送っても 1 度も `STUN Binding-Success` が返ってこない場合に出力されます
  - `1000 ms` は `sora.conf` の [ice_connection_state_disconnected_timeout](SORA_CONF.html#3a2e9b) にて変更可能です
- [ADD] `sora.log` に `error` で `ICE-CONNECTION-FAILED` が出力されるようになりました- この場合 Sora は接続を切断します
  - `50 ms` 間隔で 10 秒間 `STUN Binding-Request` を送っても 1 度も `STUN Binding-Success` が返ってこない場合に出力されます
  - `50 ms` は `sora.conf` の [ice_connection_state_failed_timeout](SORA_CONF.html#7484a4) にて変更可能です

#### DataChannel 機能

- [CHANGE] 利用しない DataChannel を作成しない仕組みを追加しました- `sora.conf` の [signaling_notify](SORA_CONF.html#d88348) が無効の場合は `label: notify` の DataChannel は作成しません
  - `sora.conf` の [e2ee](SORA_CONF.html#3dddc6) が無効の場合は `label: e2ee` の DataChannel は作成しません
  - `sora.conf` の [user_agent_stats](SORA_CONF.html#b8b6ef) が無効の場合は `label: stats` の DataChannel は作成しません
- [CHANGE] `dcsctp_association_max_retrans` を廃止しました- 切断判定には ICE コネクションステート機能が利用されます

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

詳細は [メッセージング機能](MESSAGING.html) をご確認ください。

DataChannel を利用したメッセージをユーザが提起して自由に送ることができる機能です。ラベルは `#` から始まる必要があります。

- [ADD] `type: connect` に `data_channels` を追加しました- メッセージ機能は `[{"label": "#abc", "direction": "sendrecv"}, ...]` で指定可能です
  - メッセージのラベルを指定する `label` を追加しました- `^#[a-zA-Z0-9][a-zA-Z0-9-]{1,30}$`
  - メッセージのメッセージの方向を指定する `direction` を追加しました- `sendrecv` / `sendonly` / `recvonly` のどれかを指定して下さい
    - 方向はクライアントから見た視点で `role` と同様です
  - メッセージの順番を指定する [ordered](MESSAGING.html#17e8c5) を追加しました- デフォルトは `true` です
  - メッセージのリトライ時間を指定する [max_packet_life_time](MESSAGING.html#3b5bc1) を追加しました- デフォルト指定無しです
    - 単位はミリ秒です
  - メッセージのリトライ回数を指定する [max_retransmits](MESSAGING.html#02a10a) を追加しました- デフォルト指定無しです
  - メッセージの圧縮を指定する [compress](MESSAGING.html#fbaa9b) を追加しました- デフォルトは `false` です
- [ADD] `sora.conf` に [data_channel_messaging](SORA_CONF.html#1d5746) を追加しました- デフォルトは `false` です
- [ADD] 認証成功時の払い出しで `data_channels` を指定できるようにしました- `"type": "connect"` 時に、指定された `data_channels` を上書きできます
- [ADD] `sora.conf` に [data_channel_messaging_only](SORA_CONF.html#93c61c) を追加しました- デフォルトは `false` です

#### ユーザーエージェント統計 API

リモート統計情報 API の名前を変更し整理した API です。

リモート統計情報 API は 2022 年 6 月リリースの Sora にて廃止しますので、
ユーザーエージェント統計情報 API に切り替えをお願いします。

- [CHANGE] `remote_stats` をデフォルト `false` にしました
- [ADD] `sora.conf` に `user_agent_stats` を追加しました- デフォルトは `true` です
  - `remote_stats` は 2022 年 6 月にて廃止されます
- [ADD] [ListUserAgentStats](EXPERIMENTAL_API.html#f9a4fe) API を追加しました- [GetAllRemoteStats](OBSOLETE_API.html#3a6504) の代替 API です
- [ADD] [ListChannelUserAgentStats](EXPERIMENTAL_API.html#df496a) API を追加しました- [GetChannelRemoteStats](OBSOLETE_API.html#bbd252) の代替 API です
- [ADD] [GetUserAgentStats](EXPERIMENTAL_API.html#a078ba) API を追加しました- [GetConnectionRemoteStats](OBSOLETE_API.html#2f926d) の代替 API です


## 2021.1.4

**リリース**: 2021-10-29
**対応 Chrome**: M95 以降
**対応 Firefox**: 93 以降
**対応 Safari**: 15.1 以降
**対応 Edge**: 95 以降

### 変更履歴

- [FIX] ネットワークが不安定な場合に録画が失敗する問題を修正しました
- [FIX] Safari を利用した場合に特定条件で復号が失敗する問題を修正しました


## 2021.1.2

**リリース**: 2021-09-17
**対応 Chrome**: M93 以降
**対応 Firefox**: 92 以降
**対応 Safari**: 14.1 以降
**対応 Edge**: 93 以降

### 変更履歴

- [UPDATE] デモ機能で利用している sora-demo を 2021.1.6 にアップデートしました
- [ADD] 切断 API の `reason` を指定した場合に、指定した `reason` が、イベントウェブフック `connection.destroyed` に `disconnect_api_reason` として含まれるようになりました- 今まで `reason` として入ってきていたのと同じ値が入ります
- [ADD] `"type": "disconnect"` に `reason` を指定した場合に、指定した `reason` が、イベントウェブフック `connection.destroyed` に `type_disconnect_reason` として含まれるようになりました
- [ADD] イベントウェブフック `connection.*` の `data` に `"created_time": "connection.created 時の UNIX 時刻"` を追加しました
- [ADD] `sora.conf` にスポットライトでフォーカスされた後、一定時間追い出されなくなる [default_spotlight_focus_min_interval](SPOTLIGHT.html#966f51) を追加しました- デフォルトは `2000 ms` です
- [FIX] スポットライト機能で複数人が音を出し続けていると頻繁にフォーカスが入れ替わる問題を修正しました- アンフォーカス後のフォーカスは、最低でも [default_spotlight_delayed_focus_interval](SPOTLIGHT.html#794eec) だけ待つようになりました
- [FIX] スポットライト機能でアンフォーカスからフォーカスに変わるタイミングで音声や映像が配信されなくなる場合がある問題を修正しました
- [FIX] スポットライト機能で自動アンフォーカスが指定した時間よりも速く行われる問題を修正しました
- [FIX] IPv6 のみで正常に接続できない場合がある問題を修正しました
- [FIX] クライアントから `"type": "candidate"` を送ることができる回数を 20 から 50 に変更しました
- [FIX] DataChannel におけるエンドポイント障害検出カウンターのリセットタイミングを修正しました
- [FIX] 一部の HTTP API のバリデーションが正常に動作していない問題を修正しました
- [FIX] シグナリングが DataChannel に切り替わったタイミングで WebSocket のアイドルタイムアウトが無制限になるように修正しました
- [FIX] SRTP/SRTCP の暗号が AES-GCM の場合に、長時間配信すると正常に復号できなくなる問題を修正しました
- [FIX] sora.conf の不要なコメントを削除しました


## 2021.1

**リリース**: 2021-06-23
**対応 Chrome**: M91 以降
**対応 Firefox**: 89 以降
**対応 Safari**: 14.1 以降
**対応 Edge**: 91 以降

### 廃止情報

#### role の upstream と downstream を廃止

`role` の `upstream` と `downstream` を廃止しました。

詳細は [role の upstream と downstream を廃止](OBSOLETE.html#a8c580) をご確認ください。

#### allow_client_id_assignment 設定を廃止

接続時や認証成功時に、常に client_id を指定できるようになり、
`sora.conf` の `allow_client_id_assignment` を廃止しました。

詳細は [client_id を指定する設定の廃止](OBSOLETE.html#b2acda) をご確認ください。

#### 旧サイマルキャスト API を廃止

`Sora_20180820.ChangeSimulcastQuality` API を廃止しました。

詳細は [旧サイマルキャスト画質変更 API の廃止](OBSOLETE.html#9e15a8) をご確認ください。

### 互換なしの変更情報

廃止以外の互換性がない機能変更はありません。

### 実験的機能から正式機能へ昇格

- `Sora_20201120.PushChannelByRole` API
- `Sora_20201120.DisconnectChannelByRole` API

### ハイライト

- スポットライト機能に rid 指定機能を追加しました
- スポットライト機能に遅延フォーカス機能を追加しました
- スポットライト機能に自動アンフォーカス機能を追加しました
- スポットライト機能にフォーカスなしの音声配信機能を追加しました
- シグナリングを WebSocket から DataChannel へ切り替える機能を追加しました
- DataChannel 経由のシグナリング利用時に WebSocket の切断を無視する機能を追加しました
- より少ない CPU リソースでより多くの接続を処理できるようになりました

### 変更履歴

- [UPDATE] デモ機能で利用している sora-demo を 2021.1 にアップデートしました
- [UPDATE] より少ない CPU リソースで多くの接続を処理できるようになりました
- [ADD] TURN-TCP 利用時の [Proxy Protocol v1](https://www.haproxy.com/blog/haproxy/proxy-protocol/) へ対応しました- これに伴い [TURN-TLS、TURN-TCP、シグナリングで 443 番ポートを使用する](PRODUCTION.html#14258d) の内容が Sora 2021.1 向けに変更されています
  - nginx の変更はしなくても動作しますが、変更をお勧めします
- [ADD] シグナリング `"type": "offer"` 時に配信で有効になっている `audio` または `video` の `mid` を含めるようにしました- 例: `"type": "offer", "mid": {"audio": "audio_lFaJYL", "video": "video_lMjsoq"}`
- [ADD] `"type": "udpate"` の代わりに `"type": "re-offer"` を送れるように、 `sora.conf` に `use_re_offer` を追加しました- デフォルトは `false` です
  - この設定は 2021 年 12 月リリースの Sora にてデフォルト `true` に変更されます
  - この設定は 2022 年 6 月リリースの Sora にて廃止され、常に `"type": "re-offer"` が送られるようになります
- [ADD] シグナリング通知メタデータの利用時に、 `metadata_list` の代わりに `data` を送れるように、 `sora.conf` に `unuse_metadata_list` を追加しました- デフォルトは `false` です
  - この設定は 2021 年 12 月リリースの Sora にてデフォルト `true` に変更されます
  - この設定は 2022 年 6 月リリースの Sora にて廃止され、常に `data` が送られるようになります
- [FIX] 録画機能の利用時で映像が送られてこない際に WebM の PixelWidth / PixelHeight が 0 になる問題を修正しました
- [FIX] 不安定な回線や音声パケットが送られてこなくなる場合にクライアント側でリップシンクが正常に行われず、音声と映像がずれてしまう問題を修正しました
- [FIX] 音声クロックレートが 48000 Hz 固定になってしまう問題を修正しました
- [FIX] スポットライトレガシーで recvonly が利用できてしまう問題を修正しました
- [FIX] TURN-TCP で問題があった際に、シグナリングを切断しない限り接続が残り続ける問題を修正しました

#### 統計機能

- [ADD] RTP ヘッダー拡張の統計情報を追加しました
- [ADD] サイマルキャストの rid 単位の RTP 統計情報を追加しました
- [ADD] サイマルキャストの rid 単位の RTP ヘッダー拡張統計情報を追加しました
- [ADD] RTCP 統計情報を `rtcp` に移動しました- 2021 年 12 月のリリースにて `rtp` から RTCP 関連の統計情報を削除します

#### スポットライト機能

**実験的機能**

- [CHANGE] デフォルトの `r0` の `maxFramerate` を `1.0` から `5.0` に変更しました

#### スポットライト機能: rid 指定

**実験的機能**

スポットライト利用時にフォーカス、アンフォーカスそれぞれで受信する映像を接続毎に指定できるようになりました。
これによりモバイル端末や回線が不安定な場合は映像を一切受信しないなどの設定ができます。

- [ADD] アンフォーカス時に受信する rid を指定できるように、 `sora.conf` に [default_spotlight_unfocus_rid](SORA_CONF.html#a7cd9b) を追加しました- デフォルトは `r0`
  - `none`, `r0`, `r1`, `r2` を指定可能
- [ADD] フォーカス時に受信する rid を指定できるように、 `sora.conf` に [default_spotlight_focus_rid](SORA_CONF.html#c71c97) を追加しました- デフォルトは `r1`
  - `none`, `r0`, `r1`, `r2` を指定可能
- [ADD] アンフォーカス時に受信する rid を指定できるように、シグナリング `"type": "connect"` に `spotlight_unfocus_rid` を追加しました- デフォルトは `sora.conf` の [default_spotlight_unfocus_rid](SORA_CONF.html#a7cd9b) の値が採用されます
  - `none`, `r0`, `r1`, `r2` を指定可能
- [ADD] フォーカス時に受信する rid を指定できるように、シグナリング `"type": "connect"` に `spotlight_focus_rid` を追加しました- デフォルトは `sora.conf` の [default_spotlight_focus_rid](SORA_CONF.html#c71c97) の値が採用されます
  - `none`, `r0`, `r1`, `r2` を指定可能
- [ADD] アンフォーカス時に受信する rid を指定できるように、認証成功時の払い出しに、 `spotlight_unfocus_rid` を追加しました- デフォルトは `sora.conf` の [default_spotlight_unfocus_rid](SORA_CONF.html#a7cd9b) の値が採用されます
  - `"type": "connect"` 時に、指定された `spotlight_unfocus_rid` を上書きできます
  - `none`, `r0`, `r1`, `r2` を指定可能
- [ADD] フォーカス時に受信する rid を指定できるように、認証成功時の払い出しに `spotlight_focus_rid` を追加しました- デフォルトは `sora.conf` の [default_spotlight_focus_rid](SORA_CONF.html#c71c97) の値が採用されます
  - `"type": "connect"` 時に、指定された `spotlight_focus_rid` を上書きできます
  - `none`, `r0`, `r1`, `r2` を指定可能

#### スポットライト機能: 遅延フォーカス

**実験的機能**

スポットライト利用時に、ちょっとした物音やあいづちではすぐにフォーカスされないように、フォーカスを遅延させる機能を追加しました。
この機能によりサーバーからクライアントへのパケット流量を減らすことができるようになりました。

- [ADD] アンフォーカス時にフォーカスを遅延させるかどうかを指定できるように、 `sora.conf` に [default_spotlight_delayed_focus](SPOTLIGHT.html#8b9a4e) を追加しました- デフォルトは `true`
- [ADD] アンフォーカス時にフォーカスを遅延させる時間を指定できるように、 `sora.conf` に [default_spotlight_delayed_focus_interval](SPOTLIGHT.html#794eec) を追加しました- デフォルトは `2000 ms`

#### スポットライト機能: フォーカスなしの音声配信

**実験的機能**

スポットライト利用時に、他の人にフォーカスが移った場合でも音声を配信し続ける機能を追加しました。
この機能によりスポットライトの数が少ない場合でも、他の人がフォーカスされたことにより音声が送られなくなる、といったことがなくなりました。

- [ADD] フォーカスなしでも音声を配信するかどうかを指定できるように、 `sora.conf` に [default_spotlight_unfocus_audio](SPOTLIGHT.html#27f670) を追加しました- デフォルトは `true`
- [ADD] フォーカスなしでも音声を配信する上限レートを指定できるように、 `sora.conf` に [default_spotlight_unfocus_audio_rate_limit](SPOTLIGHT.html#91cb49) を追加しました- デフォルトは `2`
  - 単位は `1 音声ストリーム = 50 packets / s` です

#### スポットライト機能: 自動アンフォーカス機能

**実験的機能**

スポットライト利用時に、一定時間音声が配信されていない場合はアンフォーカスする機能を追加しました。
この機能によりサーバーからクライアントへのパケット流量を減らすことができるようになりました。

- [ADD] 音がない場合に自動でアンフォーカスするかどうかを指定できるように、 `sora.conf` に [default_spotlight_auto_unfocus](SPOTLIGHT.html#9db9f6) を追加しました- デフォルトは `true`
- [ADD] 自動でアンフォーカスする無音時間を指定できるように、 `sora.conf` に [default_spotlight_auto_unfocus_interval](SPOTLIGHT.html#4636fe) を追加しました- デフォルトは `10 s`
  - 1 ms 以上、30 s 以下
  - API でフォーカスが固定されている場合は自動アンフォーカスの対象外になります

#### DataChannel 機能: シグナリングの WebSocket から DataChannel への切り替え機能

**実験的機能**

> **注釈**
>
> DataChannel は TURN を利用するため UDP が通らない場合でも問題なく繋がります。

> **重要**
>
> DataChannel 機能を利用する場合は Sora JavaScript SDK 2021.1 以降が必要になります

シグナリングやシグナリング通知、プッシュ通知などで利用している WebSocket から DataChannel へ切り替えます。

**ただし WebSocket は切断判定に利用するため、Sora から切断することはありません** 。

- [ADD] `sora.conf` に [default_data_channel_signaling](SORA_CONF.html#adceef) を追加しました- デフォルトは `false` です
- [ADD] シグナリング `"type": "connect"` で `data_channel_signaling: boolean` を指定できるようにしました- デフォルトは `sora.conf` の [default_data_channel_signaling](SORA_CONF.html#adceef) に設定された値です
- [ADD] 認証成功時の払い出しで `data_channel_signaling: boolean` を指定できるようにしました- デフォルトは `sora.conf` の [default_data_channel_signaling](SORA_CONF.html#adceef) に設定された値です
  - `"type": "connect"` 時に、指定された `data_channel_signaling` を上書きできます
- [ADD] シグナリング `"type": "offer"` 時に `data_channel_signaling: boolean` を払い出すようにしました- この払い出しは data_channel_signaling が true の時のみ有効です
- [ADD] WebSocket から DataChannel へ切り替わった場合は `"type": "switched"` が WebSocket 経由で送られるようにしました- `"type": "switched"` を送ったタイミングからWebSocket 経由の `"type": "ping"` の間隔が 5 秒から 30 秒へ変更されます
  - `"type": "switched"` を送ったタイミングからWebSocket 経由の `"type": "pong"` を確認しなくなります

以下の機能が DataChannel に切り替わります。

- シグナリング- DataChannel の `label` は `signaling` です
  - 以下が利用できるメッセージタイプです- `"type": "re-offer"`
    - `"type": "re-answer"`
    - `"type": "disconnect"`
- シグナリング通知- DataChannel の `label` は `notify` です
  - 以下が利用できるメッセージタイプです- `"type": "notify"`
- プッシュ通知- DataChannel の `label` は `push` です
  - 以下が利用できるメッセージタイプです- `"type": "push"`
- E2EE- DataChannel の `label` は `e2ee` です
- 統計情報- DataChannel の `label` は `stats` です
  - 以下が利用できるメッセージタイプです- `"type": "req-stats"`
    - `"type": "stats"`

#### DataChannel 機能: WebSocket の切断を無視する機能

**実験的機能**

> **重要**
>
> WebSocket の切断を切断判定に利用しない場合、 DataChannel におけるエンドポイント障害検出が切断の判断に利用されます。
> この判断は `sora.conf` の `dcsctp_association_max_retrans` の値に依存します。

- [ADD] `sora.conf` に [default_ignore_disconnect_websocket](SORA_CONF.html#58fe04) を追加しました- デフォルトは `false` です
  - この値を `true` にした場合、 DataChannel 経由でのシグナリング有効時に WebSocket を切断しても、Sora はクライアントの切断と見なさずに接続が継続します
- [ADD] `"type": "connect"` 時に `ignore_disconnect_websocket: boolean` を指定できるようにしました- デフォルトは `sora.conf` に設定された値です
  - この値を `true` にした場合、 DataChannel 経由でのシグナリング有効時に WebSocket を切断しても、Sora はクライアントの切断と見なさずに接続が継続します
- [ADD] 認証成功時の払い出しに `ignore_disconnect_websocket: boolean` を指定できるようにしました- デフォルトは `sora.conf` に設定された値です
  - `"type": "connect"` 時に、指定された `ignore_disconnect_websocket` を上書きできます
  - この値を `true` にした場合、 DataChannel 経由でのシグナリング有効時に WebSocket を切断しても、Sora はクライアントの切断と見なさずに接続が継続します
- [ADD] `"type": "offer"` 時に `data_channel_signaling` が `true` の場合 `ignore_disconnect_websocket: boolean` を払い出すようにしました

#### DataChannel 機能: メッセージの圧縮機能

**実験的機能**

DataChannel で送受信するメッセージを圧縮して送受信できる機能です。

`"type": "offer"` 時に送られてくる `data_channels: [{"label": "signaling", "compress": true}, ...]` のように compress が true になっている場合は圧縮して送る必要があります。

- [ADD] `"type": "offer"` 時に DataChannel の情報を送るようにしました- `data_channels: [{"label": "<label>", "compress": boolean}, ...]` の形式で送られてきます
  - DataChannel を有効にしていない場合は `data_channels` キーは含まれません
  - `compress` が `true` の場合、 DataChannel 経由でのメッセージを `zlib/deflate` で圧縮/展開する必要があります

#### DataChannel 機能: クライアント統計情報の要求

**実験的機能**

DataChannel 経由でのシグナリングが有効になると、統計情報を `"type": "pong"` に入れて返すのではなく、
サーバーから `"type": "req-stats"` が送られてきたら、 `"type": "stats", "reports": [...]` で送るという仕組みに切り替わります。

- [ADD] DataChannel 経由でのシグナリング利用時に `label` の `stats` から `"type": "req-stats"` が送られてきます- 送られてくる間隔は `sora.conf` の [data_channel_stats_timer_interval](SORA_CONF.html#217b39) で指定できます
- [ADD] `sora.conf` に [data_channel_stats_timer_interval](SORA_CONF.html#217b39) を追加しました- デフォルトは `5 s` です
  - 最小は `5 s` で最大は `300 s` です

#### DataChannel 機能: サーバー統計情報

**実験的機能**

GetStats* 系 API に DataChannel 関連の Sora 統計情報を追加しました。

- [ADD] `total_dropped_received_data_channel` を追加- `sora.conf` にて [data_channel_packet_loss_simulator_incoming](SORA_CONF.html#a25d40) を `0` ではない値を指定した際に破棄されたパケットの合計数です
- [ADD] `total_dropped_sent_data_channel` を追加- `sora.conf` にて [data_channel_packet_loss_simulator_outgoing](SORA_CONF.html#00e59f) を `0` ではない値を指定した際に破棄されたパケットの合計数です
- [ADD] 項目に `data_channel` を追加しました- `label` 単位の統計情報が確認できます
  - `total_received_data_channel_message`- `label` 単位で受信したメッセージ数の合計
  - `total_received_data_channel_message_byte_size`- `label` 単位で受信したメッセージのバイト数の合計
  - `total_sent_data_channel_message`- `label` 単位で送信したメッセージの数の合計
  - `total_sent_data_channel_message_byte_size`- `label` 単位で送信したメッセージのバイト数の合計
- [ADD] 項目に `sctp` を追加しました- `total_received_invalid_sctp`
  - `total_received_sctp`
  - `total_received_sctp_byte_size`
  - `total_received_sctp_chunk_abort`
  - `total_received_sctp_chunk_asconf`
  - `total_received_sctp_chunk_asconf_ack`
  - `total_received_sctp_chunk_auth`
  - `total_received_sctp_chunk_cookie_ack`
  - `total_received_sctp_chunk_cookie_echo`
  - `total_received_sctp_chunk_cwr`
  - `total_received_sctp_chunk_data`
  - `total_received_sctp_chunk_ecne`
  - `total_received_sctp_chunk_error`
  - `total_received_sctp_chunk_forward_tsn`
  - `total_received_sctp_chunk_heartbeat`
  - `total_received_sctp_chunk_heartbeat_ack`
  - `total_received_sctp_chunk_i_data`
  - `total_received_sctp_chunk_i_forward_tsn`
  - `total_received_sctp_chunk_init`
  - `total_received_sctp_chunk_init_ack`
  - `total_received_sctp_chunk_pad`
  - `total_received_sctp_chunk_reconfig`
  - `total_received_sctp_chunk_sack`
  - `total_received_sctp_chunk_shutdown`
  - `total_received_sctp_chunk_shutdown_ack`
  - `total_received_sctp_chunk_shutdown_complete`
  - `total_received_sctp_chunk_unknown`
  - `total_received_unknown_sctp`
  - `total_sent_sctp`
  - `total_sent_sctp_byte_size`
  - `total_sent_sctp_chunk_abort`
  - `total_sent_sctp_chunk_asconf`
  - `total_sent_sctp_chunk_asconf_ack`
  - `total_sent_sctp_chunk_auth`
  - `total_sent_sctp_chunk_cookie_ack`
  - `total_sent_sctp_chunk_cookie_echo`
  - `total_sent_sctp_chunk_cwr`
  - `total_sent_sctp_chunk_data`
  - `total_sent_sctp_chunk_ecne`
  - `total_sent_sctp_chunk_error`
  - `total_sent_sctp_chunk_forward_tsn`
  - `total_sent_sctp_chunk_heartbeat`
  - `total_sent_sctp_chunk_heartbeat_ack`
  - `total_sent_sctp_chunk_i_data`
  - `total_sent_sctp_chunk_i_forward_tsn`
  - `total_sent_sctp_chunk_init`
  - `total_sent_sctp_chunk_init_ack`
  - `total_sent_sctp_chunk_pad`
  - `total_sent_sctp_chunk_reconfig`
  - `total_sent_sctp_chunk_sack`
  - `total_sent_sctp_chunk_shutdown`
  - `total_sent_sctp_chunk_shutdown_ack`
  - `total_sent_sctp_chunk_shutdown_complete`
  - `total_sent_sctp_chunk_unknown`

#### DataChannel 機能: 設定

**実験的機能**

詳細は [DataChannel シグナリング機能](DATA_CHANNEL_SIGNALING.html) をご確認ください。

- [ADD] `sora.conf` に `dcsctp_association_max_retrans` を追加しました- DataChannel で利用している SCTP プロトコルのエンドポイント障害検出の最大再送値です
  - デフォルトは `10` です
  - 最小は `1` で最大は `128` です
- [ADD] `sora.conf` に [dcsctp_heartbeat_interval](SORA_CONF.html#6745fc) を追加しました- DataChannel で利用している SCTP プロトコルのハートビートを送る間隔です
  - デフォルトは `30 s` です
  - 最小は `0 s` で最大は `120 s` です
  - `0 s` に設定した場合は SCTP レイヤーでのハートビートを送りません
- [ADD] `sora.conf` に [data_channel_packet_loss_simulator_incoming](SORA_CONF.html#a25d40) を追加しました- デフォルトは `0` で無効です
  - Sora が受信する DataChannel のメッセージを、指定した割合で破棄します
- [ADD] `sora.conf` に [data_channel_packet_loss_simulator_outgoing](SORA_CONF.html#00e59f) を追加しました- デフォルトは `0` で無効です
  - Sora が送信する DataChannel のメッセージを、指定した割合で破棄します

#### RTP ヘッダー拡張機能

**実験的機能**

RTP ヘッダー拡張の利用を指定できるようにしました。

- [ADD] `sora.conf` に RTP ヘッダー拡張 `urn:3gpp:video-orientation` を有効にする設定 [rtp_hdrext_video_orientation](SORA_CONF.html#35c304) を追加しました- デフォルトは `false`
- [ADD] `sora.conf` に RTP ヘッダー拡張 `http://www.webrtc.org/experiments/rtp-hdrext/video-content-type` を有効にする設定 [rtp_hdrext_video_content_type](SORA_CONF.html#78e8b8) を追加しました- デフォルトは `false`
- [ADD] `sora.conf` に RTP ヘッダー拡張 `http://www.webrtc.org/experiments/rtp-hdrext/video-timing` を有効にする設定 [rtp_hdrext_video_timing](SORA_CONF.html#a79a16) を追加しました- デフォルトは `false`
- [ADD] `sora.conf` に RTP ヘッダー拡張 `http://www.webrtc.org/experiments/rtp-hdrext/playout-delay` を有効にする設定 [rtp_hdrext_playout_delay](SORA_CONF.html#d34a4b) を追加しました- デフォルトは `false`
- [ADD] `sora.conf` に RTP ヘッダー拡張 `http://www.webrtc.org/experiments/rtp-hdrext/color-space` を有効にする設定 [rtp_hdrext_color_space](SORA_CONF.html#0f7ca8) を追加しました- デフォルトは `false`
- [ADD] `sora.conf` に RTP ヘッダー拡張 `urn:ietf:params:rtp-hdrext:sdes:mid` を有効にする設定 [rtp_hdrext_sdes_mid](SORA_CONF.html#ffb59f) を追加しました- デフォルトは `false`
