Linphone一個免費開源的SIP客戶端哑姚,iOS祭饭、Android、windows叙量、mac倡蝙、linux都支持。
其功能有語音绞佩、視頻寺鸥、撥打網絡電話、即時通訊品山、多人會議胆建。
iOS集成文檔:
https://wiki.linphone.org/xwiki/wiki/public/view/Lib/Getting%20started/iOS/
用cocoapods方式集成下載會很慢,可以直接下載他的SDK拉進項目肘交。
https://gitlab.linphone.org/BC/public/podspec.git
選擇一個版本打開linphone-sdk.podspec 笆载,底部s.source里面就是資源鏈接
把SDK拖進項目后跑起來會報錯,原因是無法加載動態(tài)庫涯呻,所以要把庫拉改成靜態(tài)庫
注意:linphonesw 這個框架是swift用的OC不需要導入
這些框架大部分都是用C語言寫的凉驻,我們需要參考官方demo,抽取重要的方法复罐,由于demo中的UI和功能代碼是寫在一起的涝登,所以我們只能抽取總結重要的代碼。最終獲得了只有功能部分的LinphoneManager類效诅,之后使用起來方法太多缀拭,我又封裝了一個DMLinphoneManager,以下是DEMO填帽。
這些框架大部分都是用C語言寫的,我們需要參考官方demo咙好,抽取重要的方法篡腌,由于demo中的UI和功能代碼是寫在一起的,所以我們只能抽取總結重要的代碼勾效。最終獲得了只有功能部分的LinphoneManager類嘹悼,之后使用起來方法太多叛甫,我又封裝了一個DMLinphoneManager。
需要注意的點:
- 設置音頻格式:可以設置多種格式杨伙,客戶端會根據服務器的支持情況進行選擇
#pragma mark - 設置音頻編碼格式
- (void)synchronizeCodecs:(const MSList *)codecs {
PayloadType *pt;
const MSList *elem;
for (elem = codecs; elem != NULL; elem = elem->next) {
pt = (PayloadType *)elem->data;
NSString *sreung = [NSString stringWithFormat:@"%s", pt->mime_type];
NSString *normalBt = [NSString stringWithFormat:@"%d",pt->clock_rate];
if ([sreung isEqualToString:@"speex"]
||[sreung isEqualToString:@"PCMU"]
||[sreung isEqualToString:@"PCMA"]) {
linphone_core_enable_payload_type(LC,pt, YES);
}
else
{
linphone_core_enable_payload_type(LC, pt, 0);
}
bool_t abool = linphone_core_payload_type_enabled(LC, pt);
NSLog(@"編碼:%@,狀態(tài):%hhu",sreung,abool);
}
}
-
關于音頻編碼的對比 :https://blog.csdn.net/houqi1993/article/details/50504045?winzoom=1
設置隨機端口號:
//部分手機本身端口問題 設置隨機端口號
LinphoneSipTransports transportValue = {-1, -1, -1, -1};
linphone_core_set_sip_transports(LC, &transportValue);
- linphone啟動會自動注冊上服務器其监,根據業(yè)務需要用完需要清空配置信息
[[LinphoneManager instance] lpConfigSetBool:FALSE forKey:@"pushnotification_preference"];
LinphoneSipTransports transportValue = {-1, -1, -1, -1};
if (linphone_core_set_sip_transports(LC, &transportValue)) {
NSLog(@"cannot set transport");
}
[[LinphoneManager instance] lpConfigSetString:@"" forKey:@"sharing_server_preference"];
[[LinphoneManager instance] lpConfigSetBool:FALSE forKey:@"ice_preference"];
[[LinphoneManager instance] lpConfigSetString:@"" forKey:@"stun_preference"];
linphone_core_set_stun_server(LC, NULL);
linphone_core_set_nat_policy(LC, NULL);
linphone_core_clear_all_auth_info(LC);
linphone_core_clear_proxy_config(LC);
linphone_core_clear_call_logs(LC);