時雨堂では libwebrtc をビルドするためのツールと、ビルドしたバイナリを公開しています。今回 libwebrtc にパッチを当てる形で H.265 への対応を行いました。
今回のパッチにより WebRTC SFU Sora の iOS SDK と Android SDK で H.265 を利用可能にします。コーデック自体は含んでおらず、iPhone や Android 端末に搭載されている H.265 ハードウェアアクセラレーター (以降 HWA) を利用します。
まとめ
- WebRTC SFU Sora iOS SDK / Android SDK が H.265 に対応
- WebRTC SFU Sora も H.265 正式対応
- Momo や C++ SDK も H.265 対応予定
なぜ今 H.265 なのか
ライセンスについての確認が無事取れたから、というのが一番です。それ以外にも、実装中に H.265 の流れが来たこともあります。
libwebrtc や SDK のバイナリ配布がライセンス的に問題ないとの確認を得た
H.265 の主なパテントプールである 2 つの団体に確認し、ハードウェア処理を利用した H.265 対応の SDK をバイナリで配布することは、ライセンスが不要との確認を得ました。
WebKit が H.265 の実装を RFC 互換で入れてきた
もともと WebKit は WebRTC H.265 をかなり早い段階で対応していました。ただずっと実験的機能、かつ実装が甘いこともあり、実用的ではありませんでした。
そこに Intel の協力を得て RFC 準拠の実装が入り、現在正式リリースに向けた動きがあります。
おそらく Safari 17.2 か 17.3 で WebRTC H.265 が標準で利用可能になりそうです。
libwebrtc に H.265 パーサー実装が入ってきた
Intel が、ゆっくりではありますが libwebrtc にも H.265 処理を入れつつあります。実際、昨年 2022 年 10 月の段階で、HWA を利用した H.265 の映像再生自体は Chrome に含まれています。
H.265 対応は何が嬉しいのか
モバイルでは基本的に H.264 を利用する人が多いですが、H.264 はもう 20 年前の規格です。H.265 も 10 年前の規格ですが … 。
多くのモバイル端末は H.265 の HWA を搭載していて、よほど古い端末でない限り、搭載していない端末はないと思います。
H.264 から H.265 に切り替わると、同等の画質を半分程度のビットレートで配信することができます。それにより利用帯域を減らすことができるのはとても魅力的です。さらに HWA により、マシンの CPU 負荷は高くなりません。
WebRTC SFU Sora の H.265 対応について
2023 年 12 月リリース予定の Sora 2023.2.0 にて H.265 のサイマルキャストにも対応し、デフォルトで H.265 を利用できるようにします。
Momo や C++ SDK の H.265 対応について
こちらも対応していきます。iOS / Android の H.265 対応をリリース次第着手していきます。C++ SDK ベースの Unity SDK や Python SDK でも利用できるようにしていきます。
また、C++ SDK では macOS VideoToolbox 、Windows と Linux は NVIDIA VIDEO SDK と oneVPL 、さらに NVIDIA Jetson での H.265 に対応します。
iOS の対応状況
前提として Sora iOS SDK は iOS 13 以降で利用可能です。iOS は 11 以降から H.265 への対応しており、iPhoen 5s 以降であれば H.265 が利用可能です。
残念ながら Safari は WebRTC H.265 に未対応です。おそらく 17.2 か 17.3 で対応すると思われます。
Android の対応状況
前提として Sora Android SDK は Android 5 以降で利用可能です。Android は Android 5 から H.265 に対応しているようです。H.265 HWA は端末によるとは思いますが、Android 5 時代にリリースされた端末が H.265 HWA に対応していたので、大丈夫そうです。
残念ながら Chome は WebRTC H.265 には未対応です。おそらく 2024 年のうちには対応するのではないかと思いますが、まだ先かと思います。
ユースケース
モバイル端末だけで完結するサービス
ブラウザでの利用を想定していないモバイル端末だけのサービスであれば、H.265 のみを利用してサービスを提供できます。それにより、映像配信/視聴の負荷、利用帯域を下げることが可能になります。
遠隔支援のように高画質かつ長時間の配信が必要なサービス
遠隔支援は長時間配信をする必要があったり、高画質の映像を求められることが多いです。
そのため H.264 HWA から H.265 HWAに切り替えることで、利用帯域を減らして、高画質配信が可能になります。