PJSIPは、C言語で書かれたオープンソースのマルチメディアコミュニケーションライブラリです。SIPやSDP、RTP、STUN、TURN、ICEなどのプロトコルをサポートしています。このライブラリを使うと、IP電話のようなものを簡単に作ることができます。今回はPythonを使いたいので、Python ModuleのPJSUAもインストールします。
インストール方法はBinerry, Raspberry Pi Caller and Answering Machineを参考にしました。必要な作業は記事の中ごろだけです。
svn経由でソースコードを入手します。subversionがインストールされていない場合はインストールします。
$ sudo apt-get install subversion
$ svn checkout http://svn.pjsip.org/repos/pjproject/trunk
APT経由で必要なライブラリをインストールします。
$ sudo apt-get install build-essential automake autoconf libtool libasound2-dev \
libpulse-dev libssl-dev libsamplerate0-dev libcommoncpp2-dev libccrtp-dev libzrtpcpp-dev \
libdbus-1-dev libdbus-c++-dev libyaml-dev libpcre3-dev libgsm1-dev libspeex-dev libspeexdsp-dev libcelt-dev
makeしてインストールします。管理者権限で実行してください。終わるまで結構な時間がかかりました。
$ cd trunk
$ ./configure && make dep && make clean && make && make install
PJSUAをインストールします。同じく管理者権限で実行してください。
$ cd pjsip-apps/src/python
$ make
インストールが完了したら、付属しているサンプルコードを使って発信テストをしてみます。IP電話のようなものですので、受ける側のソフトも必要です。私はMac OS Xを使っていますが、Linphoneを使っています。SIPに対応したソフトがインストールされていない場合は、適宜インストールが必要です。
サンプルコードはpjsip-apps/src/python/samples
にあります。その中のsimplecall.py
を試してみます。詳しくはPJSIPのドキュメントYour Python SIP “Hello World!” Applicationに書かれています。simplecall.py
は、発信相手のSIP URIを引数に取るので、先ほどのインストール作業をしたディレクトリにそのままいる場合は、下記のようになります。
$ cd samples/
$ python simplecall.py sip:192.168.10.3:5060
いろいろとログが出ますが、Call is EARLY last code = 180 (Ringing)
が出れば相手につながり、呼び出し中になった状態です。この状態で相手が受話すれば、Call is CONNECTING last code = 200 (OK)
Hello world, I can talk!
と出ます。ここまで行けばテスト成功です。
-
Cannot open include file: ‘Python.h’
pythonのdevelopment packageがインストールされていません。APT経由でさくっとインストールします。$ apt-get install python-dev
-
..Error retrieving default audio device parameters: Unable to find default audio device (PJMEDIA_EAUD_NODEFDEV)
Raspberry Piのサウンドチップ周りバグというか仕様のためのエラーのようです。音声の入力も出力もできませんが、下記のようにstart()
を呼ぶ前にset_null_snd_dev()
を呼ぶと回避することができます。# Disable the sound devices. lib.set_null_snd_dev() # Start the library lib.start()
この投稿は、ワタシのメモ PJSIPをRaspberry Piにインストールするにて公開していたものを移動したものです。