2014年7月28日月曜日

データ契約SIMでキャリア通話をする(ドコモの携帯をAsteriskに収容した)

「ひかり電話を持ち歩く」というのは良く聞く話ですが、同じ理屈でドコモの携帯を使えるようにしてみました。
これで、データ契約のみのMVNOでも、家に置きっぱなしにしたケータイで発着信できます。
なお、これはIP電話ではないので、相手にはケータイの電話番号が通知されます。

これで煩わしい2台持ちから開放されるはずです。
(私は2台持ちが好きなので、これが完成しても2台持ちを続けますが。)




これを安価に実現するために「Gempro GP-712」というVoIP Gatewayを使用しました。
(「GP-712」はBluetooth接続でケータイとVoIPを中継する機械です。)

今回は、この「GP-712」とドコモのケータイを接続した際の、音質及び遅延時間を検証してみました。



【3G VoIP Gateway】

ドコモなどのキャリア回線を、データ回線で使えるよう橋渡しをしてくれる機器を「3G VoIP Gateway」と言います。
この橋渡しにより、データ回線からもキャリアの電話回線網が使えるようになります。

しかし、これらの機器は、数十万円という価格設定がされており、とても個人では入手できません。
そこで、他になにか良いものがないか探してみたところ、ケータイのBluetooth通信を介すことにより、「3G VoIP Gateway」を安価に実現した製品がありました。

それがGempro社の「GP-71x」という機器です。
今回はこれを海外から取り寄せて検証してみました。



【Gempro GP-71x】

これは使ってみるまで、その動作原理がわかりませんでした。

「GP-71x」が、Bluetoothでケータイと接続することはわかります。
しかし、その後がわかりません。一体どうすればこれがVoIPに変換されるのか・・・。

理屈はこうでした。
  1. 「GP-71x」が他のSIPサーバ(Asteriskなど)にレジストします。
  2. 1により「GP-71x」はSIPクライアントとして動作します。
  3. ケータイに着信があると、BTを介し「GP-71x」が指定された電話番号に転送します。
  4. 転送された先(MVNOなど)でケータイの着信を受話できます。
なお、発着信ともに番号通知は問題なしです。
転送先にも相手先にも、意図した電話番号が通知されます。



【検証結果】

検証は以下のように接続して行いました。

<SH-05E>(音声契約)
Bluetooth
<GP-712>
LAN(Wi-Fi)
<L-01F>(データ契約)


この状態で、他のケータイ(SH-07D)から、SH-05E(音声契約)に電話をかけて、それをL-01F(データ契約)で受話します。

これでSH-07DからL-01Fまでの、遅延時間とSH-07Dが聞こえる音質を検証します。
いつもはFusionの留守電で検証するのですが、今回は接続方法が異なるため、SH-07Dで直に音声を録音しました。


音声データはいつもどおり、これを使わせてもらいました。
<音声の元データ>



◆スピーカの音をすべて拾ってしまったデータ(プルルルル・・・から始まります。)


◆音を拾わないよう少し離して、布団で包んだとき


◆なおもスピーカ音を拾うので、スマホを冷蔵庫に入れて蓋閉めた!



◆遅延時間:472ms


【考察】

今回は音量調整をデフォルトで検証しているためか、音量が非常に小さいのですが、これは「GP-712」のGain値でいくらでも調整可能です。
しかし、音量の問題ではなく「音質」が悪いです。非常にノイジーです。

遅延時間は472msと、まずまず良好な結果を示しているだけに、この音質の悪さは非常にもったいない結果です。
音量を上げれば実用できなくもないと思いますが、明らかに音質が低下していることが相手にも伝わると思います。

・・・と、散々な考察をしてきましたが、実際、検証中にケータイから聞こえる生音は以外と聞き取りやすかったです。
音質が悪いことは決定的ですが、話している内容を間違うほど聞き取りにくいわけではありませんでした。

