私は、統合された所有デモ&SDKソースパスを
元の開始前に、最初のジェーン帳でアムウェイ川や湖の弟は、ステップによってこのステップを輝か模索しているhttp://www.jianshu.com/p/2ba2d4aa168e
IPv6を更新
テキストの末尾を参照してください。
テキストが開始されます。
多くのシーンでは、我々のアプリは、大手通信会社がLinphoneの比較、自分のSDKを発売しているが、彼らはよりタイムリーな技術サポートに反映され、開発者(、豊富な開発に、よりやさしい、呼び出すためにVOIPを使用します。文書)が、時には、一定の要件の下で、とのみからLinphone SDKを取った、弾丸アップをかみます。そして、私は純粋なSIPコールを達成することであった、と顧客の需要が、それはLinphoneはSDKの統合、開発の目的で行われる、この記事では、将来の読み取りのための記録であり、第二、無駄無駄時間のその後の開発者は少なく、いくつかのジャンプピットを、できるようにするためです。
まず、重要なダウンロードする必要がLinphoneはデモを、あなたがメッセージを残すことを私に尋ねることができない場合は、CSDN 2ポイントが必要になり、。あなただけの実マシン上で実行することができます。
1.準備
1.1依存するライブラリを追加します
新しいIPv6 SDKをサポートするには、VideoToolBox.frameworkを追加する必要があります
1.2コンフィギュレーション
1.3 httpリクエストの設定
プロジェクトで、ファイル名:iOS9の当初から、Appleはあなたが元のHTTPリクエストメソッドを維持したい場合は、すべてのネットワーク要求は、httpsを使用する必要があることをお勧めします、開発者は、設定ファイル(次の変更が必要とされていないxcode7.0注意を)変更する必要がありますファイルフォルダをサポートし、次のクリップ、右側のウィンドウにキーを追加しますlnfo.pList(プロジェクト名)を探し、選択が表示されます。NSAppTransportSecurity、以下の項目を追加します。NSAllowsArbitraryLoadsは、ブール値を設定YESで、このプラットフォームSDKは、内部のプロジェクトを支援するために、HTTPリクエストメソッド。
1.4バックグラウンドで実行されています
背景に、一般的なiOSのプログラムシステムが中断された後、それが実行を停止しますが、何もすることができません。
从iOS4开始,苹果增加了特性,很好的支持了语音通话功能:
苹果支持应用可以在后台播放和录制声音;
苹果支持网络托管,保证应用在后台时,还能保持网络连接,能接收到来电;
应用可以设置一个超时处理,程序在后台运行时,周期性地唤醒应用,保证客户端和服务器有长连接,使网络不断开。
SDK封装了这些特性,保证了在iOS平台上,有很好的语音通话体验。
开发者需要修改配置文件,这样iOS工程才能支持这些特性。
在工程名的文件夹下面的Supporting Files文件夹中找到并且选择(工程名)lnfo.pList在右边出现的窗口中添加Key: Required background modes,在下面添加两个项:App plays audio和App provides Voice over IP services。(注:如果只是使用发起通话,并无接听功能,则不需要添加App provides Voice over IP services)
2. 导入Linphone SDK
上面工作做完后就可以开始导入Linphone SDK了。
2.1 首先再回到这个熟悉的页面,点击Add Other
2.2 找到下载好的sdk目录,把所有.a库都选择,如下图。
2.3 查看是否关联
Build Settings搜索 Search Paths,在下列两个选项下观察是否已经关联,如图
顺带说一下这个libxml2,大多数时候是不需要的,如果报一些莫名其妙的错误不妨将其导入,且在Build Phases里添加相应库libxml2.tbd
2.4 编译
如果出现了形如“file not found”的错误提示,回到第三步,检查头文件、静态库是否关联成功
3. 功能实现
这一部分可以参考CSDN Linphone Demo(以下统称为CDemo),也可以直接下载我在github代码里的SDK代码部分,更为直接。
3.1 初始化
需要关注CSDN Demo里的主要功能类LinphoneManage.m
实现如下方法即可
1 |
|
3.2 注册
注册方法在CDemo的manager类里没有直接的体现,值得注意的是我标注“三个大坑”的地方,如果有需要用到displayName这个参数的同学一定要注意了,设置好displayName后一定要通过linphone_address_as_string(..)
方法再次获取identity,然后再调用linphone_proxy_config_set_identity(proxyCfg, identity);
将新的identity设置到设置文件中,因为我开始没理清这个proxyCfg的实现逻辑,始终没注意到这一步,还有就是使用了另一个函数linphone_address_as_string_uri_only
的误导,是误导,后者获取到的仅有“sip:”以及之后的那个字符串,并不会将昵称也带进去传入proxyCfg,导致displayName一直设置不成功,掉坑三日终于在某个狂风乱作的下午解决此bug,导致天气都变得风和日丽起来。
注:以下账号、密码、IP、端口需要自己注册。
1 |
|
3.3 拨打电话
接着简单的调用如下方法即可进行SIP呼叫。`
1 |
[[LinphoneManager instance] call:address displayName:displayName transfer:transfer]; |
值得注意的是,呼叫状态、登陆状态的回调都是通过通知来传递的,所以要想获取这些回调,可以监听这些回调,具体通知名在LinphoneManager.h里,形如“kLinphoneCallUpdate”,也可以像我一样,在LinphoneManager.m的各个回调处,将相应的通知改为自己想要设置的代理方法,并设置好代理,可以看我在Github Demo里的LinphoneManager.m处如下方法里的实现。
1 |
- (void)onRegister:(LinphoneCore *)lc cfg:(LinphoneProxyConfig*) cfg state:(LinphoneRegistrationState) state message:(const char*) message; |
4. 为支持ipv 6而导入新版Linphone SDK
旧版SDK不支持ipv6,更后到新版后linphonecore.h增加了一个新的宏LINPHONE_DEPRECATED
,有此标记表示该函数已弃用,而我由于只用到了SIP电话,故直接替换sdk后只报了如下错误,下面一一解决
4.1 替换LINPHONE_DEPRECATED标识的函数
弃用的函数都有对应的新函数,在注释里可以轻易找到
1 |
|
4.2放棄されたライブラリの初期化を削除します。
参照言及今「_libmsilbc_init」上の図では、:ライブラリの新しいバージョンLinphoneのSDKのlibフォルダを変更する.Aので、削除、およびlibmsilbc.aを除去したの減少がある。これはされて、それが中になることですLinphoneManager createLinphoneCore]
レーン削除libmsilbc_init();
4.3第三バグが2のエラーによって引き起こされます
解決1,2は、自然に3を解決します。
基本的にはほとんど自分で、インターネット文書の多くの情報を持っているだけでなく、わずかなブログは徐々に理解していない、実際には、それほどで振り返ってみると、特に複雑ではありませんが、あなたが最初に始める時には非常に苦いですが、私はそれほどあなたを願っていますそれを迂回。
その他のトラブルのために私にメールすることができます[email protected]
それがすべてですありがとうございました。