Dante over VPN で (ほぼ)無遅延のリアルタイム音声伝送を行った話

この記事は、[ライブ配信にまつわるあれこれを大募集します！ by V-CUBE Advent Calendar 2022](https://qiita.com/advent-calendar/2022/agora) の 16 日目の記事です。

# Dante ってなによ

そもそも Qiita に Dante にまつわる記事が 1 つもないことにだいぶ驚きました。

https://www.audinate.com/meet-dante/what-is-dante?lang=ja

オーストラリアの Audinate 社が開発したデジタルオーディオネットワークの伝送規格で Dante というものがあります。

https://jp.yamaha.com/products/contents/proaudio/docs/dante_system_design_guide/2/2.html

Dante は一般的に用いられている LAN ケーブルや、ネットワーク スイッチを用いたネットワークで
48 kHz において 512 ch もの音声信号を双方向に伝送することができます。
Dante のレイテンシー (遅延) は最短 0.25 msec と非常に低レイテンシーで音声を伝送することが可能です。

# やりたいこと

Dante に対応している機器は多いし、コロナ禍でのライブ配信にもかなり大きな力を発揮するのでは？と思いました。
(特に音楽ライブ)

しかし、配信ライブではお客さんは家にいるものの、演者やスタッフは一堂に会するためどうしても感染リスクは否めない部分もあるのではないか、と。
  
**じゃあ演者もスタッフも家でできたらハッピーじゃない？**  
と、思ったのがきっかけです。

# Dante の制限

https://jp.yamaha.com/products/contents/proaudio/docs/dante_system_design_guide/3/1_4.html

基本的に Dante はローカル ネットワークで利用する前提の規格です。
ライブ会場などで、機器間をネットワーク スイッチで繋ぐ想定の規格のため、遠隔地をつなぐような用途は想定されていません。

Dante という規格を用いてオーディオネットワークを構築するためには、L2 上で機器間を接続することが必要です。

**じゃあ VPN を使えばいいじゃん！** って思ったら Audinate 社さんのホームページにはこんなことが書いてありました…

https://www.audinate.com/webinar-and-q-a-how-to-secure-and-scale-your-networked-av-system-with-dante-domain-manager

> Q: Can Dante be routed through a VPN over the internet?
> A: No. (monitoring information can i.e. Dante Domain Manager Dashboard/we browser, but audio/clock cannot)

([DeepL 翻訳](https://www.deepl.com/translator)くんの以下翻訳)
Q：インターネット上のVPNを経由してDanteをルーティングすることはできますか？
A: **できません。** （Dante Domain Manager Dashboardやブラウザなどのモニタリング情報は可能ですが、オーディオやクロックのモニタリングはできません。）

**残念！お疲れ様でした！** 
…
**いや、本当にできないのか？** と思い、いろいろ試すことにしました。

# SoftEther VPN を使ってみよう (失敗)

## SoftEther VPN って？

https://ja.softether.org/

SoftEther VPNとは、筑波大学の研究プロジェクトとして開発されている VPN の接続方式並びにソフトウェアのことです。
2003 年に登大遊氏によって開発された SoftEther 1.0 の後継にあたるものであり、オープンソースであるため無償で利用が可能です。

## 実験環境

#### VPN Server 側
* Amazon Linux 2 (AWS EC2 t2.micro)
* SoftEther VPN Server

#### クライアント側
* Windows 10 Pro
* SoftEther VPN Bridge
* Dante Virtual Soundcard (仮想的なオーディオ インターフェースだと思ってもらえれば)
* Dante Controller (Dante の音声信号をルーティングしたり、レイテンシーを測定するための設定ソフトウェア)

#### VPN
L2TP を使用。
<参考情報>
Title : SoftEther VPN Server での L2TP/IPsec 設定ガイド
URL : https://ja.softether.org/4-docs/2-howto/L2TP_IPsec_Setup_Guide

### クライアント側ネットワーク

予算の都合上、片方モバイルネットワークで実験しました。
* #1 拠点 : docomo 4G 回線
* #2 拠点 : ドコモ光 (BIGLOBE [v6 プラス])

## 結果

**大失敗に終わる。** 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583721/ababcd53-a8cc-1cef-a517-4343a5d4f50f.png)

IP アドレスのネットワーク部が #1 拠点と #2 拠点で別々のものが割り当てられてしまった。(L3 で通信している状態)

#1 拠点の PC で Dante Virtual Soundcard を起動し、#2 拠点の PC で Dante Controller を用いて疎通の確認をしたところ、Dante Controller 上に #1 拠点の PC が表示されたが、赤字で表示されてしまい、別のセグメントにあるコンピューターとして認識されてしまっていた。
※ Dante Controllerで接続対象とするネットワークカードを指定する際も、VPNという表示がなされ、VPNで使用しているネットワークカードというようにソフトウェア側からも制約を付けられているようであった。

## 反省

レイヤー 2 での接続ってなんだ？の状態で挑んだため、無事爆死。
ちょっとお勉強をしまして、次の挑戦へ。

# L2TPv3 を使ってみよう

## L2TPv3 って？

http://www.rtpro.yamaha.co.jp/RT/docs/l2tpv3/index.html

L2TPv3 とは RFC3931 に定められているレイヤー 2 で回線をトンネリングして接続するための規格。

こちらも各拠点を LAN 間接続することで、同一セグメントでのネットワークを構築することができるというものであり、
ユニキャストパケット・マルチキャストパケット・ブロードキャストパケット・エニーキャストパケット等の全てのイーサネットフレームを通すことができる。

## 実験環境

#### VPN Server 側
* Amazon Linux 2 (AWS EC2 t2.micro)
* SoftEther VPN Server

#### クライアント側
* YAMAHA RTX810
* Windows 10 Pro
* Dante Controller
* Dante Virtual Soundcard
* Dante Via (PC 上のスピーカーを Dante 機器として利用できるソフトウェア、マスタークロックになれる)

#### VPN
L2TPv3 を使用。
<参考情報>
Title : YAMAHA RTX シリーズからの L2TPv3 を用いた VPN 接続方法 (IPv4, IPv6 対応)
URL : https://ja.softether.org/4-docs/2-howto/Other_VPN_Appliance_Setup_Guide/9-yamaha-rtx-l2tpv3

### クライアント側ネットワーク

ちょっと頑張って 2 拠点準備 (埼玉県内)。
* #1 拠点 : ドコモ光 (InterLink [ZOOT NEXT])
* #2 拠点 : ドコモ光 (InterLink [ZOOT NEXT])

## 結果

**大成功！！** 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583721/ba5197e6-ef64-b120-2089-1a667326fdf0.png)

2 拠点に割り当てられる IP アドレスのネットワーク部は同一のものとなった！

#2 拠点の PC において Dante Virtual Soundcard を起動し、#1 拠点の PC において Dante Controller を用いて疎通の確認をしたところ、Dante Controller 上に #2 拠点の PC が表示された。
また、Dante Controller のルーティングタブにも #2 拠点の PC が表示され、オーディオチャンネルの表示を確認できた。

その後、#1 拠点の PC において Dante Via を起動し、#2 拠点の PC から Dante Virtual Soundcard を介して音声を再生したところ、#1 拠点の PC から音声が再生された。

## 遅延は？

Dante Controller 上から計測したところ、遅延は「 **3 ミリ秒** 」でした！
(もちろんネットワーク環境や、混雑具合によっても異なるとは思いますが)

[演奏時における音声遅延の検知限とその影響 (著 : 亀川 徹)](https://www.jstage.jst.go.jp/article/itej/69/5/69_408/_article/-char/ja/) では、音声の遅延は 3 ミリ秒程度であれば「検知できない」から「検知できるが気にならない」ほどの遅延と言われており、 **合格** なのでは？と思いました。

# 今後やってみたいこと

NGN 網内折り返しとかやったら、もっとレイテンシー抑えられるのでは？とか目論んでます。
これやればプロバイダーすら介さないので。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583721/1ad92a60-b5d5-cfdb-bcea-936448ad8329.png)

https://www.softether.jp/1-product/11-vpn/41-new/5

それはまた今度の話として。
もしこの情報が、配信ライブに関する技術研究をされている方、音響関連の方、などなど、参考になればいいな…という備忘録でした。

Dante すごいからぜひ使ってみてね！

あと今回参加した Advent Calendar の「Agora」とはまた違った側面 (どちらかというと製作者サイド) で記事を書いてみましたが、手軽に使えそうな配信サイドの技術として追ってみよう！と思った次第でした。
間に合えば Agora も無料トライアルしてみようかな。以上。