なお、冷蔵庫に入れてまでもスピーカ音を拾うとは思えないので、スピーカ音と思っていたものは、きっとエコーであると想像できます。



【全然違った・・・! その後の考察】

上の考察を書き終えた後で、音量を上げて試してみました。
その際に気付きました。

ノイズの原因はBluetoothでした。


何気なく、BT通信をしているケータイを持ったまま「GP-712」に近づいたところ・・・。
なんとなく、ノイズが減った気がします。

「あれ?」と思い、もっと近づきます。ノイズが更に減ります。

「GP-712」の上に乗せてみます。
「なんですと!?」

今まで大雨が降っているようなノイズが常時聞こえていたのですが、全て消えました。
非常にきれいな音質です。

また、「GP-712」の設定から「Volume」と「Mic Gain」を上げてみたところ、音量も非常に大きくなりました。
それなのに、音割れすることもありません。エコーもありません。


これならば、十分実用範囲内です。
(現在、録音環境がなく、実際の音質を録音できませんでした。)

VoLTEであれば、さらに遅延時間も少なくなり、より高音質となります。
VoLTE対応端末を入手したら、さらなる検証を行いたいと思います。

なお、発信時にPrefixerから自動的に0063などを付加することもできましたが、遅延時間はその分増加しました。

2014年7月9日水曜日

UbuntuでAsteriskを構築し「ブラステル」を登録する(CuBox-i2使用)

イエデン(HT702)を破壊してからここに至るまで、大急ぎでした。(妻が怖い)

本当はHT702だけを入替えて済ませるつもりだったのですが、新しく購入したHT702は、着信後10秒で切断される現象に悩まされ、結局はAsteriskの構築に至りました。

(着信後の即切断現象は<「FUSION IP-Phone SMART」や「ブラステル(050)」を固定電話として使う>のコメントで頂いている情報と同様の状況と思われます。)




今回は、CuBox-i2にインストールしたUbuntuでAsteriskを構築し、ブラステルを使えるようにするまでを紹介します。
Asteriskの話は、分かる人には簡単、でも、わからない人にはチンプンカンプンな話なので、さらっと流したいと思います。



