iOS - idoubs(网络电话)的基本使用

公司最近要用的doubango底层框架 用来开发网络电话。
doubango是以c为底层写的基于sip协议的框架
前人已经在此基础上写了应用idoubs 我们可以通过看这个开源项目获得自己想要的东西
下面来介绍idoubs的结构内容。

前言:如果你还不会idoubs的安装与配置
建议先看这篇文章:idoubs的安装与配置

当你什么都做完后 你会看到你的文件夹是这样子的
iOS - idoubs(网络电话)的基本使用_第1张图片
双击我标注红色的工程文件 打开工程
看左边栏的文件 打开引入的ios-ngn-stack这个工程,其中我红颜色框住的是整个工程要用到的重要的类,这些类就是在底层doubango的基础上进行的编写的,如图:
iOS - idoubs(网络电话)的基本使用_第2张图片

NgnEngine.h : 引擎类
NgnConfigurationService.h : 文件配置服务 最好把文件信息写在这里
NgnSipService.h : sip服务 用来注册账号 注销账号等等
NgnHttpClientService.h : http协议连接服务
NgnNetworkService.h : 网络服务 用来检测网络状态
NgnSoundService.h : 声音服务
NgnContactService.h : 联系人服务
NgnStorageService.h : 存储服务
NgnHistoryService.h : 历史记录服务

基本流程:
1.首先得有一个引擎:
要么NgnEngine* sInstance = [[NgnEngine alloc] init]; 构建一个新对象
要么NgnEngine* sInstance = [NgnEngine sharedInstance] 获得单例

2.引擎开启所有服务 调用start方法 此方法会打开上述所有服务
[sInstance start]

  1. 服务全部开启后 判断账号是否注册 如果没注册 则调用引擎的sipService服务 去注册账号
    [[NgnEngine sharedInstance].sipService registerIdentity]

  2. 当sipService服务开启后 会开启自己的协议栈SipStack 协议栈 初始化sipService的回调属性_mSipCallback的初始化需要用到协议栈 因为有事件回调 所以我们最好在注册账号的控制器放上注册的监听事件

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onRegistrationEvent:) name:kNgnRegistrationEventArgs_Name object:nil];

//== REGISTER events == //
-(void) onRegistrationEvent:(NSNotification*)notification { 
    // gets the new registration state
    ConnectionState_t registrationState = [[NgnEngine sharedInstance].sipService getRegistrationState]; 
    switch (registrationState) {
        case CONN_STATE_NONE:
        case CONN_STATE_TERMINATED:
            if(scheduleRegistration){
                scheduleRegistration = FALSE;
                [self queryConfigurationAndRegister];
            }
            break;

        case CONN_STATE_CONNECTING:
        case CONN_STATE_TERMINATING:
        case CONN_STATE_CONNECTED:
        default:
            [[NSUserDefaults standardUserDefaults] setInteger:1002 forKey:@"1002"];
            break;
    }
}

当注册完账号 接下来我们看看idoubs写的UI界面
其中我就来讲讲里面的主要功能部分(视频拨号、音频拨号),先上图
iOS - idoubs(网络电话)的基本使用_第3张图片

NumPadViewController.h 拨号按钮界面
CallViewController.h 视频音频中转站 当我们点击了拨号,它会根据选项进行语音拨号或视频拨号
AudioViewController.h 语音拨号控制器
VideoViewController.h 视频拨号控制器

AudioViewController.h 和 VideoViewController.h都注册了通话通知

[[NSNotificationCenter defaultCenter]
     addObserver:self selector:@selector(onInviteEvent:) name:kNgnInviteEventArgs_Name object:nil];
-(void) onInviteEvent:(NSNotification*)notification {
    NgnInviteEventArgs* eargs = [notification object];

    if(!audioSession || audioSession.id != eargs.sessionId){
        return;
    }

    switch (eargs.eventType) {
        case INVITE_EVENT_INPROGRESS:
        case INVITE_EVENT_INCOMING:
        case INVITE_EVENT_RINGING:
        case INVITE_EVENT_LOCAL_HOLD_OK:
        case INVITE_EVENT_REMOTE_HOLD:
        default:
        {
            // updates view and state
            [self updateViewAndState];
            break;
        }

        // transilient events
        case INVITE_EVENT_MEDIA_UPDATING:
        {
            self.labelStatus.text = @"Updating...";
            break;
        }

        case INVITE_EVENT_MEDIA_UPDATED:
        {
            self.labelStatus.text = @"Updated";
            break;
        }

        case INVITE_EVENT_TERMINATED:
        case INVITE_EVENT_TERMWAIT:
        {
            // updates view and state
            [self updateViewAndState];
            // releases session
            [NgnAVSession releaseSession: &audioSession];
            // starts timer suicide
            [NSTimer scheduledTimerWithTimeInterval: kCallTimerSuicide
                target: self 
                selector: @selector(timerSuicideTick:) 
                userInfo: nil 
                repeats: NO];
            break;
        }
    }
}

简单的先写到这里 以后再更新,谢谢看完。

你可能感兴趣的:(iOS笔记)