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でも、その真価が発揮できるものと考えていますが、これはまたあとの話にしたいと思います。