Linphone 集成配置

一、准备工作

1.1 添加依赖库

libz.tbd

libiconv.tbd

libsqlite3.tbd

libc++.tbd

libstdc++.6.tbd

libresolv.tbd

AudioToolbox.framework

UIKit.framework

QuartzCore.framework

OpenGLES.framework

MessageUI.framework

MediaPlayer.framework

CoreGraphics.framework

MobileCoreServices.framework

AddressBookUI.framework

AddressBook.framework

SystemConfiguration.framework

CFNetwork.framework

AssetsLibrary.framework

AVFoundation.framework

CoreAudio.framework

CoreMedia.framework

CoreTelephony.framework

CoreVideo.framework

Foundation.framework

CoreLocation.framework

新增:VideoToolBox.framework

新增: libxml2.2.tbd

1.2、Other Linker Flags 中增加 -ObjC

Other Linker Flags 中增加 -lxml2

1.2、将Framework Search Paths 设置为  /usr/lib/libxml2.tbd

1.2、GTMBase64.m设置为arc环境:  -fro-objc-arc

1.2、Header Search Paths设置

$(SDKROOT)/usr/include/libxml2

$(SRCROOT)/liblinphone-sdk/apple-darwin/include

1.2、Library Search Paths设置

$(inherited)

$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/lib

$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/lib/mediastreamer/plugins

1.2、User Header Search Paths设置

$(SDKROOT)/usr/include/libxml2

1.2、Enable Bitcode 设置 NO

1.3、新建PrefixHeader.pch文件,加入#import

->Prefix Header设置为 LinphoneDemo/PrefixHeader.pch

#ifdef __OBJC__#import

#import "LinphoneManager.h"

//#import "XMPPStream+Secure.h"

#import "Utils.h"

#endif

1.4、权限设置

NSAppleMusicUsageDescriptionApp 需要您的同意,才能访问媒体资料库

NSBluetoothPeripheralUsageDescriptionApp 需要您的同意,才能访问蓝牙

NSCalendarsUsageDescriptionApp 需要您的同意,才能访问日历

NSCameraUsageDescriptionApp 需要您的同意,才能访问相机

NSContactsUsageDescriptionApp 需要您的同意,才能读取通讯录

NSHealthShareUsageDescriptionApp 需要您的同意,才能访问健康分享

NSHealthUpdateUsageDescriptionApp 需要您的同意,才能访问健康更新

NSLocationAlwaysUsageDescriptionApp 需要您的同意,才能始终访问位置

NSLocationUsageDescriptionApp 需要您的同意,才能访问位置

NSLocationWhenInUseUsageDescriptionApp 需要您的同意,才能在使用期间访问位置

NSMicrophoneUsageDescriptionApp 需要您的同意,才能访问麦克风

NSMotionUsageDescriptionApp 需要您的同意,才能访问运动与健身

NSPhotoLibraryUsageDescriptionApp 需要您的同意,才能访问相册

NSRemindersUsageDescriptionApp 需要您的同意,才能访问提醒事项

1.5、http请求设置NSAppTransportSecurityNSAllowsArbitraryLoads

1.6、后台运行  /*  打电话  下载网络数据  远程通知  接电话  */

一般的iOS程序进入后台后会被系统挂起,就会停止执行,不能执行任何操作。

•从iOS4开始,苹果增加了特性,很好的支持了语音通话功能:

•苹果支持应用可以在后台播放和录制声音;

•苹果支持网络托管,保证应用在后台时,还能保持网络连接,能接收到来电;

•应用可以设置一个超时处理,程序在后台运行时,周期性地唤醒应用,保证客户端和服务器有长连接,使网络不断开

•SDK封装了这些特性,保证了在iOS平台上,有很好的语音通话体验。开发者需要修改配置文件,这样iOS工程才能支持这些特性UIBackgroundModesaudiofetchremote-notificationvoip

二、导入Linphone SDK

2.1  将下面两个文件中的.a文件全部在Linked Frameworks and Libraries 中添加进去/Users/Admin/Desktop/GitLab/WiseUC/liblinphone-sdk/apple-darwin/lib/Users/Admin/Desktop/GitLab/WiseUC/liblinphone-sdk/apple-darwin/lib/mediastreamer/plugins

2.2查看项目是否有如下配置,有即正确,没有则自己添加上Header Search Patchs

$(SRCROOT)/liblinphone-sdk/apple-darwin/includeLibrary

