# ワークアラウンド

## 概要

Sora 以外の要因で発生している問題に対するワークアラウンドを提供しています。


## Safari タイムスタンプバグに対するワークアラウンド

*バージョン 2024.2.3 で追加。*

> **重要**
>
> このワークアラウンドは 2026 年 12 月リリース予定の Sora にて廃止します。

> **注釈**
>
> このワークアラウンドは Safari 18.6 以降で不要になりました。

Safari の問題により、 2025 年 8 月 1 日 時点で Safari 18.4-18.5 において、
H.264 または H.265 の録画が正常に行えない問題が発生することに対するワークアラウンド機能です。

> **重要**
>
> H.264 や H.265 を利用せず VP8 や VP9 を利用することでこのワークアラウンドは不要になります。
> このワークアラウンドは H.264 や H.265 で録画を必ず利用しなければいけない場合にのみ有効にしてください。

> **危険**
>
> ワークアラウンドを有効にすることで、今まで正常に録画できていた H.264 や H.265 を利用した録画が正常に行えなくなるリスクもあります。
> それを踏まえた上で有効にしてください。

この問題は macOS / iOS / iPadOS 全てのプラットフォームで発生することを確認しています。

また、iOS 版 Chrome や Firefox でも同様の問題が発生することを確認しています。

> **警告**
>
> この問題の修正が確認されている Safari Technology Preview 219 でもこのワークアラウンドが有効になってしまう問題があります。これは Safari Technology Preview のバージョンが 18.4 となっており、Safari 18.4 との区別ができないためです。

弊社ではこの問題が確認できているバージョンの Safari は以下になります。

- Safari 18.4
- Safari 18.4.1
- Safari 18.5

### 設定

このワークアラウンドを有効にする場合、 `sora.conf` に `workaround_20250515 = 18.4,18.4.1,18.5` のように、ワークアラウンドに対応させる Safari のバージョンを `,` で区切って指定してください。

デフォルトは **未指定** で、指定しなければワークアラウンドは有効になりません。

```ini
workaround_20250515 = 18.4,18.4.1,18.5
```

### Safari 18.5.1

Safari 18.5.1 で修正された際、Sora 側で Safari 18.5.1 と Safari 18.5 のバージョンを区別できない可能性があります。
その場合は、もし修正されていたとしてもワークアラウンドが有効になってしまい、録画が正常に行えないかもしれません。

その場合はワークアラウンドを無効にしていただき、Safari 18.5.1 へアップデートして利用していただくようお願いします。

### iOS/iPadOS Safari 18.3.2

Safari 18.3.1 では問題が発生しないことを確認していますが、
Safari 18.3.2 で問題が発生するかどうかを確認できていません。

ただし、iOS / iPadOS 向けの Safari 18.3.2 は iOS 18.3.1 同様、セキュリティフィックスのための更新となっているため、18.3.1 同様に問題が発生しないと考えられます。

[iOS 18.3.2およびiPadOS 18.3.2のセキュリティコンテンツについて - Apple サポート (日本)](https://support.apple.com/ja-jp/122281)

### ワークアラウンド適用の判定について

HTTP ヘッダーに含まれる User-Agent 値のチェックと、映像コーデックが H.264 または H.265 であるかどうかで判定しています。

- `Version/18.5 Safari`
- `iPhone; CPU iPhone OS 18_5_0 like Mac OS X`
- `iPad; CPU OS 18_5_0 like Mac OS X`

> **注釈**
>
> - 18_4_1 は 18.4.1 として扱われます
> - 18_5_0 は 18.5 として扱われます
> - 18_5 は 18.5 として扱われます

Safari や iOS 版 Chrome 以外でも `User-Agent` に `iPhone` や `iPad` が含まれ、OS のバージョンが指定した Safari のバージョンに含まれる場合はワークアラウンドが有効になります。

例えばワークアラウンドの設定に 18.5 を含んでいた場合、 iOS 版の Chrome では `iPhone; CPU iPhone OS 18_5_0 like Mac OS X` という文字列が含まれるため、ワークアラウンドが有効になります。

### 問題の詳細

Safari が依存している WebRTC ライブラリである libwebrtc を M128 から M132 へとアップデートする際、
廃止になった `VideoFrame::timestamp()` の代わりに、本来利用すべき `VideoFrame::rtp_timestamp()` ではなく、
`VideoFrame::timestamp_us()` を利用してしまったことで発生した問題になります。

`VideoFrame::timestamp()` が非推奨になったコミット

`VideoFrame::timestamp()` が削除されたコミット

Safari のベースである WebKit の libwebrtc を M132 に更新した際に、
`VideoFrame::rtp_timestamp` ではなく `VideoFrame::timestamp_us` を利用してしまったコード

この間違った修正により、ハードウェアアクセラレーターを利用するコーデック H.264 と H.265 は、
送信するパケットのタイムスタンプがおかしくなってしまい、Sora の録画機能が正しく機能しなくなっています。

この問題については WebKit では既に解決済みになっており、
修正コミットがマージされています。

問題のバグ

修正されたコミット

Safari Technology Preview 219 ではこの問題が修正されていることを確認済みのため、この修正コミットは含まれているようです。

2025 年 7 月 30 日にリリースされた Safari 18.6 にて本問題が修正されていることを確認しており、ワークアラウンドは不要です。
