Skip to content

Instantly share code, notes, and snippets.

@ll0s0ll
Created March 24, 2018 10:48
Show Gist options
  • Save ll0s0ll/ec791b30d03f75e666014ead3097188c to your computer and use it in GitHub Desktop.
Save ll0s0ll/ec791b30d03f75e666014ead3097188c to your computer and use it in GitHub Desktop.
PJSIPをRaspberry Piにインストールする

PJSIPをRaspberry Piにインストールする

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にインストールするにて公開していたものを移動したものです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment