美文网首页PJSIP
iOS—开源Voip客户端Linphone

iOS—开源Voip客户端Linphone

作者: Louis_dm | 来源:发表于2019-10-22 18:24 被阅读0次

    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);
    

    相关文章

      网友评论

        本文标题:iOS—开源Voip客户端Linphone

        本文链接:https://www.haomeiwen.com/subject/pszimctx.html