ワークアラウンド¶
概要¶
Sora 以外の要因で発生している問題に対するワークアラウンドを提供しています。
Safari タイムスタンプバグに対するワークアラウンド¶
Added in version 2024.2.3.
Safari の問題により、Safari 18.4 から 2025 年 5 月 15 日 時点での最新版である 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 のバージョンを ,
で区切って指定してください
デフォルトは 未指定 で、指定しなければワークアラウンドは有効になりません。
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 サポート (日本)
ワークアラウンド適用の判定について¶
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()
が非推奨になったコミット
https://webrtc.googlesource.com/src.git/+/0fa90887c5bf15aa6e73c2df78cae31feb82fa54
VideoFrame::timestamp()
が削除されたコミット
https://webrtc.googlesource.com/src.git/+/161956b89d90ff44829eda8d34ac6fa51856227e
Safari のベースである WebKit の libwebrtc を m132 に更新した際に、
VideoFrame::rtp_timestamp
ではなく VideoFrame::timestamp_us
を利用してしまったコード
https://github.com/webkit/WebKit/blame/b9174b433c1dac5b08c54d7d8c88476d30ee4e6e/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp#L713
この間違った修正により、ハードウェアアクセラレーターを利用するコーデック H.264 と H.265 は、 送信するパケットのタイムスタンプがおかしくなってしまい、Sora の録画機能が正しく機能しなくなっています。
この問題については WebKit では既に解決済みになっており、 修正コミットがマージされています。
問題のバグ https://bugs.webkit.org/show_bug.cgi?id=292273
修正されたコミット https://github.com/WebKit/WebKit/pull/44687
Safari Technology Preview 219 ではこの問題が修正されていることを確認済みのため、 この修正コミットは含まれているようです。
2025 年 5 月 14 日にリリースされた Safari 開発版の Safari Technology Preview 219 にて本問題が修正されていることを確認しており、ワークアラウンドは不要です。