くにゅくにゅの雑記帳

実験ノート的なやつ

SORACOM Air で VoIP を通す

SORACOM Airは,株式会社ソラコムが提供を開始したIoT向けのモバイルデータ通信サービスです。SORACOM Airの最大の特徴は,IoTという,従来のオペレータが注力してきた分野とはまったく異なるニーズをターゲットとしていることでしょう。一つの象徴的な特性として取り上げるならば,SORACOM Airで提供される速度クラスは,最小32kbpsから,最大でも2Mbpsまでしかなく,しかも課金は従量制。データ通信サービスといえば「安くて速くて定額です」が当然の謳い文句となっている世の趨勢に逆らい,なにやらただならぬ,しかしながら「どうせ1日10バイトしか流さないから1GBとかいらないんだよねえ」的な世界に暮らす我々にとっては,とてもありがたい異彩を放っているのが,このSORACOM Airというわけです。

SORACOM Airで音声を通してみたい

SORACOM AirはのSIMはデータ通信専用であり,いまのところ,回線交換による音声通話機能は提供されていません。しかし,音声をIP化してデータとして伝送するVoIPならば,原理的には通すことができると考えられます。これ自体は,SkypeやLINEなどですでに実現できていることですが,SORACOM Airは,一般的なSIMと比べると伝送帯域が控えめなサービスです。そこで,そもそも音声のようなストリーミングデータでも流せるのか,また,どのような品質になるのかを,実際に検証してみることにしました。

検証環境

この検証のために,下図のような環境を用意しました。

f:id:kunukunu:20151012002335p:plain事前準備として,自宅にAsteriskサーバおよび対向となるSIP電話機を設置し,SIPによる音声通話ができる状態としておきます。これらのホストは,NATの内側にありますので,The Internetからは直接は接続できません。そこで,L2TP/IPSecによるVPNトンネルを経由して,自宅外からもセキュアに接続できるようにしておきます。

この検証では,3G/LTE網を経由でSIP通話を行う必要がありますので,通話検証用として手持ちのSIMフリーなAndroidスマホASUS Zenfone)を使用しました。Androidで使用できるSIP通話アプリとしては,Androidネイティブの実装のほか,いくつかの選択肢が存在します。今回は,オープンソースCSipSimpleというアプリを利用しました。

SORACOM Airは,必ずしもスマホでの利用を念頭に置いた通信サービスではありませんが,使えないわけではありません。ZenfoneにSIMを挿し,PDPコンテクストの設定を行えば,問題なく接続することができました。VPN接続は,Androidのネイティブ機能で行うことができ,これによりSORACOM Airから自宅までの経路が開かれます。

音声を通すために必要な伝送帯域

次に,VoIP通話に必要な伝送帯域を検討します。

一つの基準として,固定電話の音声は,8kHzサンプリング,8bitの対数PCM(日本ではμ-law)で符号化することが標準であり,64kbpsのストリームとして伝送されます。VoIPにおいても,特に商用IP電話サービスでは,固定電話に準じてμ-lawを無圧縮のまま伝送することが一般的です。

音声を,非可逆なコーデックで圧縮すると,必要な帯域をぐっと小さくすることができます。一例として,3Gの回線交換では12.6kbpsのAMRコーデックが標準として使われており,かつて輻輳が激しかった第2世代携帯電話時代には,その約半分の5.6kbpsまで圧縮するコーデックも運用されていました。当時,まるでロボットが話しているかのような,ひどい音質に辟易とされた方もいることでしょうが,音質劣化を許容すれば,音声は意外と小さな伝送帯域でも送れるのです。

実際には,これにUDPや,IP,RTPなどのパケットヘッダによるオーバヘッドが加わります。VoIPでは,遅延を小さくするため短いパケットを大量に送信するので,ヘッダも無視できない要素となります。たとえば,64kbpsのμ-lawでは,ヘッダも加味すると90~100kbps程度のストリームとなるため,これを安定して伝送できる必要があります。

候補は s1.minimum か s1.slow

SORACOM Airでは,目的とする通信の特性に応じて,速度クラスをユーザが選択することができ,最小の s1.minimum が32kbps,その上の s1.slow が128kbpsというラインアップになっています。s1.minimum でも,圧縮さえすれば音声がなんとか通りそうな太さですから,今回の検証の対象とします。s1.slow では,128kbpsありますから,μ-lawのままでも通ってしまいそうです。

上記を踏まえ,s1.slow s1.minimum で試してみることにします。なお,s1.minimum では,64kbpsのμ-lawが通らないことは自明なので,Asteriskで使えて,13kbpsまで圧縮されるGSMコーデックを用いることにしました。

s1.slow(128kbps)ではまったく問題ない

前置きが長くなりましたが,実際に通話テストを行ってみます。

