Client を使った VoIP 通信の品質は環境に大きく依存します。代表的な要素は、ファイヤーウォール・ルーターの設定で、エンドとエンドまでのネットワークの特性に合わせてチューニングすることが大事です。インターネットは品質が保証されないネットワークなので、このようなネットワークで Twilio Client をどのように開発すると良い結果が得られるのか紹介します。
■最新 SDK の利用
バグの修正や機能追加、性能向上のほか、SDK は保守期間があるため最新の Twilio Client SDK を推奨しております。変更点や保守期間などは下記 Changelog をご参照ください。
- https://www.twilio.com/docs/voice/sdks/javascript/changelog
- https://www.twilio.com/docs/voice/voip-sdk/android/3x-changelog
- https://www.twilio.com/docs/voice/voip-sdk/ios/changelog
■Edge の設定
日本国内でサービスを提供する場合、Twilio Client Edge Locations を参照し必ず edge に tokyo をご指定ください。edge 指定がない場合はアメリカ経由になる可能性があり、ネットワークレーテンシーの影響により音声の遅延や劣化に繋がります。
(Twilio Client JS SDK 1.11 未満の場合は region に jp1 をご指定ください)
■ファイヤーウォールの設定
こちらの記事 を参照し、必要な IP アドレスやポートレンジを許可します。利用する帯域が確保されているかも確認してください。加えて、以下のサイトで通信ポリシーの設定が正しいかを確認することをお勧めします。
・Twilio WebRTC Diagnostics
https://networktest.twilio.com/
・Voice SDKs Network Connectivity Requirements
https://jp.twilio.com/docs/voice/sdks/network-connectivity-requirements
■ルーターの設定
ご利用のルーターが SIP Application Level Gateway 機能 (ALG) もしくは Stateful Packet Inspection 機能 (SPI) を備えている場合、これらは無効化してください。
■ネットワーク環境
ジッター(ゆらぎ)・レーテンシー(遅延)・パケットロス は VoIP 通信において、代表的な障壁になります。Twilio Client の音声品質の問題はほとんどがネットワーク品質が起因します。社内で利用する場合はWiFi ではなく有線にすることで問題解消することが多くあります。
- ジッターは、本来届くべき順番で音声パケットが届かないことで発生します。小さなジッターであれば、ジッターバッファ内で自己解決できますが、あまりにパケットロスがある場合、本来くるべき順番のパケットを待つ時間が長くなり、会話の遅延やゆらぎにつながります。「ジッターバッファを長く取ること」と「音声遅延を小さくすること」はトレードオフの関係です。長く取ればそれだけ待ち時間も長くなるため、レイテンシーが伸びることになります。短くすると、レイテンシーは小さくなりますが、パケットロスが大きい時に音声が飛んだり音質が下がります。What is Jitter? もご参照ください。
- レーテンシーは、音声パケット(メディアパケット)が遅れて配送されることで起こります。レーテンシーが大きいと、話者にとって違和感を覚えたり、ひどい場合は会話がしづらくなります。
- パケットロスは、IP 網ではよく発生する事象です。特に Wifi 環境や特定の電話機で起こりがちです。パケットロスが多発すると、話者の声がロボット音声のように感じます。
ジッター
Client 側のネットワーク環境が最も大きな影響を与えます。パケットロスや、遅延を含むロスは音質劣化に直接的かつ大きく影響します。Wifi 環境はジッターが出やすいです。ジッターを小さくする戦略としては以下が挙げられます。
- Wifi ではなく LAN ケーブルによるネットワーク環境を作る
- どうしても Wifi の場合は、同じチャンネルにつなげる端末数を少なくする
- 同じ Wifi 環境で大きなファイルやデータを送らない (Client 環境は分離するのが望ましい)
- バッファブロートを避ける
- ルーターがさばききれない数のパケットを受けた際、それらをキューに入れて順番に吐き出すか、それでもタイムアウトを迎えるほどキューが溜まった時にはパケットを放棄します。音声通話はリアルタイムで行うものですので、キューイングは大きな遅延につがなることになります。
ルーターに備わっている特定の Quality of Service 機能 (QoS) やベンダーのデフォルト値が引き金になることもあります。ご利用のルーターのバッファサイズが小さく設定されているか確認してください。推奨するバッファサイズは、こちら のツールで計測した際に 100ms かそれより小さくなる水準です。
全てのルーターがバッファサイズを設定できるとは限りません。またルーターのデフォルト値が VoIP 通信に適した設定になっているとも限りません。オープンソースのルーターや、エンタープライズクラスのルーター、ゲーミング環境にチューニングされたルーター等は、デフォルトでも適した状態になっていることが多いようです。
上記を一通り試してもまだジッターが改善されない場合は、QoS のルールを見直してください。Twilio Client が使うメディア用 UDP ポートのトラフィックを優先させ、また、他のサービスでこのポートレンジを使っている場合は、このネットワーク環境を使わないよう環境を作ってください。
レーテンシー
一般的に通話者は 250ms あたりからレーテンシーに気づき始め、600ms 以上だと不快感を覚えます。ジッターには固定要素があり、コーデックの処理時間・ジッターバッファにネットワーク通過時間を加算したものが、最終的なレーテンシーになります。目標は 250ms 以下に抑えることです。レイテンシーを小さくする戦略としては以下が挙げられます。
- 帯域の小さいプランの帯域保証側インターネット接続サービスでは、大きなレイテンシーになりがちです。可能ならよいプランにアップグレードしてください。
- LTE(モバイル 4Gデータ接続) は多くの場合、大きなレーテンシーです。避けてください。
- Twilio Client 1.3 以上を使い、自動的に適用される GLL を活用してください。
- 通信帯域の要件
- 1コールにつき、以下の帯域が保証されるようにしてください。
- WebRTC: 10kbps
- Mobile : 10kbps
- 1コールにつき、以下の帯域が保証されるようにしてください。
Twilio Client はネットワークを利用して音声を届けるため、ネットワーク品質が悪い場合は会社名や名前を名乗る通話開始冒頭に音声パケットがすべて揃わず、通話開始時の音声が乱れる場合があります。ネットワーク品質を上げることが難しい場合は、冒頭に音楽やメッセージを流し、ネットワークが確立するまで時間を確保ください。
以上を計測するツールとして有償となりますが Voice Insights の Advanced Features をご検討ください。Voice Insights Settings から有効にすることで利用可能となります。Twilio コンソール以外に API も用意していますのでご活用ください。
■ハードウェア環境
・Web ブラウザ
Twilio では主要な最新のブラウザとリビジョンと、その1つ前のリビジョンでチェックを行っています。現在のバージョンが N だとすると、N と N-1 をチェックしています。ご利用のブラウザがサポートされているか、また設定が正しいかどうかは 以下のURLでチェックできます。
◻︎ Twilio Client JS SDK: Twilio in the browser
https://www.twilio.com/docs/voice/client/javascript
Twilio Client はブラウザの機能を利用して音声変換をします。そのためブラウザ上でタスクを実行した場合、通話音声に影響が出る場合があります。ブラウザのタスクは最低限に留めてください。また拡張機能が影響を与える場合があるため、拡張機能を外した状態でお試しください。
PC ハードウェア
ハードウェアも音質にインパクトを与えます。異なるオーディオカードとドライバーの組み合わせでは、想定する処理の仕方が異なるため、遅延に結びつきます。Twilio でもある程度の組み合わせをチェックしていますが、世の中には多種多様のハードウェアがあるのでチェックしきれないのが現実です。音質問題に行き当たった際には、同じテストをいくつかのハードウェア構成を変えながら実施して、一番良いものを探してください。Chromebook も選択肢の一つなります。
モバイル OS
Twilioでは、最新の SDK について最新のモバイル OS とその1つ前のリビジョンをチェックしています。例えば現在が iOS 8 であれば、iOS 7.1.2 までチェックしています。
PC ヘッドセット
音質問題に行き当たった場合、ヘッドセットやマイクといったハードウェアが原因かもしれません。この切り分けのためには同じテストを ヘッドセットあり・なし で試してみる、別のハードウェアで試してみる、といった切り分けが必要です。エコー抑止機能がオンになっている場合、これを切ると改善することがあります。
- ロースペックの PC やハードウェアを使う場合は、USB ヘッドセットのほうが良い結果を生むことが多いです。3.5mm ジャックのタイプと違い、オーディオカードへネイティブな音声をバイパスできるためです。ハイスペックな PC を使っている場合は、3.5mm ジャックタイプでも問題ないでしょう。Sennheiser、Jabra の1万円前後の製品で、USB 接続を利用される方が多いようです。
Bluetooth ヘッドセット
Bluetooth のヘッドセットは個々に動き方が異なるため、少々のチャレンジが必要です。USB Bluetooth アダプターを介せる場合は、これをペアリングしてください。デバイスネイティブの Bluetooth サポートを使うより良い結果を生むことが多いです。
Bluetoothサポートは、デバイス毎に違いが大きくなりがちで、プログラマブルな制御を提供していないこともあります。例えば、応答/切断 ボタンの機能がノンネイティブなアプリケーションに渡らなかったりといったこともあります。定常的に発生するノイズは、多くの場合、ヘッドセットの設定に失敗しています。別のヘッドセットでテストしたり、ヘッドセットを使わないでテストしたりなど、問題箇所を切り分けてください。
■トラブルシューティング
- debug オプションを有効にしログをご確認ください。
- Windows Update や動画サイトの視聴によりネットワーク帯域が不足し、音声品質に影響を与える場合があります。ネットワーク利用と音声品質に因果関係がないかご確認ください
- 対応ブラウザかご確認ください
- ブラウザにマイクの許可を与えているかご確認ください
- ブラウザのシークレットモードでご確認ください
- ブラウザのキャッシュをクリアにしてご確認ください
- アンチウイルスが影響する場合があります。一時的にオフにした場合に変化がないかご確認ください
- クイックスタートで問題が発生するかご確認ください
- ブラウザの場合、Google の Meet など同様に WebRTC を利用したツールで再現するかご確認ください
Twilio Client におけるトラブルシューティングは How do I troubleshoot common problems with Twilio Client? にも掲載していますので併せてご参照ください。
その他の Twilio Client に役立つ情報は下記をご参照ください。
0 コメント