Search Patchs$(inherited)$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/lib$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/lib/mediastreamer/plugins

/* 通知 */

NSString *const kLinphoneCoreUpdate                              = @"LinphoneCoreUpdate";

//显示状态

NSString *const kLinphoneDisplayStatusUpdate                  = @"LinphoneDisplayStatusUpdate";

//接收到信息

NSString *const kLinphoneMessageReceived                      = @"LinphoneMessageReceived";

//开始编辑文字

NSString *const kLinphoneTextComposeEvent                    = @"LinphoneTextComposeStarted";

//通话更新

NSString *const kLinphoneCallUpdate                                = @"LinphoneCallUpdate";

//注册更新

NSString *const kLinphoneRegistrationUpdate                      = @"LinphoneRegistrationUpdate";

//通讯录更新

NSString *const kLinphoneAddressBookUpdate                    = @"LinphoneAddressBookUpdate";

//主视图更新

NSString *const kLinphoneMainViewChange                          = @"LinphoneMainViewChange";

//日志更新

NSString *const kLinphoneLogsUpdate                                = @"LinphoneLogsUpdate";

//设置更新

NSString *const kLinphoneSettingsUpdate                            = @"LinphoneSettingsUpdate";

//蓝牙可用性更新

NSString *const kLinphoneBluetoothAvailabilityUpdate            = @"LinphoneBluetoothAvailabilityUpdate";

//配置状态更新

NSString *const kLinphoneConfiguringStateUpdate                = @"LinphoneConfiguringStateUpdate";

//全局状态更新

NSString *const kLinphoneGlobalStateUpdate                        = @"LinphoneGlobalStateUpdate";

//接收到通知

NSString *const kLinphoneNotifyReceived                              = @"LinphoneNotifyReceived";

NSString *const kLinphoneNotifyPresenceReceivedForUriOrTel = @"LinphoneNotifyPresenceReceivedForUriOrTel";

//通话加密状态改变

NSString *const kLinphoneCallEncryptionChanged                  = @"LinphoneCallEncryptionChanged";

//文件传输发送更新

NSString *const kLinphoneFileTransferSendUpdate                = @"LinphoneFileTransferSendUpdate";

//文件传输接受更新

NSString *const kLinphoneFileTransferRecvUpdate                = @"LinphoneFileTransferRecvUpdate";

/* 通话状态Enum*/

typedef enum _LinphoneCallState

