iOS—开源Voip客户端Linphone

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里面就是资源链接

0.png

把SDK拖进项目后跑起来会报错,原因是无法加载动态库,所以要把库拉改成静态库

1.png

注意: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(@"编码:%@,状态:%hhu",sreung,abool);
    }
    
}
//部分手机本身端口问题 设置随机端口号
LinphoneSipTransports transportValue = {-1, -1, -1, -1};
    
linphone_core_set_sip_transports(LC, &transportValue);

  • linphone启动会自动注册上服务器,根据业务需要用完需要清空配置信息
[[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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一只手拿着钥匙,要插到锁眼里。 手很轻盈,自信。 对的钥匙,就能打开对的锁,毫不费力。 如果钥匙错了,再努力也是枉...
    一个壶阅读 1,378评论 0 0
  • 青春很任性 故人也很任性 你好 我是烟花 我更任性 3月25号12.35分 故人踏上了从惠州开往我这的汽车 ...
    故人与烟花阅读 1,828评论 0 0
  • 经常会觉得自己没有做好方糖带领人,原因就是我太懒了,太不善于用“复盘”这个好工具。所以经常在带领人群里羡慕别人的复...
    雪梅_85bd阅读 1,234评论 0 3
  • · 关于所处环境 · 1.不公平是一种常态。但永远不要成为那些不公平的附庸,不要为所谓的捷径摇旗呐喊。 2.被比较...
    就是很酷很可爱阅读 1,684评论 0 0

友情链接更多精彩内容