最初の検証として,SIMを s1.slow に設定し,自宅内で電話をかけてみます。このとき,μ-lawGSM,いずれのコーデックでも,あっさりとつながりました。音の途切れや乱れはなく,ごく普通に通話できています。s1.slow なら,64kbpsのμ-lawでさえ問題なく通せるようです。

f:id:kunukunu:20151012031748j:plain

特筆すべきは,音声の伝送遅延が,思った以上に小さいことです。そもそもLTEでは,音声通話はVoIPとして実装する(いわゆるVoLTE)前提となっており,移動体通信網としては,かつてない水準の低い伝送遅延を実現しています。自宅ルータに対するpingのRTTが40ms前後であり,この程度の遅延ならば,ヒトは違和感をまず感じません。本物のVoLTEと,今回のような「勝手にVoIP」では,網上ではQoS制御上の扱いに差はあるものの,勝手にVoIPでも,それなりに実用になることがわかります。

端末の接続先を3G網に固定した場合でも,LTEと同様に音声通話は問題なく行えました。このとき,pingによるRTT測定で80ms前後で,聴感上も若干遅延が増えた印象がありました。

s1.minimum(32kbps)では無理だった

次に,SIMを s1.minimum に設定し,GSMコーデックで同様の通話テストを行ってみました。その結果,呼は通るものの,音声パケットのロスが30%以上もあり,通話として成立する品質にはなりませんでした。

前述のとおり,音声パケットはヘッダによるオーバーヘッドが大きく,音声を圧縮すればするほど,ヘッダのデータ量が支配的となってきます。今回の検証では,VPNのオーバヘッドも加わっているため,32kbps の帯域を超えてしまっているようでした。もう少し工夫してオーバヘッドを小さくすれば,ギリギリで通せるかもしれません。

移動も検証してみる

移動やハンドオーバーの影響も検証するため,通話状態にしたまま,自宅がある東京都八王子市周辺を車で走行してみました。データ通信では,移動による通信状態の乱れや基地局間のハンドオーバーを意識することはあまりありませんが,リアルタイムストリーミングの音声通話では,パケットロスには敏感です。短い時間の途絶であっても,人は気づいてしまうからです。

SIMの設定は s1.slow とし,コーデックは μ-law としました。運転上の安全を考え,この検証では対向から音楽を一方的に流し,これをハンズフリーのスピーカーで聴取して評価する方法をとりました。

f:id:kunukunu:20151012023655j:plain

ところが,走っても走ってもぜんぜん途切れないのです。

ここは,延長約1.8kmの浅川トンネルから外へ出るポイント。圏央道高尾山インターの近くです。トンネル内はエリア化されていますが,前後の坑口付近で確実にハンドオーバーします。それでも音声の乱れは特に感じませんでした。

f:id:kunukunu:20151012024400j:plain

だいぶん走り回って,ようやく見つけた途切れポイントは,坑内がエリア化されていないこの短いトンネルでした。といっても,トンネルに入ってしばらくすると音声が1秒ほど途切れただけで,出口付近すぐに復帰しました。

f:id:kunukunu:20151012024701j:plain

車や電車で移動しながら試験してみると,エリア外となっているトンネルような例外を除いて,パケットロス率は数パーセントというレベルでした。この程度ですと,聴感上も途切れた感じはほぼわかりません。LTEのハンドオーバーは思った以上に高性能だというのが,やってみた印象です。

トラヒックエリア

10月16日に,渋谷で SORACOM Developers Conferenece #0 が開催され,そこで本件についてLTを行う機会がありました。渋谷はとにかく人が多いため,モバイル通信の世界では,世界有数の高トラヒックエリアとして知られています。高トラヒックエリアでは,みんなが無線リソースを奪い合いってますから,八王子のような郊外よりも厳しい条件にあります。

LT中で行ったのは,その場で,自宅にいる妻に電話をかけるというデモです。

f:id:kunukunu:20151018162525j:plain

このときも,問題なく接続することができ,会場で妻と会話することができました。ただし,上り方向でパケットロスが多少出ていたようです。帰宅してから妻に具合を聞いた(≒非礼をお詫びした)ところ,プチプチ音が少し出ていたとのことでした。

料金

SORACOM Airの料金は,従量制です。VoIPのようなストリーミングでデータをジャンジャン流すと料金が気になるところですが,s1.small を使った場合で,3分2円です。

計算根拠は,以下のとおりです。100kbpsのストリームが上下対称で流れるとして,3分間あたりのデータ量は 12.5 kBytes/s × 180秒 = 2.25 MBytes となります。これに,上りの単価 @0.22円/MB および下りの単価 @0.70円/MB をそれぞれ乗算すると,上り 0.5円,下り 1.5円となり,おおよそ2円になります。検証のためにだいぶん使った気がしたものの,実際の請求額も数十円でした。

 

※ この記事は,SORACOM リリース記念リレーブログの10月19日分として書きました。