ラベル Asterisk の投稿を表示しています。 すべての投稿を表示
ラベル Asterisk の投稿を表示しています。 すべての投稿を表示

2015年9月20日日曜日

Asteriskに最強コーデックの「Opus」を対応させる(その2)

以前の記事<Asteriskに最強コーデックの「Opus」を対応させる>では、Opusは使えたものの、他コーデックとのトランスコーディングに失敗していました。

今回はトランスコーディングに失敗しない「実用的なOpus」の適用方法を紹介します。
なお、Asterisk11もまだまだ現役ですので、Asterisk13と11の2パターンの説明を行います。





動作環境
OSにはDebian(Raspbian)を使います。
(特にDebianにこだわっているわけではなく、Fedoraなどの場合には適宜「apt-get」→「yum(dnf)」などと読み替えてください。)

使用したハードウェアは「Raspberry Pi 2B」になります。
また、インテル系CPUを搭載したPC「GB-BXBT-2807」でも問題なく動作することを確認しています。

Asteriskをメインで動かすのであれば「Raspberry Pi 2B」がおすすめです。
ケースを含めても6000円程度で、これに余っているSDカードを挿すだけでもう立派なPC(IP-PBX)の出来上がりです。

「GB-BXBT-2807」はAtom系CPUを搭載しているため、Asterisk以外にファイルサーバやメディアサーバ等も兼ねたい場合や、普通にデスクトップPCとしても使いたい場合におすすめです。



Raspberry Pi 2 Model B


GB-BXBT-2807



AsteriskのOpus対応手順(Asterisk11、Asterisk13共通)
私はものぐさなのでsudoなどは使わず、すべてrootで作業します。


●元々Asteriskがインストールされている場合は、まずはそれを削除します。
apt-get --purge remove asterisk
rm -r /usr/lib/asterisk/modules

●パッケージリストを更新します。
apt-get update

●開発に必要なパッケージ類などをインストールします。
apt-get install -y build-essential autoconf automake pkg-config subversion libncurses5-dev uuid-dev libjansson-dev libxml2-dev libsqlite3-dev libssl-dev libopus-dev wget


AsteriskのOpus対応手順(Asterisk13編)
●Asterisk13用Opusパッチを入手し解凍します。
cd /usr/src
wget https://github.com/seanbright/asterisk-opus/archive/asterisk-13.3.zip
unzip asterisk-13.3.zip

