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

来源:互联网 发布:爱科技耳机推荐知乎 编辑:程序博客网 时间:2024/05/16 18:27

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

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

当你什么都做完后 你会看到你的文件夹是这样子的
文件夹目录
双击我标注红色的工程文件 打开工程
看左边栏的文件 打开引入的ios-ngn-stack这个工程,其中我红颜色框住的是整个工程要用到的重要的类,这些类就是在底层doubango的基础上进行的编写的,如图:
工程栏

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界面
其中我就来讲讲里面的主要功能部分(视频拨号、音频拨号),先上图
拨号部分

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

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

0 0
原创粉丝点击