亀の甲羅干し
Turtle powered by Linphone
![[figure01]](indohosigame.gif)
本プロジェクトではMacOS X上のSIP Phone(VoIP)アプリケーションを開発して
いきます。エンジン部分はLinphone
を使い、CocoaでのUIおよび追加機能などを提供します。
プロジェクトのSourceForgeのページは
こちらになります。
コンセプトはまず軽い事と動作環境をできるだけ制限しない事を第一にして
いきたいと思います。またできる範囲でみてくれもかっこ良くできたらと思
います。またLinphoneがあまりNAT環境下に強くないので、これについての
対応策も盛り込めればとも思っています。また通話機能だけでは面白みがな
いので、なにか付加機能も考えていきたいとおもいます。Linphoneで提供さ
れているビデオ機能はサポートする予定はありません。
私の作成するコードはBSDライセンスを適用します。本プロジェクトでビルド
するバイナリはLinphoneのGPLでの配布になります。本プロジェクトの成果物
はすべてsourceforgeにアップロードします。
このプロジェクトは仕事が終わってからの時間などで対応してますし、いい
加減な人間なので、あまり期待しないでください。もしプロジェクトに参加
したいという奇特な方がいましたら、sourceforgeの方のプロジェクトで
参加希望の依頼をお送りください。
私が放置してもオープンソースにしておけば、必要な人がいたら自分で直せ
るかもという思いがありオープソースにしています。
とりあえず現時点でのソースを亀つながり(svnのO'RELLY本が亀の表紙)でcvsではなく
svnにアップしてみた。
ビルドにはLinphoneのソースおよびその必要ソースが必要になる。サウンド
コードは今のところAudioQueueのコードを使っているのでを使っているので
10.5以降のサポートになります。XCodeは3.1を使っています。
(2008/09/18)
このページのタイトルタイトル部分およびアプリケーションのアイコンは
みやがわ村ハイパー!さんのフリー素材のアイコンを使わせてもらっています。
アイコンの著作権はみやがわ村ハイパー!さんにあります。(2008/09/18)
sourceforgeのプロジェクトの英文の説明ページを作りたいのだが、ちょっと
時間が作れない。。。
私が書いたLinphoneのmacsnd.cはMacOS X 10.3で使えるのだが、私がそのサポ
ートを行うのはちょっとむずかしいかもしれない。ただしできるだけ10.3でも
ビルドできるように心がけたい。
と最初は考えていましたが、やっぱりmacsnd.cのメンテナンスはおこなわずaqsnd.c
の方に注力して10.5以上のサポートにします。
Linphoneの本家は3.0に移行していますが、こちらはまだ2.1.1のままです。
なぜLinphoneをベースに使ったかというと、
- Linuxでの実績
- ソースコードのUIとSIP/RTPのコードが完全に分離している
- フレームワークがCで書かれていてポータビリティーが高い
- ネイティブでMacOSのサポートがなかったのでCore Audioのコードを実装できる
- Codecのサポートが充実している
- プラグインのサポートがあり機能を追加できる
- GPLと商用ライセンスにになりますが商用で使う予定はないので問題ない
などなどです。
Core Audioのプログラムを書きたいというのは昔の仕事で関係した事のある
とってもすごいプログラマーがAppleでこのプロジェクトに関係しているため
です。
テストにはIP電話の
ACT P123Sも使っている。秋田の横手市で導入されて有名になった機種と
同じメーカだが会社がなくなって、現在は入手不可能なようだ。
マクドナルドの無線LANで試すとかなりパケットロスが発生して、音が途切れる。
pingで最寄りのゲートウエーの到達度を調べても随分落ちる。
アプリケーションに通信状態のステータスを表示する機能があると良いかもし
れない。
aqsnd.cはiPhoneでもビルドできるのだがiPhone OS 3になってから通話の再生
が出来なくなった。OS 3が出た頃に一旦試してあきらめたのだが3.1.3でもだめ
である。read(recode)側のQueueをstartしないと大丈夫なので1つでもQueueが
スタートした状態でAudioQueueStartを呼ぶと駄目みたいだ。。。エラーは-66681
でリファレンスを見るとkAudioQueueErr_CannotStartとなっている。インターネット
で検索すると、Queueをつむ時にAudioQueueEnqueueBufferではなく
AudioQueueEnqueueBufferWithParametersをつかってTimeStampを設定すると良い
ような話があるのだがうまくいかない。。。そもそもQueueにタイムスタンプを
設定して大丈夫ならAudioQueueStartで設定しても良さそうな物なのだが。。。
TimeStamp関係のCAHostTimeBaseというユーティリティコードがAppleから提供され
ているのだがこれがObjectiveCのコードになっている。aqsndはcのコードなので
そのままでは使えずバラして放り込んでみた。しかし今のところ上の問題は解決
してない。
結局TimeStampとは全く関係なく3.xではAudioSessionSetPropertyでkAudioSessionCategory_PlayAndRecord
を設定せずに録音と再生のqueueをAudioQueueStartすると、後に呼ばれた方が
kAudioQueueErr_CannotStartになる。おそらくpjsip関係のコードでもこの問題
があったようなメーリングリストのポストがあったが明確な回答を見つける事
が出来なかった。本家LinphoneでもiPhoneアプリを出したので、aqsnd.cを使っ
ているとすれば同じ処理を入れた物と思われる。
OS X版のTurtleは裏プロジェクトでほんとはiPhone版のプロジェクトででした。
ただAppleのNDAがあったので、OS X版としました。iPhone版のコードは別にあり
ますがGPLであってもバイナリーを公開していないのでソースは公開しません。
そもそもJailBreakな端末でしかチェックしていないので、公開も難しかったり
します。macsnd.cのメンテをやめてaqsnd.cを作ったのはiPhoneで動かすためでした。
eXosipのsemaphoreのmachのパッチもiPhoneのため作って送って反映してもらいました。
MESSAGEメソッド
のeXosip2のパッチ /
MESSAGEメソッド
のLinphoneのパッチ
linphonecore.cのapiをLinCore.mというオブジェクトでラップしている。必要な
APIのラップとauth情報を設定ファイルではなくキーチェインに保存して終了時に
auth情報をすべて消す事で設定ファイルにはパスワードが残らないようにしている。
JailBreak環境だとキーチェインが使えないようなので、このオプションを外す
ことも出来るようにしている。
linphonecoreはrcファイルに設定を書き込んでいる。この処理をMacOSのplist
に変更するのはあまりに手間がかかりそうなので、上のパスワードの処理以外は
rcのままにしている。
マルチアカウントの対応が半分くらいできた。グローバルIPにいる時はプライベート
のアカウントを無効化する仕組みを入れたいのだが、linphonecoreのどこかにいれるか
rcファイルをinit前にいじるかしかなさそう。。。(2010/07/04)
とりあえずコンセプトを説明するためスライドを作ってみた。
LinphoneのMacOS Xサポートについて
(macsnd.cの事を書いた古いページです)
SIP関係の資料
SEMS関係の資料
UPNP関係の資料
Copyright (C) 2008-2010 Hiroki Mori All Rights Reserved.