●Asterisk13をDLしてOpus対応パッチを適用します。
wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-13.3.2.tar.gz
tar zxvf asterisk-13.3.2.tar.gz
cd asterisk-13.3.2
cp /usr/src/asterisk-opus-asterisk-13.3/codecs/* codecs/
cp /usr/src/asterisk-opus-asterisk-13.3/formats/* formats/
patch -p1 < /usr/src/asterisk-opus-asterisk-13.3/asterisk.patch
AsteriskのOpus対応手順(Asterisk11編)
●Asterisk11用Opusパッチを入手し解凍します。
cd /usr/src
wget https://github.com/meetecho/asterisk-opus/archive/master.zip
unzip master.zip

●Asterisk11をDLしてOpus対応パッチを適用します。
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-11.1.2.tar.gz
tar zxvf asterisk-11.1.2.tar.gz
cd asterisk-11.1.2
cp /usr/src/asterisk-opus-master/asterisk_opus+vp8.diff ./
patch -p1 -u < asterisk_opus+vp8.diff
AsteriskのOpus対応手順(Asterisk11、Asterisk13共通)
●必要に応じて日本語音声ファイルなどを導入します。
./bootstrap.sh
./configure --prefix=/usr
make menuselect
(sshからメニューセレクトが起動しない場合はSSHのウィンドウサイズを大きくする。)
「Codec Translators」の項目でOpusが有効になっていることを確認する。
「Core Sound Packages」の項目で、CORE-SOUNDS-JA-*を選択する。(好みのフォーマットを選択する。)

●コンパイルしてインストールします。
make
make install
make samples
make config


●再起動後は自動でAsteriskが立ち上がります。
reboot



Opusを使う
●sip.confでOpusの使用を許可します。
/etc/asterisk/配下の「sip.conf」で、使用可能コーデックに以下を追加します。
allow=opus

あとは各種コンフィグファイルを適切に設定すれば、Asterisk側は準備完了です。


●「Opus」に対応したSIPクライアントを選びます。

有料では「Bria」、Acrobits製の「Groundwire」「Softphone」、無料では「Zoiper」「CSipSimple」「LinPhone」「Grandstream Wave」などが「Opus」に対応しています。
(CSipSimpleは追加のCodecPackをインストールすることで、Opusが使用可能となります。)

SIPクライアントについては<SIPクライアント(AndroidのIP電話アプリ)の比較> を参考にして頂ければと思います。


Opus対応のSIPクライアントで、使用コーデックにOpusを選択すれば完了です。


感想
Opusはとにかく高音質でネットワーク負荷も非常に小さく、非の打ち所がありません。

しかし、私のケータイ収容環境は「chan_mobile」を使ったBluetooth接続になります。
これでは、HFPでの音質劣化の方が大きく、せっかくのOpusが活かしきれません。

ですが、家族間での無料通話(内線)には有効です。
ただ、高音質になりすぎて、「電話で喋っている」という感覚ではなくなり、少し不気味です(笑)


この超高音質コーデックを活かせる環境は、前述の家族間の通話と、ひかり電話や各ISPが提供するIP電話になると思います。
また、HDVoiceに対応したHFP1.6を使ったChan_mobileでも、その真価が発揮できるものと考えていますが、これはまたあとの話にしたいと思います。

2015年5月5日火曜日

Asteriskで留守電を超簡単に構築する

「留守電なんかいらないや」と思い、留守番電話を外しました。
そうして、今まで気軽に言っていた「電話に出られなかったら留守電にお願いします。」が言えなくなってしまいました。

なくなるとなくなるで、今まで留守電を便利に使っていたことに気付きます。




そこで、Asteriskを使って留守電を構築したいと思います。
ただし、「ボイスメールで留守電構築!」なんて難しいことはしません。




【 FUSION IP-Phone SMART 】

留守電には「FUSION IP-Phone SMART」を使います。
「FUSION IP-Phone SMART」は留守電が無料で使えるIP電話サービスです。


以下、公式サイトとWikiより抜粋
 IP-Phone SMARTはスマートフォン、PC、タブレット端末上の通話アプリから、Wi-FiやLTEネットワークを経由してフュージョンのIP電話プラットフォームへ接続します。電話網を介して携帯電話や固定電話との通話が可能になり、これまでの電話と変わらない感覚と格安料金での電話サービスをご提供します。

  • 基本料金無料で050で始まるIP電話を利用できるサービス。IP-Phone SMART 同士の通話は無料。
  • IP-Phone SMARTは初期費用・月額料金・留守番電話・着信転送・非通知・指定番号の着信拒否の機能が全て0円。発生する料金は通話料のみですので、気軽にお申込みいただけます。
  • その他向けの通話料は一律8.4円/30秒。携帯電話の通話機能よりも多くの場合安い。


  • この「FUSION IP-Phone SMART」(以降、FUSIONと略します。)は、FUSION同士の通話はもちろんのこと、留守電も無料で使うことができます。

    FUSIONの留守電は非常に高機能です。

    留守電が残されると、すぐにメールで音声メッセージが送られてきます。
    音声データは高音質で小容量のRiffWavです。

    また、留守録の再生はウェブからも行えるため、PCなどでも簡単に留守電が聞けます。

    なお、FUSIONと同じ機能をAsterisk(Linux)で構築することもできますが、かなりの手間です。
    Asteriskの設定だけではなく、WEBサーバを建てたり、メールサーバを建てたりと・・・。

    そんなこと、ものぐさな私はやりたくありません。



    【 FUSIONの留守電機能をAsteriskに取り込む 】

    わざわざ苦労してLinuxで各種サーバを構築する必要なんてありません。
    FUSIONに便利な留守電機能が無料で用意されているわけですから、これを利用します。

    やり方は簡単です。
    Asteriskの着信を一定時間後にFUSIONに転送するだけです。

    こうすれば、電話に出られないときは自動的にFUSIONに転送され、留守電に変わります。

    ここで重要なことは、お金を一切かけないことです。

    通常、着信を転送すると、転送先までの通話料がかかってしまいます。
    しかし、これをAsteriskとFUSIONのコラボレーションで無料にします。



    【 原理 】

    原理なんていう難しいものはありません。
    ただ、相手からの着信を2回転送するだけです。(厳密には1回は転送ではなくて発信です。)
    1. 相手からの着信を、Asteriskで受けます。(「ブラステル」や「つなぐ」など)
    2. 電話に○○秒間出なければ、着信をAsterisk内部でFUSION(A)に転送します。(無料)
    3. FUSION(A)からFUSION(B)に発信します。(無料)
    4. FUSION(B)は留守電設定をしておきます。(無料)
    ここでは、わかりやすくするために、あえて「FUSION(A)、(B)」としましたが、実はこの(A)と(B)は同一アカウント(同じ番号)で構いません。

    FUSIONは自分で自分に発信すると、必ず留守電になります。
    これは、発信したことで、その回線が話し中となるためです。

    これで複数アカウント取得による、追加料金も掛かりません。



    【 Asteriskの設定方法 】

    ◆ ブラステルをメインで使い、留守電はFUSIONで構築する設定例を紹介します。

    [sip.conf]
    [general]
    context=default
    bindaddr=0.0.0.0
    bindport=5062
    language=ja
    allowguest=no
    localnet=192.168.0.0/255.255.255.0
    
    disallow=all
    allow=ulaw
    allow=alaw
    allow=gsm
    allow=g729
    
    
    ; Brastel 050 Free
    register => ユーザID:パスワード@softphone.spc.brastel.ne.jp/201
    
    ; FUSION IP-Phone SMART
    register => ユーザID:パスワード@smart.0038.net
    
    
    [brastel]
    type=friend
    username=ユーザID
    fromuser=ユーザID
    secret=パスワード
    fromdomain=softphone.spc.brastel.ne.jp
    host=softphone.spc.brastel.ne.jp
    context=default
    insecure=invite
    canreinvite=yes
    
    [FUSION]
    type=friend
    username=ユーザID
    fromuser=ユーザID
    secret=パスワード
    host=smart.0038.net
    fromdomain=smart.0038.net
    context=default
    insecure=invite
    canreinvite=yes
    
    [201]
    type=friend
    defaultuser=201
    secret=sugoi_nagai_pasuwa-do
    canreinvite=yes
    host=dynamic
    context=201
    


    [extensions.conf]
    [default]
    exten => _X.,1,Dial(SIP/201,30)
    ; ↑30秒間呼び出す。
    exten => _X.,n,Answer()
    ; ↑Asterisk側が受話
    exten => _X.,n,Wait(1)
    ; ↑1秒待機して
    exten => _X.,n,Dial(SIP/05012345678@FUSION)
    ; ↑FUSION回線で自分から自分に発信
    exten => _X.,n,Hangup
    
    [201]
    ; 国際電話の禁止
    exten => _00.,1,Answer()
    exten => _00.,n,Wait(1)
    exten => _00.,n,Hangup
    
    exten => _010.,1,Answer()
    exten => _010.,n,Wait(1)
    exten => _010.,n,Hangup
    
    ; 緊急通報と各種案内へ発信(現在、緊急通報は未対応)
    exten => _1XX,1,Dial(SIP/${EXTEN}@brastel,120,r)
    exten => _1XX,n,Hangup
    
    ; 通常発信
    exten => _0.,1,Dial(SIP/${EXTEN}@brastel,120,r)
    exten => _0.,n,Hangup
    


    【まとめ・感想】

    通常のダイヤルプランにたった3行追加するだけで、高音質・高機能で無料の留守電が構築できました。

    使って頂ければわかりますが、2回転送していても交換機(Asterisk)内での処理となるため、音質の劣化はありません。

    難点は、留守電メールでは相手先の番号がわからないことでしょうか。
    これは、留守電に自分のFUSION回線から発信するため、留守電メールに自分の番号が記載されることによります。

    とは言っても、同一時刻に相手の電話番号からの不在着信がSIPクライアントに通知されています。よって、これは特に問題にはならないと思います。


    以前は、キャリアの転送機能を使ってFUSIONに転送していたため、その分の通話料が掛かっていました。
    今回のAsteriskとFUSIONのコラボにより、通話料も一切かからない留守電が構築できました。

    かなり満足です♪

    2015年3月22日日曜日

    Asteriskに関するメモ

    ここ最近はAsteriskいじりが日課になっています。
    自らのスキルアップと同時に、それがそのまま音質の向上に繋がります。
    これはやっていて非常に楽しいです♪


    AsteriskでIP-PBXを構築する上で、障壁となりそうなことを備忘録として残します。
    大まかですが、以下のようなことです。
  • メモっておかないと忘れてしまうようなこと。
  • 日本のサイトでは情報を得られなかったこと。
  • 試行錯誤でやっと結果が得られたもの。
  • 頑張っても結果が得られないもの。

    なお、これは本当に私用のメモです。
    わかりやすく書いているわけではないので、参考にされる方がいたらごめんなさい。


    【 「Raspberry Pi(B+と2B)」にインストールした「Asterisk」に「G.729a」を対応させる(無料) 】

    Raspberry PiはARM系CPUのため、バイナリ配布型のG729aが使えない。
    そのため、専用コンパイラを用いて、G729をインストールする。
    さらに、本来有料であるはずのG729はこれで無料となる。(ロイヤリティフリーのものを使う。)

    ●「Raspberry Pi B+」編
    Asteriskインストール後
    apt-get install dh-autoreconf
    cd /tmp

    <bcg729のインストール>
    wget http://download-mirror.savannah.gnu.org/releases/linphone/plugins/sources/bcg729-1.0.0.tar.gz
    tar xzf bcg729-1.0.0.tar.gz
    cd bcg729-1.0.0
    ./configure --libdir=/lib
    make
    make install

    <G729のインストール>
    cd ..
    wget http://asterisk.hosting.lv/src/asterisk-g72x-1.2.tar.bz2
    tar xjf asterisk-g72x-1.2.tar.bz2
    cd asterisk-g72x-1.2
    ./autogen.sh
    ./configure --with-bcg729
    make
    make install

    asterisk -vvvvr
    core restart gracefully


    ●「Raspberry Pi 2B」編
    Asteriskインストール後
    apt-get install dh-autoreconf
    cd /tmp

    <bcg729のインストール>
    wget http://download-mirror.savannah.gnu.org/releases/linphone/plugins/sources/bcg729-1.0.0.tar.gz
    tar xzf bcg729-1.0.0.tar.gz
    cd bcg729-1.0.0
    ./configure --libdir=/lib
    make
    make install

    <G729のインストール>
    cd ..
    wget http://asterisk.hosting.lv/src/asterisk-g72x-1.2.tar.bz2
    tar xjf asterisk-g72x-1.2.tar.bz2
    cd asterisk-g72x-1.2
    ./autogen.sh
    ./configure --with-bcg729

    出来上がった「Makefile」を編集する
    205行目「-march=」を「-march=armv7-a」に編集

    make
    make install

    asterisk -vvvvr
    core restart gracefully



    【 Asterisk11で3Gモデム(Chan_dongle)を使う 】

    <Asterisk11のインストール>
    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.16.0.tar.gz

    (11.16.0にした理由は、11系のひかり電話対応パッチ導入可能な最終Verのため。)

    tar zxvf asterisk-11.16.0.tar.gz
    cd asterisk-11.16.0
    ./contrib/scripts/install_prereq install
    (Windowが出てきたら「81」を入力) ※30分ぐらい時間がかかるかも。
    ./bootstrap.sh
    ./configure
    make
    make install
    make samples
    make config

    <Asterisk11対応Chan_dongleのインストール>
    cd /usr/src
    wget https://github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip
    unzip asterisk11.zip
    cd asterisk-chan-dongle-asterisk11
    aclocal
    autoconf
    automake -a
    ./configure
    make
    make install
    cp etc/dongle.conf /etc/asterisk/



    【 Asterisk12で3Gモデム(Chan_dongle)を使う(失敗) 】

    <Asterisk12のインストール>
    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-12.8.1.tar.gz

    tar zxvf asterisk-12.8.1.tar.gz
    cd asterisk-12.8.1
    (Windowが出てきたら「81」を入力) ※30分ぐらい時間がかかる。
    ./bootstrap.sh
    ./configure
    make
    make install
    make samples
    make config


    <Asterisk12対応Chan_dongleのインストール>
    cd /usr/src
    wget https://github.com/superles/chan-dongle-asterisk12/archive/master.zip
    unzip master.zip
    cd chan-dongle-asterisk12-master
    aclocal
    autoconf
    automake -a
    ./configure
    make
    make install
    cp etc/dongle.conf /etc/asterisk/

    通話不可



    【 Asterisk13で3Gモデム(Chan_dongle)を使う(失敗) 】

    Asterisk12と基本的なやり方は同じ。
    chan_dongleは作者によって2つ存在する。
    が、そのどちらも未完成に思える。もしくはARM系に対応していないか(?)

    以下からダウンロード可能。

    novaktmp氏作
    https://forum.openwrt.org/viewtopic.php?id=54343

    rusxakep(Mikhail Baykov)氏作
    https://github.com/rusxakep/asterisk-chan-dongle/tree/asterisk13



    【 ひかり電話対応パッチを当てる 】

    Asterisk1.8系と11系でそれぞれパッチ適用可能な最終バージョンを検討する。
    say.cとapp_voicemail.cはついで。

    <ひかり電話対応最終バージョン(Asterisk1.8)>
    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-1.8.27.0.tar.gz
    tar xzvf asterisk-1.8.27.0.tar.gz
    cd asterisk-1.8.27.0
    wget http://ftp.voip-info.jp/asterisk/patch/local/1.8/channels/chan_sip.rt200ne.110205-01.patch
    wget http://ftp.voip-info.jp/asterisk/patch/1.8.20.1/say.c.101025-01.patch
    wget http://ftp.voip-info.jp/asterisk/patch/1.8.20.1/app_voicemail.c.101025-01.patch
    patch -p0 < chan_sip.rt200ne.110205-01.patch ←なんか出ても「y」で。
    patch -p0 < say.c.101025-01.patch
    patch -p0 < app_voicemail.c.101025-01.patch

    <ひかり電話対応最終バージョン(Asterisk11)>
    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.16.0.tar.gz
    tar xzvf asterisk-11.16.0.tar.gz
    cd asterisk-11.16.0
    wget http://ftp.voip-info.jp/asterisk/patch/local/11/channels/chan_sip_rt200ne.141204-01.patch
    wget http://ftp.voip-info.jp/asterisk/patch/11.13.0/say.c.121107-01.patch
    wget http://ftp.voip-info.jp/asterisk/patch/11.13.0/app_voicemail.c.121107-01.patch
    patch -p0 < chan_sip_rt200ne.141204-01.patch ←なんか出ても「y」で。
    patch -p0 < say.c.121107-01.patch
    patch -p0 < app_voicemail.c.121107-01.patch



    【 AsteriskにBluetoothケータイを直接収容する(Chan_mobile) 】

    Asteriskインストール時に「make menuselect」よりChan_mobileは有効にしておく。

    BTドングル 挿す

    apt-get install bluetooth bluez libbluetooth-dev bluez-utils blueman

    ラズパイに挿したBTドングル情報の確認
    hcitool dev

    Devices:
    hci0 00:19:86:00:08:**

    周辺のBTデバイスのスキャン
    hcitool scan

    Scanning ...
    A0:DD:E5:42:DB:** WS027SH
    AC:9E:17:09:CF:** Nexus Player

    ペアリング
    bluez-simple-agent hci0 A0:DD:E5:42:DB:**
    これがラズパイが接続しに行くコマンド
    接続に失敗することが多々あるが粘る

    hciconfig hci0 piscan
    bluetooth-agent 0000
    こっちがラズパイが接続待ちになるコマンド

    Ctrl+zで待受状態脱出
    /etc/init.d/bluetooth restart


    ペリングしたBTデバイスと自動接続
    bluez-test-device trusted A0:DD:E5:42:DB:** yes
    bluez-test-input connect A0:DD:E5:42:DB:**

    chan_mobileの設定
    nano /etc/asterisk/chan_mobile.conf

    [adapter]
    id=WS027SH
    address=A0:DD:E5:42:DB:**



    【 Asteriskの日本語音声対応 】

    自動応答させる際などに使う。(IVR)

    nano /etc/asterisk/asterisk.conf
    languageprefix = yesのコメントアウトを外す。

    sip.confに以下追加
    [general]
    language=ja

    cd /tmp
    wget http://ftp.voip-info.jp/asterisk/sounds/1_6/asterisk-sound-jp_16_pre.tar.gz
    tar xzvf asterisk-sound-jp_16_pre.tar.gz

    ・Asterisk1.8
    mv ja/ /usr/share/asterisk/sounds/

    ・Asterisk11
    mv ja/ /var/lib/asterisk/sounds/



    【 擬似ビジー音と切断音の導入 】

    これは結構重用。
    内線通話ではビジー及び切断が非常にわかりにくいため、これを擬似的に自分で鳴らしてしまう。
    「プーップーップー・・・・プツ」ってやつ。

    ・Asterisk1.8
    cd /usr/share/asterisk/sounds/ja

    ・Asterisk11以降
    cd /var/lib/asterisk/sounds/ja

    wget https://sites.google.com/site/azukarijo2/busy-sound.gsm
    wget https://sites.google.com/site/azukarijo2/disconnect-sound.gsm

    extensions.confに、鳴らしたい場所で以下のように記載。
    (「_0.」のところは適宜変更)

    (例)
    exten => _0.,n,Playback(busy-sound)
    exten => _0.,n,Playback(disconnect-sound)
  • 2015年2月28日土曜日

    カケホを契約していない端末でカケホを利用する【つなぐ】

    Bluetooth-VoIPゲートウェイから始まった【つなぐ】ですが、いまやその種類が増え、開発中のものを含め、4種類となりました。
    種類が増えることは良いことなのですが、それだけ一つ一つが分かり辛くなってきます。




    そこで、複数ある【つなぐ】について整理をしたいと思います。


    【 「つなぐ」とは何か? 】

    以前は、『話し放題を契約したガラケーを、スマホから利用できるようにすること』と、説明していました。
    しかし、現在は3G版【つなぐ】や、アプリ版【つなぐ】があることから、その説明が合わなくなってきました。
    今の【つなぐ】は、次のような説明がしっくり来ると思います。

    『話し放題を契約してない端末から、話し放題を利用すること』


    なお、今までの【つなぐ】に関する記事は、ブログ右側(スマホサイトの場合は一番下)のメニュー「つなぐ」からご覧ください。



    【 4種類の異なる「つなぐ」 】

    現在は以下の4種類の【つなぐ】が存在します。

  • BT-GW版【つなぐ】
  • 3G版【つなぐ】
  • BT版【つなぐ】
  • アプリ版【つなぐ】


    「BT-GW版」、「3G版」、「BT版」【つなぐ】は、VoIPを利用します。
    アプリ版【つなぐ】はキャリア回線(PSTN)を利用します。
    まずは、これが大きな違いとなります。

    各【つなぐ】は、それぞれ特徴が異なりますので、簡単に説明していきます。
    なお、金額の紹介では、月々サポートや各種キャンペーンは除外した料金としています。


    ◆ BT-GW版【つなぐ】
    Bluetooth-VoIPゲートウェイとIP-PBXにより構成されます。
    これと、話し放題を契約したケータイをBluetooth接続することで実現します。
    常時持ち歩く端末はスマホ1台のみです。
    なお、発信者番号は、話し放題回線の番号が通知されます。


    <メリット>
  • 理屈上、PHS含めどのキャリアでも収容できる。

    <デメリット>
  • 高価

    <月額費用>
    話放題回線料(¥1500~2200)
    MVNO料金(¥1000程度から)

    例)1人で利用した場合
      2200+1000=¥3200

    例)5人が個々に使った場合(カケホを2200円として計算)
      (2200+1000)×5=¥16000

    例)5人でシェアした場合
      2200+(1000×5)=¥7200


    ◆ 3G版【つなぐ】
    3Gモデム(話し放題SIM入り)が接続されたIP-PBXのみで構成されます。
    常時持ち歩く端末はスマホ1台のみです。
    なお、発信者番号は、話し放題回線の番号が通知されます。


    <メリット>
  • 音声SIMカードをUSBモデムに直接差し込むため、別途ケータイを必要としない。
  • 導入費がBT-GW版【つなぐ】の約半額。

    <デメリット>
  • 使えるSIMはドコモとソフトバンク(Y!mobileの3G含む)のみ。

    <月額費用>
    話放題回線料(¥2200)
    MVNO料金(¥1000程度から)

    例)1人で利用した場合
      2200+1000=¥3200

    例)5人が個々に使った場合(カケホを2200円として計算)
      (2200+1000)×5=¥16000

    例)5人でシェアした場合
      2200+(1000×5)=¥7200


    ◆ BT版【つなぐ】
    話し放題ケータイとBluetooth接続されたIP-PBXで構成されます。
    常時持ち歩く端末はスマホ1台のみです。
    なお、発信者番号は、話し放題回線の番号が通知されます。

    <メリット>
  • 理屈上、PHS含めどのキャリアでも収容できる。
  • 導入費がBT-GW版【つなぐ】の約半額。

    <デメリット>
  • 非常に相性が強く、そのケータイを収容可能かどうかはやってみるまで分からない。(高確率で収容できない。)
  • LinuxとケータイとをBTペアリングさせる知識を要する。

    <月額費用>
    話放題回線料(¥1500~2200)
    MVNO料金(¥1000程度から)

    例)1人で利用した場合
      2200+1000=¥3200

    例)5人が個々に使った場合(カケホを2200円として計算)
      (2200+1000)×5=¥16000

    例)5人でシェアした場合
      2200+(1000×5)=¥7200


    ◆ アプリ版【つなぐ】
    今までの【つなぐ】とは異色の存在。
    話し放題回線の転送先を変更することにより、別の端末から無料発信が可能。
    家族間無料通話と話し放題回線とを組み合わせることにより実現する。
    上記操作をアプリで自動化することにより、シームレスな発信を行う。
    なお、発信者番号は話し放題回線の番号ではなく、アプリを入れた端末の電話番号が通知される。


    <メリット>
  • キャリア回線を使うため、安定した通話が可能。
  • 初期導入費が安価。
  • 発信者番号を自分の持つ(話し放題ではない)ケータイの電話番号にできる。
  • 着信時は話し放題回線を経由しない。

    <デメリット>
  • 発信するまでに少し時間がかかる。
  • 2台持ちになる。(通信不要であれば、ガラケーのみで1台持ち可)
  • ソフトバンク未対応。
  • (開発中のためまだ利用できない。)

    <月額費用>
    話放題回線料(¥2200)
    au最安料金プラン+Eメール(ガラケー:¥1043 スマホ:¥1234)
    MVNO料金(¥1000程度から)
    アプリ利用料(¥84)

    例)2人で利用した場合(1人で利用は無意味なので2人を掲載)
      2200+(1043~1234+1000+84)×2=¥6454~¥6836

    例)5人でシェアした場合
      2200+(1043~1234+1000+84)×5=¥12835~¥13790



    【 「つなぐ」の選び方 】

    まず、理解して頂いきたいのが、音質についてです。
    音質と言っても、音のキレイさではありません。
    「音声が途切れない」などの品質になります。

    「BT-GW版」、「3G版」、「BT版」はすべてVoIPと呼ばれる技術を用いて通話します。
    VoIPでの通話は、9割は完璧です。
    しかし、残りの1割(電波の弱い場所など)は通話相手がかなり聞き取りづらい状況となります。

    よって、この1割をも網羅するためには「アプリ版【つなぐ】」が必須となります。『VoIP版【つなぐ】』(※)は向きません。

    まず、以上が大前提となります。それを踏まえた上で、以降の導入編をお読みください。


    【つなぐ】を選ぶ上でまず必要なことは、導入費及び月額料金、そして用途です。

    導入費などの金額は、キャリアの施策によって大きく変動します。
    よって、ここでは金額については触れず、用途別に【つなぐ】の選び方の一例を紹介します。
    なお、それぞれの【つなぐ】で何ができるか?ではなく、「○○にはどの【つなぐ】が向いているか?」の形式で紹介したいと思います。


    ※ ここでは「BT-GW版」、「3G版」、「BT版」【つなぐ】を総称して、『VoIP版【つなぐ】』と言います。



    ◆ スマホの2台持ちになっても構わない。・・・アプリ版【つなぐ】

    ◆ 2台持ちは嫌だ、1台持ちにしたい。・・・VoIP版【つなぐ】

    ◆ 回線をシェアして且つ、発信者番号をそれぞれ異なるものとしたい。・・・アプリ版【つなぐ】

    ◆ キャリアの契約を極力減らしたい。・・・VoIP版【つなぐ】

    ◆ 家の固定回線が遅い、もしくは不安定。・・・アプリ版【つなぐ】

    ◆ 利用は自分一人。用途はプライベート。・・・VoIP版【つなぐ】

    ◆ とにかく安くすることが目的。安ければ大抵のことは許容できる。・・・VoIP版【つなぐ】



    【 まとめ 】

    スマホの2台持ちになっても構わない人や、VoIPが嫌な人は、アプリ版【つなぐ】がお勧めです。
    スマホやケータイの2台持ちから開放されたい、スマホ1台に集約したいという人は、VoIP版【つなぐ】がお勧めです。

    しかし、アプリ版【つなぐ】は現在まだ開発中です。(BitBadOldMan氏による)
    開発が完了した時点であらためて紹介するとともに、BitBadOldMan氏への利用申込手段も考えたいと思います。


  • アプリ版【つなぐ】オーダーフォームへ(未設置)

  • VoIP版【つなぐ】オーダーフォームへ(提供終了)



    VoIP版【つなぐ】は多少の英語とLinuxの知識さえあれば、自分でも製作可能です。
    上記のVoIP版【つなぐ】オーダーは自分で作れない人のために、私が一式製作してお送りするものです。
    可能であれば、自分で楽しみながら作ることをお勧めします。

    なお、アプリ版【つなぐ】も、プログラムが書ける人(スマホアプリが作れる人)であれば制作可能です。
    しかし、学生時代に友人の書いたプログラムを、丸写しして提出していたような私にはさっぱりわかりません\(^o^)/
  • 2015年2月15日日曜日

    Asteriskに最強コーデックの「Opus」を対応させる

    Asteriskに「Opus」を対応させました。
    これにより、超高音質で低遅延な環境が出来上がりました。
    「Opus」については、以前書いた記事<VoIPに音声コーデック「Opus」を使いたい>をご覧ください。




    毎度のことですが、ここに至るまでにはかなりの時間を費やしました。
    しかし、成功してしまうとあっけないもので、難易度はそれほど高くありません。

    今回は、AsteriskにOpusを対応させた備忘録を残します。



    【 環境 】

    ハードウェアには「Raspberry Pi B+」を用い、Linuxディストリビューションには「Raspbian」(Debian)を使いました。
    同様の手順でArchLinuxやFedoraなどにも対応できると思いますが、今回は未確認です。

    また、CuBox-i2(Debian+Asterisk)でも、全く同じ手順でOpusに対応させられました。
    なお、後述する検証結果については、この「CuBox-i2」によるものです。



    【 Asteriskのインストール~Opus対応手順 】

    私はものぐさなのでsudoなどは使わず、すべてrootで作業します。
    
    ●元々Asteriskがインストールされている場合は、まずはそれを削除します。
    apt-get --purge remove asterisk
    rm -r /usr/lib/asterisk/modules
    
    ●パッケージリストを更新します。
    apt-get update
    
    ●開発に必要なパッケージ類などをインストールします。
    apt-get install autoconf automake pkg-config
    apt-get install libncurses5-dev
    apt-get install uuid-dev
    apt-get install libjansson-dev
    apt-get install libxml2-dev
    apt-get install libsqlite3-dev
    apt-get install libssl-dev
    apt-get install libopus-dev
    
    
    ●Asterisk Ver11.9.0をダウンロードして、解凍します。
    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.9.0.tar.gz
    tar zxvf asterisk-11.9.0.tar.gz
    
    ●AsteriskにOpus対応パッチを当てて、makeします。
    cd asterisk-11.9.0
    wget https://raw.githubusercontent.com/netaskd/asterisk-opus/master/asterisk-11.5.0_opus+vp8.diff patch -p1 -u < asterisk-11.5.0_opus+vp8.diff ./bootstrap.sh ./configure make menuselect (Codec TranslationsにOpusがあることを確認するだけ。省略可。) make make install make samples make config ●再起動後、自動でAsteriskが立ち上がります。 reboot


    【 Asterisk実行ユーザの変更 】

    インストールした直後のAsteriskは、root権限で稼働します。
    これは、セキュリティ上好ましくないため、ユーザに「asterisk」を追加し、そのユーザ権限でAsteriskを実行させます。
    (root権限のまま実行していても、実用上の問題はありません。)
    
    ●「asterisk」というユーザを追加し、権限などの調整をします。
    groupadd -g 5060 asterisk
    useradd -g 5060 -u 5060 -d /var/lib/asterisk -s /sbin/nologin asterisk
    chown -R asterisk:asterisk /var/run/asterisk
    chown -R asterisk:asterisk /var/lib/asterisk
    chown -R asterisk:asterisk /var/log/asterisk
    chown -R asterisk:asterisk /var/spool/asterisk
    chown -R asterisk:asterisk /usr/lib/asterisk
    chown -R asterisk:asterisk /etc/asterisk
    chmod -R u=rwX,g=rX,o= /var/run/asterisk
    chmod -R u=rwX,g=rX,o= /var/lib/asterisk
    chmod -R u=rwX,g=rX,o= /var/log/asterisk
    chmod -R u=rwX,g=rX,o= /var/spool/asterisk
    chmod -R u=rwX,g=rX,o= /usr/lib/asterisk
    chmod -R u=rwX,g=rX,o= /etc/asterisk
    
    ●Asteriskの設定ファイルを編集します。
    nano /etc/asterisk/asterisk.conf
    
    ・以下のコメントアウトを外す。
    [options]
    ;runuser = asterisk
    ;rungroup = asterisk
    ↑
    この2ヶ所の「セミコロン」を削除
    
    ●リブート
    reboot
    
    ●リブート後、ユーザ「asterisk」でAsteriskが稼働しているか確認します。
    asterisk -vvvvr
    
    次のように表示されていれば成功です。
    Running as user 'asterisk'                       
    Running under group 'asterisk'
    
    
    
    【 Opusを使う 】
    
    ●sip.confでOpusの使用を許可します。
    allow=opus
    
    
    これでAsteriskでOpusが使えるようになります。
    
    
    ●「Opus」に対応したSIPクライアントを使います。
    
    Acrobits製の「Softphone」や「Groundwire」、また、フリーでは「CSipSimple」が「Opus」に対応しています。
    


    【 音質の検証 】

    今まで幾度となくチャレンジしてきた「Opus」ですが、やっとその実力を検証できます。
    ただ、今回は音声の録音と遅延の測定ができませんでした。

    これは、何か理由があってできなかったわけではなく、単純に時間的な制約です。
    詳細の検証結果を挙げる前に、まずはAsteriskのOpus対応化を記事にしたく、先行しての投稿です。


    録音や遅延の計測は、また後ほど行いたいと思います。
    まずは言葉だけで「Opus」の音質を説明します。


    「Opus」を扱えるSIPクライアントはあまり多くありませんが、幸いなことに「CSipSimple」と「Acrobits Groundwire」が対応しています。
    この2つのアプリがあれば、他は要りません。この2アプリで十分です。

    まず、これらアプリの比較です。
    同じ「Opus」であっても、「CSipSimple」と「Groundwire」とで音質がかなり異なりました。

    さらに「Groundwire」では使うスマホによっても、かなり音質が異なりました。
    たとえば、SC-01Fでは音質はあまり良くなく、L-01FやSH-07Dはなかなかの音質でした。

    一方、「CSipSimple」はどんな機種を使ってもメリハリのある音質で、音声データから綺麗にノイズが除去されてクリアな音と言うか・・・なんて言うかドライな音質でした。
    これはかなり私好みで、文句のつけようがないレベルでした。


    続いて、トランスコーディングの検証です。

    発信側と着信側で要求するコーデックが異なる際は、リアルタイムに音声変換されます。
    これをトランスコーディングと言いますが、「Opus」からのトランスコーディング(またはその逆)はかなりCPU負荷がかかってしまうのではないかと懸念しました。

    しかし、「Raspberry Pi」と同じARM系CPUを積んだ「CuBox-i2」で、10%程度のCPU負荷となりました。
    ということは「Raspberry Pi」では20%程度の負荷に収まると思われます。
    最近発売された「Raspberry Pi 2」であれば5%程度ではないでしょうか。


    さて、肝心な音質についてですが、「発信側→着信側」の順に、
  • 「Opus」→「Opus」:非常に綺麗で文句なし。
  • 「G711u」→「Opus」:非常に綺麗で文句なし。
  • 「Opus」→「G711u」:非常に綺麗で文句なし。
  • 「Opus」→「iLBC」:宇宙人がしゃべっている感じ

    「Opus」→「iLBC」のトランスコーディングがNGです。
    あまりにもひどい音質で、遅延も3秒ぐらいあります。
    不思議に思い、Asterisk側から確認してみると、それもそのはずで、トランスコーディングに失敗していました。

    これ以外にも、いくつかトランスコーディングに失敗するケースがありました。(自動応答による音声案内など)
    コーデックを「Opus」にして、天気予報を聞くと、ひどい音質となりました。
    なお、この現象はSIPクライアントに依存する部分があるようでしたが、これについては検証しきれませんでした。


    続いて、遅延の計測ですが、これはいつもの様に波形から遅延時間を計測したわけではありません。
    あくまでも体感です。そのため、あまり当てになりませんので、参考程度としてください。

    まず、トランスコーディングに失敗しない限り、今までにないぐらい低遅延です。
    SH-07Dという超低スペック機種でも遅延に影響しないぐらい、スマホへの負荷も少ないです。

    ただ、SC-01F(ギャラクシーノート3)だけはあまり低遅延とは思えませんでした。(この機種だけはiLBCのほうが高音質・低遅延でした。)


    最後に使用帯域について触れたいと思います。

    Linuxの機能(iftop)を用いて主要コーデックの使用帯域を測定しました。
    Opusを使った場合は、26~30kbpsの回線速度を必要としました。

    《主要コーデックによる使用帯域一覧》
    コーデック 使用帯域
    G711u : 78kbps
    iLBC
     : 23.6kbps
    Opus
     : 26~30kbps(可変)
    GSM
     : 28.7kbps

    やはりG711uはかなりの帯域を必要とします。
    これを見ると、やはり3G/LTE回線下では「Opus」や「iLBC」などの音声コーデックの必要性を感じます。


    今回の検証はこれで終わります。



    【 感想 】

    「Opus」自体は現時点で間違いなく最強の音声コーデックです。
    しかし、Asteriskは最新バージョンの13であっても「Opus」に正式対応していません。
    そのためか、トランスコーディングに失敗するケースがあったりと、まだまだ不安定な一面もあります。

    正直な感想としては、どんなに「Opus」が素晴しかろうが、周りがそれを活かせていないように感じました。


    今後Asteriskが「Opus」に正式対応することがあれば、必須になるコーデックだと思います。
    しかしながら、現時点では、不安定な一面もあることから、まだ「マニア向けコーデック」という位置付けでしょうか。

    音質は最高であることは保証します。
    しかし、安定動作させるためには、もう少し検証が必要だと感じました。


    私はこの「Opus」と【つなぐ】(※)は最高の組み合わせになると考えています。
    そのため、なんとしても安定動作させたいところです。

    ※ 【つなぐ】とは何かは、以下の記事をご覧ください。
    ガラケー(話し放題)と、スマホ(MVNO)を【つなぐ】>(概要説明)
    MVNO(データSIM)で「話し放題」を実現する 【つなぐ】>(設定紹介)


    今回の検証はここで終わりますが、今後、ハードとOSを変えて、さらなる検証を進めていきたいと思います。

  • 2015年1月13日火曜日

    3GモデムをAsteriskに【つなぐ】

    今まで「GP-712」や「GP-710」を使って【つなぐ】(※)を構築してきました。

    しかし、これらは非常に高価です。
    これらで【つなぐ】を構築すると、トータルで4万円以上かかります。
    そこで、もっと安価に【つなぐ】を構築できないかを考えます。


    ※ 【つなぐ】とは何かは、以下の記事をご覧ください。
    ガラケー(話し放題)と、スマホ(MVNO)を【つなぐ】>(概要説明)
    MVNO(データSIM)で「話し放題」を実現する 【つなぐ】>(設定紹介)




    しかしながら、2万も3万もする「GP-710」や「GP-712」を使った時点で、すでにもう高価です。
    そこで、「GP-71x」の代わりに、安価な「Huawei製の3Gモデム」で【つなぐ】を構築してみました。

    これならば、導入費を半額以下に抑えられると同時に、別途ガラケーを用意する必要もなくなります。



    【必要な機材と設置】

  • IP-PBX(Asterisk)
  • Huawei 3Gモデム(※1)
  • スマホ(普段使い用)


    「IP-PBX」は今までどおり、「Raspberry Pi」を使います。
    そして、今回は「GP-71x」ではなく、代わりに「3Gモデム」を使います。

    設置は簡単です。
    「3Gモデム」のSIMスロットにドコモなどのSIMカードを装着して、「Raspberry Pi」にUSB接続するだけです。(※2、※3)
    なお、「3Gモデム」のSIMスロットは標準サイズが多いので、必要に応じてSIMアダプタを介します。

    ※1 使用可能モデル一覧は<このサイト>を参考にしてください。
    ※2 auは規格が違うため利用できません。
    ※3 一部のY!mobile(タイプ2)およびPHSは利用できません。




    【chan_dongleのインストール ~ Asteriskの設定】

    USBの3GモデムをAsteriskに接続するためには「chan_dongle」を使います。

    導入方法はすべてこのサイトのとおり実行するだけです。
    Wiki Chan_dongle


    ・・・それだけではあまりにも気が利かないので、ここではもっと簡単に、「chan_dongle」を使えるようにします。


    以下は、上記サイトを参考に、我流でインストールした備忘録です。

    OSには「Raspbian」を使いました。
    多分「RasPBX」でも問題ないと思いますが、動作未確認です。
    RasPBXを使う場合は、Asteriskのインストールは不要です。


    ● Asteriskをインストールします。
    apt-get install asterisk

    ● 続いて開発者ツールをインストールします。
    apt-get install asterisk-dev

    ● 3Gモデムを使えるようにするドライバみたいなものをダウンロードします。
    cd /usr/src
    wget https://asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r14.tgz

    ● 解凍します。
    tar -zxvf chan_dongle-1.1.r14.tgz

    ● makeします。
    cd /usr/src/chan_dongle-1.1.r14
    ./configure
    make

    ● インストールします。
    make install

    ● chan_dongleの設定ファイルとダイヤルプランを作成します。
    (extensions.confが上書きされるため、自分専用ダイヤルプランを作成していた人は事前にバックアップします。)
    cd /etc/asterisk/
    wget http://asterisk-chan-dongle.googlecode.com/svn/trunk/etc/dongle.conf
    wget http://asterisk-chan-dongle.googlecode.com/svn/trunk/etc/extensions.conf

    ● Raspbianを再起動します。
    reboot



    【chan_dongleで通話する】

    Raspbianの再起動が完了したら、「3Gモデム」が使えるかを確認します。
    「3Gモデム」に挿したSIMカードの電話番号に、他の電話機から電話します。

    英語のデモが流れたら成功です。
    あとは適切に「dongle.conf」と「extensions.conf」を設定します。
    なお、「3Gモデム」を1つしか使わない場合は、「dongle.conf」を編集する必要はありません。



    【ダイヤルプランの作成】

    「3Gモデム」から発信させるためには、extenの記述が通常と若干異なります。
    以下のように記述することで「3Gモデム」から発信するようになります。

    ; 0をトリガーにした発信例
    exten => _0.,1,Dial(Dongle/dongle0/${EXTEN},60)
    exten => _0.,n,Hangup()

    着信やその他の記述は、通常と変わりませんので、自分の環境にあったダイヤルプランを作成します。



    【音質の検証】

    私の環境では非常に良好な通話品質でした。
    特に遅延を感じることもなく、「普通の電話」です。

    ところが、【つなぐ】同士の会話は、かなりの遅延を感じます。(これはGP-71xを使ったシステムも同様です。)
    そのため、【つなぐ】同士の会話には、外線を使わずに内線通話となるように、ダイヤルプランを作成する必要があります。

    こうすれば、音声回線を経由しない通話が実現でき、その結果、より低遅延・高音質な通話が可能になります。


    今回もいつもどおり、3Gモデム版【つなぐ】の音質と遅延時間を検証します。
    音質については自分がどう聞こえるかより、自分の声が相手にどのように聞こえているかが重要なため、それを掲載します。

    [使用した端末]
  • iPhone4s(ドコモSIM使用)
  • SH-07D(Groundwire使用)

    [回線種別]
  • Wi-Fi(光回線)

    [録音環境]
  • 「FUSION IP-Phone SMART」の留守電(128kbps RIFF-WAVE)

    [遅延測定条件]
  • 「iPhone4sから音声を発信してから、SH-07Dがそれを受信する」までのタイムラグの測定

    [音声の元データ]


    [検証結果]
    回線種別
    (アプリ)
    コーデック 音質 遅延時間
    (つなぐから発信/つなぐで受話)
    Wi-Fi
    (Acrobits Groundwire)
    G.711μ

    257ms / 590ms


    何度か試験をしているうちに気付きました。
    どういうわけか、発信時より受話時の遅延時間が大きいのです。

    これの回避策は、以下『着信時の遅延回避策』に記載します。



    【着信時の遅延回避策】

    3Gモデム版【つなぐ】で受話した際の遅延時間については、もしかすると私の環境依存かもしれません。
    しかし、いずれにしても、この遅延時間では実用できません。

    そこで、これを実用するためには、キャリア転送を併用します。

    キャリアの転送を使うことによって、【つなぐ】による着信を迂回して、別の電話番号に着信させることが出来ます。
    つまり、受話時は【つなぐ】を使わないことで、遅延を回避させるわけです。

    転送先の電話番号には「ブラステル 050 free」を用います。(無料)
    ここであれば、低遅延・高音質での通話が可能です。
    (ブラステルを経由していることを全く意識せずに運用できます。)


    以上より、3Gモデム版【つなぐ】は、転送も「カケホーダイ」対象となるドコモとの相性が抜群です。
    もちろん、着信にはほとんど使用しない前提でしたら、ソフトバンクやY!mobileでも構いません。



    【まとめ】

    GP-71xを使った【つなぐ】と、3Gモデムを使った【つなぐ】、それぞれのメリットとデメリットを以下の表にまとめました。

      安定性 音質 遅延 価格 備考
    GP-71x 高い ・通話最初の1秒ぐらいが聞こえない。
    ・シェアの「有効/無効」切替ができる。
    ・収容する携帯キャリアを問わない。
    3Gモデム 未知 特殊 安い ・つなぐからの発信は遅延なし、受信時は遅延大。
    ・検証期間が浅いため、安定性がわからない。(現在までは良好)
    ・別途携帯を必要としない。(SIMをそのまま使う)
    ・auとPHSは収容できず。
    BTドングル 安い ・Bluetoothで携帯を直接Asteriskへ収容する。
    ・収容する携帯キャリアを問わない。
    ・ペアリングできる端末がかなり限定される。
    (私の手持ちデバイスではHFPで繋がらないため試験できず。)

    GP-71x限定機能の「シェアの切替」とは、GP-71xの設定画面を利用することで、その回線をシェアするか否かが簡単に切り替えられる機能になります。

    「最初はひとりで使いたいけど、後から複数人でシェアするかも知れない。」(またはその逆)などが、Asteriskのダイヤルプランを変えることなく切り替えられます。(要初期設定)

    なお、この表の中に「BTドングル」というのもがありますが、これは「chan_mobile」というAsteriskのアドオンを使って、携帯電話をAsteriskに直接収容する手法になります。

    しかし、私の技術力不足もありますが、あまりにも相性が酷く使用を断念しました。
    また、Asteriskとペアリングするために、Linuxコマンドを駆使するため、現実的ではないとも判断しました。
    Bluetoothを使う場合は素直にGP-71x使うべきです。



    【あとがき】

    chan_dongleは以前から知っていたのですが、私の知識ではハードルが高すぎて、今まで諦めていました。
    しかし、GP-71xを使った【つなぐ】を他の方に販売することになって、ひしひしと感じていたことがありました。

    「高すぎる・・・」と。

    と言うことで、今回はかなりがんばりました。

    分かってしまえばなんてこと無いのですが、Asteriskの開発者ツールを導入しないと「chan_dongle」のmakeに失敗します。
    うまく導入できない人のほとんどが、これが原因ではないかと思います。

    LinuxとAsteriskが扱える人は、本記事のとおりで【つなぐ】を構築できますので、ぜひチャレンジしてみてください。

    なお、<【つなぐ】オーダーフォーム>に「3Gモデム版」も追加しました。
    これにより、かなり安価に【つなぐ】を提供できるようになりました。


    【つなぐ】のオーダーは終了いたしました。
    本当はずっと続けていきたかったのですが、私の時間が無くなってしまったことと、かなりの赤字で販売していたことにより、継続が厳しくなってしまいました。申し訳ありません。
  • 2014年12月10日水曜日

    MVNO(データSIM)で「話し放題」を実現する 【つなぐ】

    普通にスマホを使っていると、以下のような2台持ち構成が一番安くなります。(カケホが必要な場合)

    1台目:話し放題プランのみ
    2台目:データ通信のみ(MVNO含む)

    しかし、この構成は、常に2台の端末を持ち歩く必要があります。
    これが面倒な人も多いのではないでしょうか。




    そこで、2台持ちするケータイを1台に合体させます。(セロテープとかで貼り合わせるわけではありません!)
    これで、「MVNO」+「話し放題」を1台のスマホで実現できます。

    また、これを利用すれば、DualSIMに対応したスマホを使う必要もなく、1台のみで複数キャリアの同時利用も可能になります。


    今回は、簡単に説明できる内容ではなく、かなりの長編になってしまいました。
    読んでいて疲れてきたら、一気に読まずにあとでゆっくり読んで頂ければと思います。

    なお、これは誰にでも簡単に導入できるシステムではありません。
    ですが、誰もに使ってもらいたいと思えるぐらい、素晴らしいシステムでもあります。

    このジレンマを解消するために、どうするかを検討中です・・・。

    <追記>システム提供フォームを作成しました。(記事最下部)



    【 「話し放題+パケット定額」サービス 】

    ドコモ、au、ソフトバンクで「カケホーダイ」などの話し放題サービスが開始されました。
    しかし、キャリアの「話し放題+パケット定額」プランは高すぎます。 一例として、ドコモの同プランの料金は6,500~8,000円(税抜)です。

    これは一部のユーザを除けば、体良く料金が値上げされただけに過ぎません。



    【 ケータイの2台持ち 】

    そこで、ケータイの2台持ちが推奨されはじめました。
    1台を「話し放題」プランのみとし、もう1台をMVNOで「データ通信」のみとします。
    そうすることで、「話し放題」+「データ通信」が格安で運用できます。

    1台目:話し放題(1,500~2,200円)
    2台目:MVNO(900円程度)


    これだけでも十分に安くなり、満足できるのですが、常にケータイを2台持ち歩く必要があります。
    これでは、数少ないズボンのポケットを2つも消費してしまいます!(私は手ぶら派なので、これは結構重要です。)



    【 2台のケータイを合体させる・・・「つなぐ」 】

    「ケータイの2台持ちで安くなることはわかる。だけど2台持ち歩くのはイヤだ!」
    「1台だけ持ち歩くためにはどうすれば良いか?」
    「片方にIP電話を入れて転送させる?いや、それでは同じ番号での発信が出来ない・・・。」

    ・・・さすがに、この問題を運用で何とかするのは無理な話です。
    と言うことで、2台のケータイを合体させて1台にしてしまいます。

    これは、決してテープなどでくっつけるわけではなく、ケータイとケータイをネットワーク上で繋げます。
    このように、2台のケータイを【つなぐ】ことによって、「話し放題」+「格安MVNO」が1台のスマホで実現できます。


    2台のケータイを【つなぐ】ためにはいくつかの方法があります。

    1.GP-712、GP-710、GP-708を使う
    2.W-SIM機を使う
    3.Asteriskサーバで3Gモデムを制御する
    4.AsteriskサーバとBT接続する

    数十万円かければ「3G VoIP Gateway」と言う選択肢もあるのですが、非現実的なのでここでは触れません。
    また、2~4についても、機材の入手性や難易度の観点から除外します。

    今回は、比較的容易に導入できる1について説明したいと思います。



    【 GP-712、GP-710、GP-708を使う 】

    「GP-712」、「GP-710」、「GP-708」はGEMPRO社の「Bluetooth ⇔ VoIP ゲートウェイ」です。
    VoIPとは「Voice over Internet Protocol」のことです。
    略さずに記載すると、「インターネットを通じて音声を伝送するプロトコル」であることがわかります。

    なお、Bluetoothはわかります。
    イヤホンやヘッドセットに採用されている、無線規格です。

    「Bluetooth ⇔ VoIP ゲートウェイ」とは、ケータイのBluetoothによる通話を、インターネット上の別の機器で利用できるようにする役割を持ちます。
    つまり、ケータイ(A)の通話を、別のケータイ(B)で行えるようになります。

    これを実情に沿った形に言い変えると、
    「家に置きっぱなしにしたケータイの通話及び発着信を、持ち歩いているスマホで行えます。」

    便宜上、今後はこれを【つなぐ】と呼びます。

    なお、GP-710、GP-712、GP-708の違いは以下のとおりです。

    GP-710 : 1台のケータイを収容可能。(【つなぐ】の利用には、別途IP-PBXが必要。)
    GP-712 : 2台のケータイを同時に収容可能。(【つなぐ】の利用には、別途IP-PBXが必要。)
    GP-708 : 8台のケータイを同時に収容可能。さらに、IP-PBXの機能を併せ持つ。(単体で【つなぐ】利用可。)



    【 「つなぐ」の準備をする 】

    【つなぐ】に必要な機材はGP-710、GP-712、GP-708のいずれかとIP-PBXです。
    なお、GP-708の場合は単体でIP-PBX機能を持っていますので、別途IP-PBXは必要ありません。

    自分ひとりなら「GP-710」で十分です。
    今後、二人ぐらいは使うかもしれないと思ったら、「GP-712」を選んでおけば間違いありません。
    「GP-708」はIP-PBXの構築が不要ですが、その分かなり高価です。

    なお、「GP-708」を使った場合は簡単に設定できますので、今回の説明からは除外します。
    これからは「GP-712」を例として説明していきます。

    <必要な環境>
  • 固定回線(光回線が望ましい)
  • 固定IPアドレス、もしくはDynamicDNS(※)

    <必要な機材>
  • GP-712
  • Linuxが稼働するPC(IP-PBX用)
  • スマホ
  • ケータイ(Bluetoothが使えるもの)

    ※ DynamicDNSを利用する場合は、DiCEなどを用いてリアルタイムにDNSを更新させます。


    ◆ 話し放題プランを契約したケータイを用意する。

    Y!mobileのPHSが最も安価(1500円)で、高音質になります。
    他のキャリアは横並びで2200円です。

    どこのケータイにするかは、現在使っているキャリアや今後を考えて決定します。


    ◆ GP-712を購入する。

    これは日本では発売されておりませんので、海外から購入します。
    私は「eBay」から購入しました。これが今回の中で一番高価です。(約3万円)
    なお、「GP-712」と「GP-712A」とは別物ですのでご注意ください。


    ◆ IP-PBX(Asteriskなど)を用意する。

    私は「CuBox-i2」を使っているのですが、あえてこれを選ぶ必要はないと思います。
    6~7000円程度で買える「Raspberry Pi」がお勧めです。
    これならばIP-PBXの構築も簡単に行えます。

    なお、「Raspberry Pi」はOSをインストールするために、別途MicroSDカードが必要になります。
    本来8GBもあれば十分なのですが、セル寿命の観点から32GBを選びます。

    東芝 microSDHC 32GB
    (これは、私がCuBox-i2で使っているものです。安価な上に高速で、文句なしです。)



    【 「つなぐ」の設定をする 】

    【つなぐ】の設定は次の3部構成から成ります。
    1. GP-712の設定
    2. IP-PBX(Asterisk)の設定
    3. スマホの設定


    1.GP-712の設定

    ◆ 接続編

    これは動画で説明します。
    本来、説明するまでも無いのですが、「GP-712」がどんな代物なのかわからない人も多いと思いますので、ハードウェアの紹介も兼ねます。

    アンテナの接続からBluetoothペアリングまでを紹介します。
    なお、動画中はわかりやすくするためにBluetoothペアリング時にスマホを使用していますが、これはガラケーでも何でも構いません。



    ◆ 設定編

    1つ1つ画面キャプチャで説明すると長くなるため、これも動画で紹介します。



    2.IP-PBX(Asterisk)の設定

    【つなぐ】に必要なAsteriskのコンフィグファイルの記載例です。
    「GP-712」の発着信の考え方が難しく、幾度と無くこれで挫折しそうになりました。

    簡単に説明すると、外部と接続されるのは内線番号「6001」です。
    発信は、VoIP接続された「6001」から、Bluetooth接続先の「6002」に受け渡します。
    受信は、Bluetooth接続された「6002」から、VoIP接続先「6001」に受け渡します。


    以下、「sip.conf」と「extensions.conf」の設定例です。
    わからなければ、必要な部分だけ変更してそのままコピペしてください。(注記は削除してください。)

    「sip.conf」
    [general]
    context=default
    bindaddr=0.0.0.0
    bindport=5062 ← 基本は5060だが、auひかりとセキュリティ上の都合から5062に変更した。
    language=ja
    allowguest=no
    externip=123.456.789.012 ← auひかりなど固定IPの場合に入力。
    externhost=sip.test.jp ← 独自ドメインやDynamicDNSのドメインを入力。
    localnet=192.168.0.0/255.255.255.0

    disallow=all
    allow=ulaw
    allow=alaw
    allow=gsm
    allow=g729
    allow=speex
    allow=opus

    [6001]
    type=friend
    defaultuser=6001
    secret=Kanari_Nagai_Pasu_wo_Ireru ← このパスワードは外部にさらされるため、強固なパスとする。
    canreinvite=yes
    host=dynamic
    context=6001

    [6002]
    type=friend
    defaultuser=6002
    secret=6002
    canreinvite=yes
    host=dynamic
    context=6002

    「extensions.conf」
    [default]

    [6001]
    ; security(kokusai_denwa_no_kinshi)
    exten => _00.,1,Answer()
    exten => _00.,n,Wait(1)
    exten => _00.,n,Hangup()

    exten => _010.,1,Answer()
    exten => _010.,n,Wait(1)
    exten => _010.,n,Hangup()

    ; tuujou
    exten => _0.,1,Set(CALLERID(num)=6001)
    exten => _0.,n,Set(CALLERID(name)=6001)
    exten => _0.,n,Dial(SIP/${EXTEN}@6002,120,T)
    exten => _0.,n,Hangup()

    ; kinkyuu_tuuhou
    exten => _1XX,1,Set(CALLERID(num)=6001)
    exten => _1XX,n,Set(CALLERID(name)=6001)
    exten => _1XX,n,Dial(SIP/${EXTEN}@6002,120,T)
    exten => _1XX,n,Hangup()


    [6002]
    exten => _X.,1,Dial(SIP/6001)
    exten => _X.,n,Hangup()


    3.スマホの設定

    スマホ側での通話は、SIPクライアントを使います。

    通常(3G/LTE)は「CSipSimple」を使います。
    家の中(Wi-Fi)は「Acrobits Softphone」を使います。

    2つのアプリを使い分ける理由はNATを越えるためです。
    今回、GP-712の仕様から、3G/LTE通信時はSTUNサーバが必須となります。
    しかし、ローカル側(Wi-Fi)ではSTUNサーバを経由してしまうと、音声パケットが、LAN側のIP-PBXに到達しません。

    以上の理由により、3G/LTE通信時はSTUNを経由させた「CSipSimple」を使い、Wi-Fi通信時は直通で「Acrobits Softphone」を使います。

    ただし、両アプリが常時通信しているとバッテリー消費が大きくなるため、設定によりこれを回避します。
    もちろん、アプリの切替は自動で行わせます。


    <CSipSimpleの設定>

    SIPアカウントは通常どおり設定します。
    ID:6001
    SIPサーバ:sip.test.jp:5062 ← 固定IPやドメインを入力
    Pass:Kanari_Nagai_Pasu_wo_Ireru


    ※ 以降、「☑」に機種依存文字を使用しているため、見えない環境もあるかもしれません。
    これは、□にレ点の入った「チェック済み」マークを表しています。

    [設定 → ネットワーク]
    ◆トランスポート
     → コネクションキープアライブ
    モバイルUDPキープアライブ:300~3600で環境に応じて数値を入力する。
    これ以外はすべて0(ゼロ)を入力
    (モバイルUDPも0で問題ないかも?未検証。)
    ◆NAT通過
    ☑ ICEを有効
    ☑ Aggressive ICE
    ☑ STUNを有効
      STUNサーバ:stun.l.google.com:19302
    ◆着信通話用
    ☑ 3Gを使用(及びLTE)
      (これ以外のチェックを外す)

    [設定 → メディア]
    ◆オーディオ品質
     エコーや音声検出のチェックは外す
    ◆帯域別のコーデック優先リスト
     チェックを外す
    ◆コーデック
    ☑ speex 8kHz
    ☑ PCMU 8kHz
      (これら以外は外す。)
    ◆ボリューム
     マイク音量:最大


    この設定でCSipSimpleが起動していても、3G接続時以外は通信しません。


    <Acrobits Softphoneの設定>

    SIPアカウントは通常どおり設定します。
    ID:6001
    SIPサーバ:192.168.0.10:5062 ← AsteriskサーバのLAN側のIPを設定する
    Pass:Kanari_Nagai_Pasu_wo_Ireru

    ◆着信
     → 起動を維持し常時着信
    ◆環境設定
     → サウンド
     エコーキャンセル、ノイズ低減のチェックを外す
    ◆WiFi設定
     → Wi-Fiのみ
    ☑ Wi-Fi接続を維持する
    ◆コントロール
     → 電話帳 → Handle outgoing native calls → Ask
     (これで電話帳から発信する際にAcrobitsを選べるようになります。)


    この設定でAcrobits Softphoneが起動していても、Wi-Fi接続時以外は通信しません。


    このように、3G/LTE時は「CSipSimple」を使い、Wi-Fi接続時は「Acrobits Softphone」を使うことを明示的に指定し、【つなぐ】のNAT越えを実現します。

    以上で設定は完了です。



    【 「つなぐ」の発着信テスト 】

    3G/LTE時及びWi-Fi時の発着信をテストします。
    スマホのSIPクライアントから発信すると、GP-712とBluetooth接続しているケータイから発信されます。
    また、ケータイへの着信はGP-712を経由して、スマホが鳴動します。



    【 「つなぐ」の音質検証 】

    【つなぐ】の音質と遅延時間を検証します。
    音質については自分がどう聞こえるかより、自分の声が相手にどのように聞こえているかが重要なため、それを掲載します。

    [使用した端末]
  • WX12K(GP-712とBT接続済)
  • L-01F(つなぐ利用機)
  • SH-07D(遅延計測用)

    [回線種別]
  • Wi-Fi(光回線)
  • LTE(ドコモ)

    [録音環境]
  • 「FUSION IP-Phone SMART」の留守電(128kbps RIFF-WAVE)

    [遅延測定条件]
  • 「L-01Fから音声を発信してから、SH-07Dがそれを受信する」までのタイムラグの測定

    [音声の元データ]


    [検証結果]
    回線種別
    (アプリ)
    コーデック 音質 遅延時間
    Wi-Fi
    (Acrobits Softphone)
    G.711μ

    324ms
    LTE
    (CSipSimple)
    Speex(8kHz)

    387ms


    [検討・考察]

    音声データを聴くと、両アプリの特徴が色濃く出ており、つい聴き比べたくなってしまいます。
    しかし、これら2つの音声データは、条件が全く異なるため、聴き比べには何の意味もありません。
    注目すべくは遅延時間の短さです。

    これだけ低遅延ならば、全く違和感なく会話ができます。
    「違和感なく」と言う表現が、そもそも間違っているぐらいに、これが「普通」です。

    なお、音質についても十分満足できます。
    ドコモ同士の通話品質には敵わないと思いますが、他キャリア程度の品質は保っています。
    特にLTEに関しては、低帯域用コーデック「Speex」で、ここまでの音質であれば文句のつけようがありません。



    【 まとめ 】

    【つなぐ】システム構築にはそれなりに知識を必要とします。

    しかし、私と全く同じシステムで良ければ、本ブログ中にやり方はすべて記載しています。
    参考にして頂ければ、難しいながらもシステム構築まで辿り着けるはずです。

    以下は、わが家の【つなぐ】を使った月額維持費です。

    私:1709円(L-01F)
      <内訳:1500円(Y!mobile・スーパーだれとでも定額)+209円(ドコモ・Xiデータ(7Gまで))>
    妻:2805円(SC-01F)
      <内訳:1500円(Y!mobile・スーパーだれとでも定額)+1305円(BIGLOBE・ライトS(5Gまで))>

    これだけ安価で便利な【つなぐ】ですが、最初に言ったとおり、システム構築は一筋縄では行きません。
    まず、購入のために最低限の英語は必要になります。また、ちょっとしたネットワークの知識も必要です。

    ただし、一度構築してしまえば、MVNOでの話し放題が、スマホ1台だけで実現できます。
    たとえ難しくても、英語が苦手でも、それでも頑張って【つなぐ】を構築する価値は十分にあります。



    【 あとがき 】

    今回はかなり難しかったです。
    GP-712の動きを理解すべく検索しても情報が全然出て来ないのです。
    これが理解できないと、Asteriskも設定できません。

    トライアンドエラーで、徐々に動きがわかってきて、6001⇔6002の発着信の受け渡しに気付いた時には感動モノでした。
    また、NAT越えに四苦八苦し、2つのSIPクライアントの同時使用に行き着いたときは、自分で自分を褒めたくなりましたよ。(〃∇〃)


    わが家は12月からGP-712での【つなぐ】を本格運用し始めました。
    今のところ目立った不具合もなく、順調に稼働中です。
    今後、何か不具合があれば、ここに追記していきたいと思います。



    【 つなぐの提供について 】

    【つなぐ】がどうしても欲しい。
    だけど、英語もネットワークもわからない・・・。
    でも、どうしても使いたい!

    もし、そんな方がいるようであれば、必要機材をすべて揃えて、さらにIP-PBXの設定も済ませた上で、提供できる方法を考えます。
    しかし、かなり手間がかかるので、多少はマージンを頂くことになるとは思います。
    ・・・そもそも、「そんな方がいれば」の話ですが。

    <追記>
    【つなぐ】提供フォーム作成しました。
    ブログ上では情報送信時の暗号化に問題ありなので、外部システム(ネットオウルのもの)を使いました。

    【つなぐ】が欲しい方はこちらからご連絡ください。

    なお、少なからずマージンは頂くので、接続できるようになるまでサポートします。


    <2015.1.4 更新>
    【つなぐ】の設置編として<ガラケー(話し放題)と、スマホ(MVNO)を【つなぐ】>アップしました。
    【つなぐ】で一体何ができるのかを、本記事よりは少しわかりやすく書いたつもりです。


    <2014.12.15 更新>
  • 設定ファイルの整合性が取れていなかったため「extensions.conf」を修正しました。
  • 【つなぐ】提供フォーム作成しました。

    <2014.12.22 更新>
  • 設定ファイルに「抜け」があったため「extensions.conf」を修正しました。
  • 2014年9月3日水曜日

    「CuBox-i2」にArchLinuxをインストールしてAsteriskを稼働する

    CuBox-iにArchLinuxをインストールする方法は、公式サイトに全て書かれています。
    http://www.solid-run.com/wiki/ArchLinux

    しかし、暗号のような英語の羅列が意味不明で、既に戦意喪失しました。




    このまま、戦わずして負けるわけにはいきません。
    どうすれば、この文字列に勝利できるのか・・・。

    そうだっ! まずは柔らかい言葉に置き換えてみよう!!



    【 Installation(インストール) 】

    This installation method produces a SD card with the official ArchLinuxARM installation. The only difference is the use of a script to prepare the SD card. It simply performs all the steps described on the ArchLinuxARM pages for you.

    <柔訳>
    このインストール方法はね、手順どおり進めていくだけで、ArchLinuxがインストールされたSDカードが出来ちゃうんだよ!
    それじゃあ、これから簡単に手順を説明するね。


    1.Download the official ArchLinux rootfs [1]

    <柔訳>
    まずはCuBox-iに対応したArchLinuxをダウンロードしてね。
    DL先は[1]に用意しといたよ。


    2.Download the installation script (a slightly modified GeexBox script) [2]

    <柔訳>
    インストール用のスクリプトをダウンロードしてね。(これは、他OS用のスクリプトなんだけど、Arch用にちょっとだけ変更してみたよ。)


    3.Insert your SD card in your linux box, check (using dmesg) the name of the device (something like /dev/sdX) and run the following as root

    <柔訳>
    SDカードをLinuxマシンに挿してね。あ、まだCuBoxには挿しちゃダメだよ。
    SDカードを認識したら、sdXの部分の名前を確認してあげて。(例えば「/dev/sdb」とかになってるんじゃないかな。)
    (「dmesg」とタイプすればなんとなくわかると思うよ。)
    その後は管理者権限(root)で、これからのコマンドを実行してね。

    まずは上の1と2をダウンロードしたファイルがあるディレクトリに進んで・・・
    それで、次のコマンドを実行だよ。
    chmod +x make-sdcard
    ./make-sdcard /dev/sdX ArchLinuxARM-imx6-cubox-latest.tar.gz
    


    たったこれだけでArchLinuxのインストールが完了しちゃったよ♪


    だめだ・・・。この口調は「暗号のような英語の羅列」以下に思えてきた・・・。
    と言うより、これを私(おっさん)が書いていると思うと、後で読み返してからが非常に辛い。私の心が泣いている。心が痛い・・・。

    しかし、案外ニュアンスが伝わってわかりやすそうな気がするので、精神を病みつつももう少し強行してみます。



    【 Post Installation(インストール後) 】

    Now you should have a SD card with a (very) basic ArchLinux. Insert it into your Cubox-i (connected to wired ethernet) and boot into ArchLinux, then login as root (password root) and run.

    <柔訳>
    ArchLinuxをインストールしたSDカードをCuBox-iに挿してみて。
    いよいよ、CuBox-iを起動するよ。
    あ、そうだ、LANケーブルは最初からつなげておいてね。

    起動したらユーザ名(root)とパスワード(root)を入力してログインしてね。
    そうしたら、次のコマンドを入力だよ。
    pacman -Sy
    pacman -Su
    
    (※公式サイトにはlxdeやWiFiをインストールする手順が記載されていますが、今回はインストールしません。)



    【 Upgrading to 3.10.30 Kernel(カーネルのアップデート) 】

    The official ArchLinux installation comes with the the new 3.10.30 kernel, so you do not need to upgrade on the fresh installation. However, it you are still running an old installation with the 3.0.35 kernel, it is recommended that you upgrade to the 3.10.30 kernel. Before you perform this upgrade make sure that you resent uboot defaults. Reboot your Cubox-i and hit a key when you get to the uboot console, then run the following commands.

    <柔訳>
    Archをインストールした直後はカーネルが3.0.35というバージョンで、ちょっと古いんだ。
    これが古いままだと、動かないソフトがあったり、たまーに不具合が発生するよ。
    だからこの際、最新カーネルにアップグレードしちゃおう!
    そうだ、アップグレード前には再起動を忘れないでね。
    そういうのも含めて、これからの説明どおりに進めていけばOKだよ。


    Reboot again and log in as root. Install the new u-boot.

    <柔訳>
    一度再起動して、rootでログインし直してね。
    reboot
    

    新しい「u-boot」をインストールするよ。
    pacman -Sy --force uboot-cubox-i
    

    and follow the instructions to flash SPL and u-boot.img on the SD card. The command installs the new uboot overwriting the old SPL and u-boot.img files in /boot. Finally, install the new kernel

    <柔訳>
    SPLとu-bootを書き換えたら、新しいカーネルをインストールするよ。
    pacman -S linux-imx6-cubox-dt
    

    これで新しいカーネルへアップデートかんりょ~♪

    (柔モードを終了。心が悲鳴をあげつつも、ヘンな満足感でいっぱいです。)


    以上で、CuBox-i2にArchLinuxのインストールが完了です。
    これ以降は環境(やりたいこと)によってかなり異なってくるでしょうから、私の備忘録としてだけ記しておきます。



    【 Asteriskのインストール 】


    Asteriskに何らかの形でキャリアを収容して、MVNOから利用するためのメモです。
    私の場合はY!mobileを収容しています。

    まずはAsteriskをインストールします。
    pacman -S asterisk
    

    すごいです。
    単純にpacmanでインストールするだけで、AsteriskはVer12が入り、以下のパッケージが自動的に導入されます。
    これだけで、相当数の音声・動画コーデックに対応したIP-PBXが完成します。


    Packages (82): alsa-lib-1.0.28-1 damageproto-1.2.1-3 elfutils-0.159-1
    enca-1.15-1 ffmpeg-1:2.3.3-1 fixesproto-5.0-3 flac-1.3.0-3
    fontconfig-2.11.1-1 freetype2-2.5.3-2 fribidi-0.19.6-1
    gnutls-3.3.7-1 graphite-1:1.2.4-1 gsm-1.0.13-8
    harfbuzz-0.9.35-1 inputproto-2.3.1-1 jack-0.124.1-1
    jansson-2.6-1 json-c-0.12-2 kbproto-1.0.6-2 lame-3.99.5-2
    libass-0.11.2-1 libasyncns-0.8-5 libbluray-0.5.0-1
    libdrm-2.4.56-1 libice-1.0.9-1 libjpeg-turbo-1.3.1-1
    libmodplug-0.8.8.5-1 libogg-1.3.1-2 libpciaccess-0.13.2-2
    libpng-1.6.12-1 libpulse-5.0-1 libsamplerate-0.1.8-3
    libsm-1.2.2-2 libsndfile-1.0.25-2 libsrtp-15.1c9bd90-3
    libtasn1-4.1-1 libtheora-1.1.1-3 libva-1.3.1-2 libvdpau-0.8-1
    libvorbis-1.3.4-1 libvpx-1.3.0-1 libx11-1.6.2-2
    libx264-1:142.20140311-6 libxau-1.0.8-2 libxcb-1.11-1
    libxdamage-1.1.4-2 libxdmcp-1.1.1-2 libxext-1.3.3-1
    libxfixes-5.0.1-1 libxi-1.7.4-1 libxml2-2.9.1-5
    libxrender-0.9.8-1 libxshmfence-1.1-1 libxslt-1.1.28-3.1
    libxtst-1.2.2-1 libxxf86vm-1.1.3-1 llvm-libs-3.4.2-1.1
    mesa-10.2.6-1 mesa-libgl-10.2.6-1 nettle-2.7.1-1
    opencore-amr-0.1.3-2 openjpeg-1.5.2-1 opus-1.1-1.1
    orc-0.4.19-1 p11-kit-0.20.2-1 pjproject-2.2.1-3
    portaudio-19_20140130-1 recode-3.6-8 recordproto-1.14.2-2
    renderproto-0.11.1-3 rtmpdump-20131205-1 schroedinger-1.0.11-2
    sdl-1.2.15-6 speex-1.2rc1-4 v4l-utils-1.2.1-1 wayland-1.5.0-1
    xcb-proto-1.11-1 xextproto-7.3.0-1 xf86vidmodeproto-2.3.1-3
    xproto-7.0.26-1 xvidcore-1.3.3-1 asterisk-12.4.0-1


    これでAsteriskのインストールは完了ですが、CLIを起動する上で1つだけ足りないモジュールがあります。
    それをインストールしないままCLIを起動すると、こんなメッセージが出ます。 

    error while Loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file or directory

    他サイトによれば、これはDSOモジュールとしてSQLiteが読み込めてないと言うことらしいです。「libsqlite3.so.0(本体 libsqlite3.so.0.8.6)」のシンボリックリンクを「/usr/lib」に置くことで解決するとのことですが・・・。

    今回インストールしたArchLinuxには、そもそもSQLiteが入っていないのではないかと考え、普通にパッケージをインストールしました。(結果、当たりでした。)
    pacman -S sqlite
    

    ポートの開放に関しては非常に悩みました。
    どうがんばっても、AsteriskのUDPポート5060にパケットが到達しないのです。
    ルータのポートマッピング、iptablesによるファイヤーウォール等々、ここには書ききれないほど色々なことを試しました。
    しかし、どうしてもパケットが遮断されます。
    試しにプロトコルをUDPからTCPに変更したところ、AsteriskでListen中のポート5060に反応がありました。

    ここでやっと気付きました。
    プロバイダから提供されたHGW(ルータ)に原因があるのではないかと。

    私が契約しているプロバイダ(auひかり)用HGW「BL900HW」の裏設定で、UDP5060がコンフリクトしているように思えます。

    (以降、特に何も注意がない限り、「sip.conf」内の[general]の設定です。)

    そこでUDPポートを5060から5062に変更しました。
    bindport=5062
    

    今までの苦労は何だったのか・・・?と言うほどあっさりパケット通過、レジスト完了。
    (ポート5062はセキュリティ的にも好都合なので、このまま採用します。)

    今回はローカルでの利用だけでなく、外からも常時利用するのでexternipを設定します。
    なお、これを設定しないと外部からの接続でNATが解決できません。
    externip=114.17.xxx.xxx  ;(WAN側IPアドレス)
    

    さらに、これだけではまだNATの解決には至らず、以下を追加します。
    (これは[general]ではなくユーザのところに記載しました。)
    nat=yes
    

    これでやっとNATをスムーズに乗り越えられるようになります。

    また多様な環境に、より柔軟な対応ができるように、使用可能コーデックを多めにします。
    disallow=all
    allow=ulaw
    allow=alaw
    allow=gsm
    allow=g729
    allow=ilbc
    allow=speex
    

    さらに、接続が確立した後は、音声ストリームのやりとりは端末間でやってもらいたいため、Asteriskサーバをバイパスさせます。
    canreinvite=yes
    

    これで完成。
    もちろん他にも細かいところはいじっていますが、わかりにくかったところはこのぐらいでした。


    これですべて完成かと思っていたのですが、新たな不具合発生です。
    同じAsteriskにぶら下がっているイエデン(ブラステル)の着信時の音声パケットのうち、送信側が通らなくなりました。

    この対応として、HT702のRTPポートを5004から15004に変更しました。
    しかしこれでも、まだ通りません。
    NATの解決がうまくいかないようです。

    そこで、発想を換え、ブラステルはスッパリ諦めます。
    無理にAsteriskにレジストする必要はないため、HT702から直接ブラステルをレジストします。

    どうせカケホーダイ回線を収容しているので、内線通話はなくてもいいかなと言う判断です。

    最後に時刻合わせです。
    ログを見ている時に世界標準時刻では見難いため、日本時刻に合わせます。
    (これはAsteriskの設定ではなく、Linuxのコマンドです。)
    timedatectl set-timezone Asia/Tokyo
    

    以上で、Asteriskの設定は終了です。
    後は適切なSIPクライアントに3G接続時とWi-Fi接続時の両方を設定して、開通完了。



    【 感想 】

    今回は難しすぎて、途中何度も投げ出したくなりました。

    実はArchLinuxに至る前はUbuntuで同様のことをしていました。
    ですが、どうしてもポート5060が開放できず、元来使いたかったArchに逃げてきた感じです。

    今にして思えば、Ubuntuのせいではなく、auひかり(HGW)のせいだったことがわかります。

    結果オーライと言えば聞こえは良いのですが、今回の件では自分の知識不足を痛感しました。
    ですが、初めてLinuxに触れてから2ヶ月弱、ここまで来れれば上出来です。
    ちょっと自分を褒めてあげたいぐらいです。

    ・・・と言うことを妻に話してみたところ、
    『そんなことどうでもいいんだけどさ、トイレットペーパーが無いんだけど!』
    と、会話がトイレの話に瞬時に切り替わりました。(TдT)

    サーバ完成後、私の最初の任務はトイレットペーパーの調達でした。
    トイレットペーパー片手に、自己満に満たされつつ家路につく私でした

    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を使えるようにするためには、国際通話の禁止やパスワードの強化など、多くのセキュリティ対策を行う必要があります。
  • 2014年6月29日日曜日

    「CuBox-i2」にUbuntuをインストールし、Asteriskを構築する(Ubuntuインストール編)

    「CuBox-i2」にUbuntuをインストールして、それにAsteriskをインストールしました。




    このCuBox-iと同じようなコンセプトの小型PCとしては、「Raspberry Pi」が有名です。
    しかし、CuBox-iの方が圧倒的に小さく、そして格好いいです。

    ここではCuBox-iにUbuntuをインストールするまでを紹介します。



    【CuBox-i】

    CuBox-iはSolidRun社が開発した超小型PCです。
    スペック毎にいくつかのモデルがあり、CPUは1~4コア、GPUは通常モデルか高性能モデルかを選べます。(以下参照)
    もちろんハイスペックなほど、お値段もハイスペックになります(>_<)

  • CuBox-i1
  • CuBox-i2
  • CuBox-i2eX
  • CuBox-i2ultra
  • CuBox-i4pro

    私はLinuxサーバ(IP-PBX)として使うことが目的なので、高性能の必要性はなく「CuBox-i2」を選択しました。(1万円弱)



    【Cubox-i2にLinuxをインストールする】

    Linuxのディストリビューションをどれにするか迷った結果、「ArchLinux」か「Ubuntu」かに絞りました。
    当初はArchLinuxに心が傾いていたのですが、紆余曲折した結果、Ubuntuを採用しました。

    (ArchLinuxはインストール時に間違ってWindowsパーティションを削除してしまい、心が折れました。そして、インストールが簡単なUbuntuの採用に至りました・・・。)

    CuBox-i2にUbuntuをインストールする大まかな手順は以下のとおりです。
    1. 準備(WindowsマシンでMicroSDカードを読み書きできるようにする)
    2. CuBox-i4pro用Ubuntuイメージを入手する。
    3. Win32 Disk ImagerでイメージをMicroSDに書き込む。
    4. Ubuntuが書き込まれたMicroSDをCuBox-iに挿して起動する。
    5. Ubuntuをアップデートする。

    Linuxのインストールは、Gigazineに書かれていたCuBox-i1の記事が非常に参考になりました。
    約5000円と激安の超小型PC「CuBox-i1」でAndroidとLinuxを動かしてみた



    【Cubox-i2にUbuntuをインストールする手順】

    ◆ 1.準備(WindowsマシンでMicroSDカードを読み書きできるようにする)

    <用意するもの>
  • Windowsマシン
  • MicroSDカード
  • MicroSDカードリーダ/ライタ
  • Win32 Disk Imager

    「MicroSDカード」は信頼のおけるブランドを選びます。
    これが理由でトラブルが発生すると、原因の特定に苦労します。

    人それぞれ好みは分かれますが、私は東芝製を選びました。(安価な割になかなか速い)
  • 東芝 microSDHC 32GB Class10 30MB/s


    「MicroSDカードリーダ/ライタ」は、変換アダプタを介すものは面倒なので避けます。
    なお、これは安価なもので構いません。
  • MicroSDカードリーダ価格


    Win32 Disk Imager」をダウンロードしてWindowsマシンにインストールします。
    使い方は・・・、私が説明するよりも「Gigazineの記事」がわかりやすいです。


    ◆ 2.CuBox-i4pro用ubuntuイメージを入手する。

    Solid Run社のページからUbuntuイメージをダウンロードして解凍します。
    http://cubox-i.com/linux-distros-ready-ubuntu-fedora-debian/
    (この中の「Ubuntu (for CuBox-i4pro, the rest of the models will be added soon)」というところ)

    CuBox-i4proモデル専用イメージのように思えますが、CuBox-i2でも使えました。


    ◆ 3.Win32 Disk ImagerでMicroSDに書き込む。
    ◆ 4.Cubox-iに挿して起動する。

    これはGigazineの記事そのままなので割愛します。
    記事内では「Android」と「GeexBox」イメージを使っていますが、それらは使わずに、先ほどダウンロードした「Ubuntu」を使います。

    なお、Ubuntuの初期ユーザ名とパスワードは以下のとおりです。
    ユーザ名:linaro
    パスワード:linaro

    これは必要に応じて変更します。


    ◆ 5.Ubuntuのアップデート。

    インストール直後のUbuntuを最新版にアップデートします。

    ターミナルを起動して、以下コマンドを入力します。
    (Ubuntuマークのアイコン(Dashホーム)をクリックし、検索で terminal と入力する。)


  • パッケージ・リストのアップデートをします。
    $ sudo apt-get update

  • パッケージのアップデートをします。
    $ sudo apt-get upgrade
    (非常に時間がかかる上に、途中でYes/Noを問いかけてくるので、付きっきりです・・・。)

  • vimに関するエラーが出力されるので以下で対処。
    $ sudo rm /var/lib/dpkg/info/vim*.postrm
    $ sudo rm /var/lib/dpkg/info/vim*.postinst
    $ sudo apt-get clean
    $ sudo apt-get install vim

  • Ubuntu12.04へアップグレード
    これは必要に応じて行います。(UpdateManagerアプリ)
    私の目的はUbuntuを使うことではなく、Asteriskを使いたいだけなので、Ubuntu11.10のまま利用しています。



    【おまけ?(CuBox-i2ギャラリー)】

    購入時の箱と明細



    CoBox-iのサイズ(私の手の大きさを参考に)



    MicroSDはこの向きに挿入する。
    引き抜くときは押しても取れない。
    先の尖ったもので引っ掛けて取るしか無い。(iPhoneのSIMトレイに挿すピン?がピッタリだった。)