{

LinphoneCallIdle,                  /**<通话初始化 */

LinphoneCallIncomingReceived,      /**<收到来电 */

LinphoneCallOutgoingInit,          /**<呼出电话初始化 */

LinphoneCallOutgoingProgress,      /**<呼出电话拨号中 */

LinphoneCallOutgoingRinging,        /**<呼出电话正在响铃 */

LinphoneCallOutgoingEarlyMedia,    /**<早期媒体提出呼叫*/

LinphoneCallConnected,              /**<通话连接成功*/

LinphoneCallStreamsRunning,        /**媒体流已建立*/

LinphoneCallPausing,                /**<通话暂停中 */

LinphoneCallPaused,                /**< 通话暂停成功*/

LinphoneCallResuming,              /**<通话被恢复*/

LinphoneCallRefered,                /**通话转移*/

LinphoneCallError,                  /**<通话错误*/

LinphoneCallEnd,                    /**<通话正常结束*/

LinphoneCallPausedByRemote,        /**<通话被对方暂停*/

LinphoneCallUpdatedByRemote,        /**<对方请求更新通话参数 */

LinphoneCallIncomingEarlyMedia,

@required

- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(PKPushType)type;更新证书

- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type;收到推送来电

@optional

- (void)pushRegistry:(PKPushRegistry *)registry didInvalidatePushTokenForType:(PKPushType)type;推送证书无效

(LinphoneCall)

/*******************************************************************************

*call通话相关方法

******************************************************************************/

linphone_call_state_to_string(LinphoneCallState cs);            通话状态-》string

linphone_call_get_user_data(const LinphoneCall *call);          获取,检索与呼叫关联的用户指针。

linphone_call_set_user_data(LinphoneCall *call, void *ud);      设置用户数据,将一个用户指针分配给该呼叫。

linphone_call_get_core(const LinphoneCall *call);

linphone_call_get_state(const LinphoneCall *call);              获取通话状态

linphone_core_get_current_call_remote_address(LinphoneCore *lc); 获取当前调用的远程地址,如果没有当前调用,则为NULL。

(LinphoneCallLog)

/*******************************************************************************

*通话记录相关方法(在这个里边可以获取到电话的相关信息)

******************************************************************************/

linphone_call_log_get_call_id(const LinphoneCallLog *cl);        呼叫ID

linphone_call_log_get_dir(LinphoneCallLog *cl);

linphone_call_log_get_duration(LinphoneCallLog *cl);              呼叫持续时间在几秒钟内

linphone_call_log_get_from_address(LinphoneCallLog *cl);          来电地址(即来自)呼叫。

linphone_call_log_get_local_stats(const LinphoneCallLog *cl);    本地为本次计算的RTP统计信息。

linphone_call_log_get_quality(LinphoneCallLog *cl);              呼叫的整体质量指示。

linphone_call_log_get_ref_key(const LinphoneCallLog *cl);        与呼叫记录相关联的引用键字符串,如果没有关联,则返回NULL。

linphone_call_log_get_remote_address(LinphoneCallLog *cl);        呼叫的远程地址。

linphone_call_log_get_remote_stats(const LinphoneCallLog *cl);    由远程端计算的RTP统计信息

linphone_call_log_get_start_date(LinphoneCallLog *cl);            通话开始的日期

linphone_call_log_get_status(LinphoneCallLog *cl);                通话状态

linphone_call_log_get_to_address(LinphoneCallLog *cl);            呼叫的目的地址(即到)。

linphone_call_log_set_ref_key(LinphoneCallLog *cl, const char *refkey);        PARAM:refkey与呼叫记录关联的参考键字符串。

linphone_call_log_video_enabled(LinphoneCallLog *cl);            表示视频是否在通话结束时启用。

linphone_call_log_to_str(LinphoneCallLog *cl);                    获取描述呼叫的可读字符串。

linphone_call_log_was_conference(LinphoneCallLog *cl);            获取呼叫类型,如果是会议的呼叫,则为TRUE

/*******************************************************************************

* 参考和用户数据处理功能

******************************************************************************/

linphone_call_log_get_user_data(const LinphoneCallLog *cl);      与通话记录相关联的用户数据。

linphone_call_log_set_user_data(LinphoneCallLog *cl, void *ud);  将用户数据分配给通话记录。

linphone_call_log_ref(LinphoneCallLog *cl);                      相同的LinphoneCallLog对象

linphone_call_log_unref(LinphoneCallLog *cl);                    释放对通话记录的引用。

(LinphoneAddress)

/*******************************************************************************

* 地址相关方法,在打电话时会用到这个。

******************************************************************************/

LINPHONE_PUBLIC LinphoneAddress * linphone_address_new(const char *addr);

LINPHONE_PUBLIC LinphoneAddress * linphone_address_clone(const LinphoneAddress *addr);

LINPHONE_PUBLIC LinphoneAddress * linphone_address_ref(LinphoneAddress *addr);

LINPHONE_PUBLIC void linphone_address_unref(LinphoneAddress *addr);

LINPHONE_PUBLIC const char *linphone_address_get_scheme(const LinphoneAddress *u);

LINPHONE_PUBLIC const char *linphone_address_get_display_name(const LinphoneAddress* u);

LINPHONE_PUBLIC const char *linphone_address_get_username(const LinphoneAddress *u);

LINPHONE_PUBLIC const char *linphone_address_get_domain(const LinphoneAddress *u);

LINPHONE_PUBLIC int linphone_address_get_port(const LinphoneAddress *u);

LINPHONE_PUBLIC int linphone_address_set_display_name(LinphoneAddress *u, const char *display_name);

LINPHONE_PUBLIC int linphone_address_set_username(LinphoneAddress *uri, const char *username);

LINPHONE_PUBLIC int linphone_address_set_domain(LinphoneAddress *uri, const char *host);

LINPHONE_PUBLIC int linphone_address_set_port(LinphoneAddress *uri, int port);

LINPHONE_PUBLIC int linphone_address_set_transport(LinphoneAddress *uri,LinphoneTransportType type);

LINPHONE_PUBLIC void linphone_address_clean(LinphoneAddress *uri);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,612评论 5 471
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,345评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,625评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,022评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,974评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,227评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,688评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,358评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,490评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,402评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,446评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,721评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,802评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,013评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,504评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,080评论 2 341

推荐阅读更多精彩内容