Wonderful Life

サボりがちだけど備忘録です。思ったままに書いてます。

iPhone 5にPJSIPを組み込む

Objective-C Advent Calendar 2012の15日目の記事となります。

以前書いてた内容が何故か消してしまっていたようなので2度目の文章作成です。。。
あんまりObjective-Cらしくない内容ですが、ご愛嬌。

PJSIPとは

オープンソースのSipStackです。
SIPについてはぐぐってくれると嬉しいんですが、VoIPとかあの辺の話ですね。
詳しくはぐぐって!
超超ざっくり言うとこれを組み込んだらIP電話が使えるよって話です。

今回の流れ

iPhone5用にコンパイルして、Xcodeに組み込むまでをやってみようかと思います。
組み込んだ後のコーディングはまた機会があれば紹介しようと思います。
そんなにしっかりコード書いたことないけど。

というわけで、さっそく本題に移りましょう!

環境

PJSIPをダウンロードする

Getting Started: Building for Apple iPhone, iPad and iPod Touch
ここを参考にして進めます。

まずはソースコードを落とします。
ターミナルを起動して以下を実行します。
(zipもあるようですが今回はsvnで)

svn co http://svn.pjsip.org/repos/pjproject/trunk/ pjsip

PJSIPをコンパイルする

makeとかよく知らない自分にはここが一番の難所でした。
色々とファイル編集してからmakeするだけなんですけどね。。。

# Checkoutしたディレクトリへ移動
cd pjsip

# Vimでファイル編集
vim pjlib/include/pj/config_site.h

内容は以下をコピペ

#define PJ_CONFIG_IPHONE 1
#include <pj/config_site_sample.h>

次にconfigureをいじります。
iPhone5用にコンパイルするので、armv7となっているところをarmv7sに修正します。
「armv7」と検索したら1箇所だけヒットしたので、そこを書き換えただけです。

vim configure-iphone

configure-iphoneの80行目くらい

#export ARCH="-arch armv7"
export ARCH="-arch armv7s"

修正できたら以下を実行します。

./configure-iphone

エラーがでなければmakeします。

make dep && make clean && make

エラーがでなければOK!

Xcodeへ組み込む

Xcodeで新規にプロジェクトを作成します。
以下のディレクトリをプロジェクトに追加します。

  • pjsip/
    • pjlib/
      • include/
      • lib/
    • pjlib-util/
      • include/
      • lib/
    • pjmedia/
      • include/
      • lib/
    • pjnath/
      • include/
      • lib/
    • pjsip/
      • include/
      • lib/
    • third_party/
      • include/
      • lib/

f:id:niyaty:20121215002253p:plain

上のディレクトリ全てを以下の追加します。

  • Header Search Paths

f:id:niyaty:20121215002059p:plain

  • Library Search Paths

f:id:niyaty:20121215002101p:plain

と思ってたら、プロジェクトにファイルを追加した段階でLibrary Search Pathsも追加されてました。
ライブラリの追加もできてました。
Build PhasesLink Binary With Libraries から確認できます。

f:id:niyaty:20121215002309p:plain

あとはiPhone5を繋いで、
AppDelegate.mあたりに以下を追加してビルドしてみましょう。

#include <pjsua-lib/pjsua.h>

これでエラーなく実機でビルドできればOK!
iPhone5用にコンパイルしてるので、simulatorでは動きません。
エラー出て怒られると思います。

最後に

実装の際はこのサンプルを見ながら書いてみると良いでしょう。
Samples: Simple PJSUA

APIはここを参照。
PJSUA API - High Level Softphone API

言うのが遅くなりましたが、もちろん電話番号が必要です。
iptelなら無料で電話番号を発行してもらえます。
iptel.org

探せば他にもたくさんあるはずなので探してみては如何でしょう。

んで

ぼくはCもSIPも詳しくないので質問されてもわかりません!
むしろ教えて下さい。

ということで、お疲れ様でございました。

参考

PJSIPをXcodeに組み込む