Open3

WebRTC における VP9 と AV1 のサイマルキャストメモ

voluntasvoluntas

VP9 と AV1 でサイマルキャストを利用する方法

  • scalabilityMode と scaleResolutionDownBy の両方を指定する
  • scalabilityMode に L1T1 / L1T2 / L1T3 のどれかを指定する
  • encodings にある rid すべてに指定する
voluntasvoluntas

scalabilityMode

  • L1T1 ~ L1T3 のみしか対応していない。さらに rid 毎に L1T3 などを指定する必要がある
  • 1 ストリーム 1 scalabilityMode になる
  • L1T1 で解像度固定、フレームレート固定
  • L1T2 で解像度固定、フレームレート 2 種類
    • 空間レイヤーは 1 なので解像度は固定
    • 時間レイヤー T0 (基本レイヤー) と T1 (拡張レイヤー)
    • 30 fps の場合 T0 は 15 fps で T1 で 30fps
  • L1T3 で解像度固定、フレームレート 3 種類
    • 空間レイヤーは 1 なので解像度固定
    • 時間レイヤー T0 (基本レイヤー) と T1 (中間レイヤー) と T2 (最上位レイヤー)
    • 30 fps の場合 T0 は 7.5 fps で T1 が 15 fps で T2 が 30 fps

パテント

そもそも rid 毎に SVC エンコードを行うので圧倒的に効率は悪そう。

SVC は 1 つのストリームをエンコードして 1 ストリームで複数のレイヤーを SFU で受け取り T0 だけ送るとか T0 + T1 だけを送るといった仕組みを想定しているが、これはパテントが存在する。

サイマルキャスト

VP9 / AV1 は SVC 前提だが、それをサイマルキャストを利用するようにすると、SVC のうまみはほぼない。

1 rid で 1 SVC って、効率悪すぎるきがする。 L1T3 を使った時のメリットには動画のフレームレートを効率的に管理できるっぽいが、ほんとか?と思ってしまう。これは SVC の仕組みを理解してないのはある。

結果的に 1 rid L1T1 x 3 でいいのでは?という気持ちになる。