🏡

VoIP実践 Asteriskで音楽を流す

に公開

Asteriskとは

AsteriskはOSSのIP-PBXのソフトウェアです。平たく言うとLinuxにインストールすればローカルな環境でも通話ができるようになります。
必要な機材はサーバーになるLinuxとAndroidやiPhoneのような端末です。

実施する作業工程

・Asteriskインストール
・電話番号の作成
・ダイヤルプランの作成
・端末へのSIPクライアントインストール
・音楽ファイルとの紐づけ

Asteriskインストール

今回の構成ではソースコードの編集は必要ありませんのでパッケージをインストールします。
Debian系では以下コマンドを実行します。

sudo apt install asterisk

インストールはこれOKです。/etc/asteriskに設定ファイルが構成されます。

電話番号の作成

電話番号の作成はpjsip.confを編集します。以下を追記します。

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0

[1001]
type=endpoint
context=from-internal
disallow=all
;allow=opus
;allow=g722
allow=ulaw
allow=alaw
allow=gsm
allow=vp8
allow=h261
allow=h263
allow=h264
auth=1001
aors=1001

[1001]
type=auth
auth_type=userpass
password=pass
username=1001

[1001]
type=aor
max_contacts=10

[1002]
type=endpoint
context=from-internal
disallow=all
;allow=opus
;allow=g722
allow=ulaw
allow=alaw
allow=gsm
allow=vp8
allow=h261
allow=h263
allow=h264
auth=1002
aors=1002

[1002]
type=auth
auth_type=userpass
password=pass
username=1002

[1002]
type=aor
max_contacts=10

これで1001番と1002番の二つの端末用電話番号を作成したことになります。

ダイヤルプランの作成

ダイヤルプランとは何番に電話したらどういう動作をとるのか?という設定のことを言います。
ここでは100x番に電話すれば紐づいた端末宛にに電話する、9999にダイヤルすれば音楽ファイルを再生ということにします。設定ファイルはextentions.confです。以下を追加します。

[from-internal]
exten => _100X,1,Dial(PJSIP/${EXTEN},30,r)
exten => _100X,2,Hangup()
exten => 9999,1,Goto(music,9999,1)

[music]
exten => 9999,1,Answer()
same => n,MusicOnHold()
same => n,Hangup()

端末へのSIPクライアントインストール

手持ちのAndroidやiPhoneにクライアントアプリを入れましょう。
各ストアにあるZoiperあたりが有名ところです。
AsteriskサーバーにIP指定、UDPで設定しておけばよいかと思います。

ここまででも二台のスマホがあればローカルでVoIP通話は可能です。
ここまでで通話してみたい場合は

sudo systemctl restart asterisk

で再起動したあとに

sudo asterisk -vvvr

でコンソール起動します。
Zoiperを起動した端末で100x番に電話をかければ相手方にコールされると思います。(コンソールにログがでます)

音楽ファイルとの紐づけ

流したい音楽ファイル(.wav)を入手します。最近ではYoutubeのショート動画なでBGMとして使用される音源が無償で提供されていますので適宜入手してください。
入手したファイルを/var/lib/asterisk/mohに配置してください。その上で、musiconhold.confを編集します。

[default]
mode=files
directory=/var/lib/asterisk/moh
random=yes

複数のファイルを格納しておけばダイヤルごとに音源がランダムで選択されます。

何に使うのか??

筆者はネットワークが主体のエンジニアですのでWi-Fiの試験に使用していました。
特に高速ローミング技術の802.11k/v/r試験の定性評価に使用しました。

ローミング(接続APの切り替え)時間をPingやIperfを使用して定量的にどのくらいロスしたかを調査する傍らで使用感として問題ないかの評価をするのに使用しました。
この手法では一人で音源を聞きながら現場を歩き回ることで評価が可能になりました。

Discussion