【Asteriskのインストール】

  • Asteriskをインストールする。(makeやビルドなどは面倒なので行いません。)
    $ sudo apt-get install asterisk

    途中で「ITU-T Telephone code」を聞かれるので、日本の国番号「81」を指定します。


    ・・・以上でAsteriskのインストール完了!
    これだけで、Ubuntuの起動とともにAsteriskも自動実行されるようになります。

    「Linux = 難しい」と思っていましたが、結構適当な感じで行けそうな気がしてきました(・_・;)



    【設定ファイルの変更】

    設定を変更するファイルは、以下の2つだけです。
  • /etc/asterisk/sip.conf
  • /etc/asterisk/extensions.conf

    「sip.conf」に元々記載されていたデータはすべて消去して、以下設定を記載します。
    (心配な人はオリジナルファイルのバックアップを取っておきます。)


    まずは内線電話が通じるかを確認します。

    <sip.conf>
    [general]
    context=default
    port=5060
    bindaddr=0.0.0.0
    language=ja
    
    [201]
    type=friend
    defaultuser=201
    secret=pass
    canreinvite=no
    host=dynamic
    
    [202]
    type=friend
    defaultuser=202
    secret=pass
    canreinvite=no
    host=dynamic
    
    [203]
    type=friend
    defaultuser=203
    secret=pass
    canreinvite=no
    host=dynamic
    


    <extensions.conf>
    [default]
    
    exten => 201,1,Dial(SIP/201,30,r)
    exten => 201,2,Hangup()
    
    exten => 202,1,Dial(SIP/202,30,r)
    exten => 202,2,Hangup()
    


    この設定を終えたら、スマホを2台用意してAsteriskサーバをレジストします。
    2台のスマホをWi-Fi接続(ローカルネットワーク)とし、CSipSimpleなどのSIPクライアントに、以下SIP情報を登録します。

    [1台目]
    SIPサーバ:192.168.x.yyy(AsteriskサーバのIPアドレス)
    ユーザID:201
    パスワード:pass

    [2台目]
    SIPサーバ:192.168.x.yyy(AsteriskサーバのIPアドレス)
    ユーザID:202
    パスワード:pass


    これで、1台目⇔2台目の発着信及び通話テストを行います。
    電話番号は「201」と「202」です。(ユーザID=内線番号)

    無事に発着信と双方向通話ができることを確認します。

    両耳にスマホを当てながら、ブツブツと独り言を喋りつつ、通話ができる感動でニヤニヤします。
    (この姿は誰にも見られないようにしてください。キケンです。)



    【ブラステルの登録】

    早速、ブラステル050を使えるようにします。
    以下のように設定ファイルを書き換えます。

    <sip.conf>
    [general]
    context=default
    port=5060
    bindaddr=0.0.0.0
    dtmfmode=rfc2833
    language=ja
    
    ; Brastel 050 Free
    register => [ユーザID]@softphone.spc.brastel.ne.jp:[パスワード]:[ユーザID]@softphone.spc.brastel.ne.jp/200
    
    [brastel]
    type=friend
    secret=[パスワード]
    username=[ユーザID]
    fromuser=[ユーザID]
    fromdomain=softphone.spc.brastel.ne.jp
    host=softphone.spc.brastel.ne.jp
    context=default
    insecure=invite
    canreinvite=no
    disallow=all
    allow=ulaw
    allow=gsm
    
    [201]
    type=friend
    defaultuser=201 ;(SIPクライアント1が接続に使うユーザID)
    secret=password ;(SIPクライアント1が接続に使うパスワード)
    canreinvite=no
    host=dynamic
    
    [202]
    type=friend
    defaultuser=202 ;(SIPクライアント2が接続に使うユーザID)
    secret=password ;(SIPクライアント2が接続に使うパスワード)
    canreinvite=no
    host=dynamic
    
    [203]
    type=friend
    defaultuser=203 ;(SIPクライアント3が接続に使うユーザID)
    secret=password ;(SIPクライアント3が接続に使うパスワード)
    canreinvite=no
    host=dynamic
    


    <extensions.conf>
    [default]
    ; incoming call
    exten => 200,1,Dial(SIP/201&SIP/202&SIP/203)
    exten => 200,n,Hangup
    
    ; brastel
    MYNUMBER=05012345678 ;(自分のブラステルの電話番号)
    exten => _0.,1,Set(CALLERID(num)=${MYNUMBER})
    exten => _0.,n,Set(CALLERID(name)=${MYNUMBER})
    exten => _0.,n,Dial(SIP/${EXTEN}@brastel,120,T)
    
    ; naisen
    exten => 201,1,Dial(SIP/201,30,r)
    exten => 201,2,Hangup()
    
    exten => 202,1,Dial(SIP/202,30,r)
    exten => 202,2,Hangup()
    
    exten => 203,1,Dial(SIP/203,30,r)
    exten => 203,2,Hangup()
    


    これで、ブラステルの登録完了です。
    もし、内線番号を増やしたい場合は、同様の記述方法で「sip.conf」と「extensions.conf」に『204』『205』・・・と追記していきます。



    【完成】

    以上で、Asteriskの設定はすべて完了です。
    なお、この設定ではAsteriskは以下のように動作します。
  • 外線着信時は登録したすべての電話が一斉鳴動。
  • 内線通話は201~203で個別に呼び出し、200ですべての内線電話を一斉に呼び出し。
  • 外線発信の制限なし。

    なお、この設定ではセキュリティは一切考慮していません。
    外部(ローカルネットワーク以外)からこのAsteriskを使えるようにするためには、国際通話の禁止やパスワードの強化など、多くのセキュリティ対策を行う必要があります。