从老版的linphone需要升级到最新的3.13.9版的linphone,本帖用来记录在升级过程中遇到的一些问题。
3.13.9源码的编译在我之前的一篇文章里面有《最新版本linphone-ios源码的编译》,我老版的linphone为2.几的,因此这次升级改动了不少东西
1.创建帐号失败
提示说no configure for push_notification
通过和linphone源码的对比,发现帐号的创建新增了一个类LinphoneAccountCreator专门进行处理
创建代码如下:
LinphoneAccountCreator*account_creator =linphone_account_creator_new(LC, [LinphoneManager.instancelpConfigStringForKey:@"xmlrpc_url"inSection:@"assistant"withDefault:@""].UTF8String);//创建account对象,后面的三个参数第一个是key我没有做修改,第二个section我参照源码使用当前类的小写类名,第三个跟源码一样为空串
linphone底层是这样实现的
- (NSString*)lpConfigStringForKey:(NSString*)key inSection:(NSString*)section withDefault:(NSString*)defaultValue {
if(!key)
returndefaultValue;
constchar*value =lp_config_get_string(_configDb, [sectionUTF8String], [keyUTF8String],NULL);
returnvalue ? [NSStringstringWithUTF8String:value] : defaultValue;
}
lp_config_get_string,linphone是这样解释这个方法的
/**
* Retrieves a configuration item as a string, given its section, key, and default value.
*
* @ingroup misc
* The default value string is returned if the config item isn't found.
**/
字面意思是说返回一个字符串类型的配置条款,这个方法里面应该是对三个参数进行了组装
linphone_account_creator_set_user_data(account_creator, (__bridgevoid*)(self));
LinphoneAccountCreatorStatususerNameStatus =linphone_account_creator_set_username(account_creator, username.UTF8String);//设置帐号名字,返回一个枚举值
if(userNameStatus !=LinphoneAccountCreatorOK)linphone_account_creator_set_username(account_creator,NULL);
LinphoneAccountCreatorStatuspasswordStatus =linphone_account_creator_set_password(account_creator, password.UTF8String);//设置密码,返回一个枚举值
LinphoneAccountCreatorStatusdomainStatus =linphone_account_creator_set_domain(account_creator, domain.UTF8String);//设置domain,返回一个枚举值
LinphoneAccountCreatorStatustransportStatus =linphone_account_creator_set_transport(account_creator,linphone_transport_parse(transport.lowercaseString.UTF8String));//设置transport,返回一个枚举值
帐号创建成功后,为帐号添加配置
LinphoneProxyConfig* proxyCfg = linphone_account_creator_configure(account_creator);
2、二次接听crash
为了界面美观,我自己重新设计了来电、接听的界面,但是在接听方面出现了问题,在第一次接听成功以后,第二次点击接听按钮就会crash,采用了僵尸对象的提示是我给一个已经dealloc的对象发送了消息,经过仔细的与源码核对,在linphone逻辑处理方面没有任何问题,于是尝试从界面开始找,终于发现了一个小问题
就是在源码中,有定时器的创建repeats值设的是yes,也就是说接听页面不会被release,我尝试在自己的界面添加一个repeats为yes的定时器,方法为一个空的实现,结果竟然可以进行多次接听了,这个问题我一直没搞明白
问题是出在这两行代码中
//设置视频展示的view
linphone_core_set_native_video_window_id([LinphoneManager getLc], (__bridgevoid*)_videoView);
linphone_core_set_native_preview_window_id([LinphoneManager getLc], (__bridgevoid*)_videoPreview);
我把源码定时器的repeats设为no以后,源码在二次接听的时候也会crash,也是报和我一样的问题
这个问题我还不知道到底是什么原因,只能暂时添加一个repeats为yes的定时器,方法空实现
未完待续。。