😤

WebRTC SFU Sora で Lyra コーデックを体験する

2022/11/11に公開

2021 年に Google が Lyra という低ビットレート音声コーデックを公開しました。
今までの音声コーデックとは異なり機械学習を利用した音声コーデックです。

残念ながら 2021 年の Lyra は速度や音質は実戦投入は難しいという感じでしたが、
2022 年に Lyra V2 として速度、音質が最適化されたバージョンが公開されました。

Lyra は機械学習を利用したコーデックで、 TensorFlow Lite を利用しています。このコーデックと機械学習の組み合わせは今後のデファクトスタンダードになっていくと考えています。

Lyra の簡単なまとめ

  • ビットレートは 3.2 kbps / 6 kbps / 9.2 kbps で利用可能
    • Opus の場合音声通話用のビットレートは 24 ~ 32 kbps あたりを利用
    • Opus 自体は 7.1 ch とかにも対応しているので 512 kbps まで利用可能
  • 遅延は 20 ミリ秒
    • Opus と同等
  • ソースコードやモデルのライセンスは Apache License 2.0 で公開
  • モデルデータのサイズは 1.5 メガバイト程度

リアルタイムコミュニケーションにおける低ビットレート音声コーデックの重要性

リアルタイムコミュニケーションにおいて、映像は乱れても音声さえ届いていればなんとかなりますが、音声はなんとかなりません。そのため音声だけはなんとしてでも安定して届ける必要があります。

Lyra は低ビットレートということで回線が細くても良いですし、
パケットサイズが小さくなるため FEC (Forward Error Correction) や RED (Redundant Audio Data) なども活用しやすくなります。

つまりリアルタイムコミュニケーションにおいて低ビットレートというのはとても重要になります。
実際映像でも VP9 や AV1 といった高圧縮コーデックはとても重要になっています。

Lyra を WebRTC で利用する

Lyra は Google が独自で開発したコーデックということで、標準化などは一切されていません。そのため、WebRTC で利用するには独自カスタマイズが必要になります。

とくにブラウザでの WebRTC の場合はコーデックの追加などは基本的にできません。

今回時雨堂では自社製品である WebRTC SFU Sora とブラウザと C++ SDK に対して、
ブラウザでは WebAssembly を利用、C++ SDK では独自カスタマイズを対応することで WebRTC での Lyra 利用を実現しました。

ブラウザ向け Lyra WebAssembly の公開

Lyra V2 の WebAssembly は OSS として Apache License 2.0 で公開してあります。

shiguredo/lyra-wasm: Lyra V2 WebAssembly build

WebRTC SFU Sora で Lyra V2 を体験する

Lyra V2 を WebRTC SFU を利用して体験できるようにしましたので、
もし興味ある方は体験してみてください。

Sora Labo を利用する

時雨堂の WebRTC SFU Sora は企業向けに販売している商用製品ですが、
個人で検証目的であれば、無料で利用できるサービスを提供しています。

Sora Labo

直近 30 日で合計 2000 分までという制限はありますが、個人レベルの検証であればほぼ引っかかることはないと思います。

GitHub アカウントがあればすぐ利用可能です。

ブラウザで体験する

Chrome 最新版を利用してください

サインアップ後マルチストリーム Canary 版のマルチストリーム送受信をクリックしてください。

Image from Gyazo

あとは 音声コーデックに Lyra を選んで connect を押せば繋がります。

Image from Gyazo

もう一つのタブで開きたい場合は右端にある Copy URL を使って URL をコピーして利用すると便利です。

Image from Gyazo

C++ SDK で体験する

Sora Labo でアクセストークンを用意する

GitHub アカウントで Sora Labo にサインアップしたら、チャネル名を指定してアクセストークンを作成してください。

ここではチャネル名を lyra としています。チャネル ID は lyra@<GitHubUsername>#<GitHubID> です。
Sora Labo で確認出来ます。

Image from Gyazo

あとはアクセストークンをメモしておいてください。

Image from Gyazo

Sora C++ SDK サンプルをビルドする

Lyra を利用するには Sora C++ SDK の サンプルをビルドして利用する必要があります。

shiguredo/sora-cpp-sdk-samples: WebRTC SFU Sora C++ SDK サンプル集

Windows x86_64 または Ubuntu x86_64 または macOS arm64 環境が必要です

以下は macOS arm64 の例です。

$ git clone git@github.com:shiguredo/sora-cpp-sdk-samples.git
$ cd sora-cpp-sdk-samples
$ python3 sdl_sample/macos_arm64/run.py

Sora C++ SDK の SDL サンプルを起動する

  • --video false で音声のみの接続にしています
  • --channel-id のところに自分のチャネル ID を指定してください
  • --metadata の "access_token" のところに自分のアクセストークンを指定してください
$ _build/macos_arm64/release/sdl_sample
$ ./sdl_sample --signaling-url wss://0001.canary.sora-labo.shiguredo.app/signaling --role sendrecv --channel-id 'lyra@voluntas#15551' --multistream true --audio-codec-type LYRA --audio-codec-lyra-params '{"version": "1.3.0", "bitrate": 6000}' --video false --metadata '{"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjaGFubmVsX2lkIjoibHlyYUB2b2x1bnRhcyMxNTU1MSIsImV4cCI6MTY3MDc1NDIzMn0.zYqj6IZ6s4JdfO1crDIILVDIYyRFs3ykCtLY_NXZ8i0"}'

二つ起動することで Lyra を確認することができますので試してみてください。

Lyra のビットレートを変更する

--audio-codec-lyra-params '{"version": "1.3.0", "bitrate": 6000}'

bitrate は 3200、6000、9200 が指定可能です

Opus と比較する

--audio-codec-type LYRA --audio-codec-lyra-params '{"version": "1.3.0", "bitrate": 6000}'

これを以下のように変更することで Opus を利用するようになります。

--audio-codec-type OPUS

資料

Lyra

Opus

RFC

マニア向け情報

WebRTC オタク向け。

SDP

Sora では Lyra V2 向けの SDP を独自に定義しています。

a=rtpmap:109 lyra/16000/1
a=fmtp:109 version=1.2.0;bitrate=3200;usedtx=1

fmtp も独自で定義しています。ここでビットレートや usedtx を指定可能です。この項目は Opus を参考にしています。

Discussion