点对点音频通话

点对点音频通话功能包含实时音频通话,提供呼叫、接听、挂断、话单通知等功能。阅读该章节,您可以迅速完成一个最简单的点对点音频通话的呼叫接听和挂断功能。

呼叫/接听流程

sequenceDiagram 主叫->>被叫: 主叫发起通话请求(start) 被叫->>被叫: 被叫收到通话请求回调(onReceive) 被叫->>主叫: 被叫响应通话请求(response) 被叫-->>被叫: 呼入的通话已经被该帐号其他端处理回调(onResponsedByOther) 主叫->>主叫: 主叫收到被叫响应回调(onResponse) 主叫->>主叫: 通话建立成功(onCallEstablished) 被叫->>被叫: 通话建立成功(onCallEstablished)

主叫发起通话请求

API介绍

发起一个点对点音频网络通话

API原型

public static bool Start(NIMVideoChatMode mode,string apns_text,NIMVChatInfo info,string customInfo = null)

File:NIMVChatAPI.cs

参数说明
参数 类型 说明
mode NIMVideoChatMode 音视频通话类型,音频或音视频,目前只支持音频
apns_text string 推送文本,推送给手机显示
custom_info string 自定义信息,带给接收方
info string 音视频通话的扩展参数封装类
返回值说明

返回一个bool类型值。若调用成功返回true,否则返回false。一般失败是由于有正在进行的通话导致。

示例
public void OnStartVchat()
{
    NIMVChatInfo info = new NIMVChatInfo();
    info.Uids.Add("uid");
    info.KeepCalling =  1;
    info.ServerAudioRecord =  0;
    info.CustomAudio = 0;
    VChatAPI.Start(NIMVideoChatMode.kNIMVideoChatModeAudio, "Untiy Demo", info);
}
特殊说明

在通话发起时,应该设置一个定时器,用于在通话建立前等待超时时能主动结束通话。

被叫收到通话请求回调

API介绍

收到一个点对点音频通话的邀请。设置统一的通话回调参数后,在委托对象onSessionInviteNotify返回

API原型

public delegate void onSessionInviteNotifyHandler(long channel_id, string uid, int mode, long time,string customInfo);

File:NIMVChatDef.cs

参数说明
参数 类型 说明
channel_id long 频道cid
uid string 对方uid
mode int 通话类型
time long 毫秒级 时间戳
customInfo string 自定义数据
示例
NIMVChatSessionStatus vchat_session_;
/// 邀请通知
vchat_session_.onSessionInviteNotify = OnSessionInviteNotifyCallback;
public void OnSessionInviteNotifyCallback(long channel_id, string uid, int mode, long time,string customInfo)
{

}
VChatAPI.SetSessionStatusCb(vchat_session_);

被叫响应通话请求

API介绍

通知邀请方自己的处理结果。如果已有通话存在,需要结束已有通话才能接听新的通话。

API原型

public static bool CalleeAck(long channel_id, bool accept, NIMVChatInfo info)

File:NIMVChatAPI.cs

参数说明
参数 类型 说明
channel_id long 频道id
accept bool 是否接听
info NIMVChatInfo 通话参数封装类
返回值说明

返回一个bool类型值。若调用成功返回true,否则返回false(可能channel_id无匹配,如要接起另一路通话前先结束当前通话)

示例
public void OnVChatAccept(long channel_id,bool accept)
{
    if (channel_id!= 0)
    {
       NIMVChatInfo CalleeVchatInfo = new NIMVChatInfo();
       CalleeVchatInfo.ServerAudioRecord = 0;
       VChatAPI.CalleeAck(channel_id, accept, CalleeVchatInfo);
    }
}
特殊说明

在通话接听时,应该设置一个定时器,用于在通话建立前等待超时时能主动结束通话。

主叫收到被叫响应回调

API介绍

收到被叫方响应的回调信息通知。由注册通话事件后,在回调中区分。

API原型

public delegate void onSessionCalleeAckNotifyHandler(long channel_id,string uid, int mode, bool accept);

File:NIMVChatDef.cs

参数说明
参数 类型 说明
channel_id long 频道id
uid string 对方uid
mode int 通话类型
accept bool 对端接听结果
示例
NIMVChatSessionStatus vchat_session_;
/// 发起后对方响应通知
vchat_session_.onSessionCalleeAckNotify = OnSessionCalleeAckNotifyCallback;
public void OnSessionCalleeAckNotifyCallback(long channel_id, string uid, int mode, bool accept)
{

}
VChatAPI.SetSessionStatusCb(vchat_session_);
特殊说明

呼入的通话已经被该帐号其他端处理回调

API介绍

收到本人在别的端响应的回调通知。由注册通话事件后,在回调中区分。

API原型

public delegate void onSessionSyncAckNotifyHandler(long channel_id, int code,string uid, int mode, bool accept, long time, int client);

File:NIMVChatDef.cs

参数说明
参数 类型 说明
channel_id long 频道id
code int 无效
uid string 对方uid
mode int 通话类型
accept bool 接听结果
time long 毫秒级时间戳
client int 客户端类型
json_extension char* Json 扩展,返回 kNIMVChatTime,kNIMVChatType对应NIMVideoChatMode,kNIMVChatAccept,kNIMVChatClient
user_data void* 注册回调时的APP自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理
示例
NIMVChatSessionStatus vchat_session_;
/// 本人其他端响应通知
vchat_session_.onSessionSyncAckNotify = OnSessionSyncAckNotifyCallback;
public void OnSessionSyncAckNotifyCallback(long channel_id, int code, string uid, int mode, bool accept, long time, int client)
{

}
VChatAPI.SetSessionStatusCb(vchat_session_);
特殊说明

通话建立结果回调

API介绍

通话在对方接听后,双方底层都开始建立连接,以对方加入通话为通话建立成果的标记。

API原型

public delegate void onSessionConnectNotifyHandler(long channel_id, int code,string record_file,string video_record_file,long chat_time, ulong chat_rx, ulong chat_tx);

public delegate void onSessionPeopleStatusHandler(long channel_id,string uid, int status);

File:NIMVChatDef.cs

参数说明

连接状态:

参数 类型 说明
channel_id long 频道id
code int 结果状态
record_file string 录制音频文件名(服务器开启录制时有效)
video_revord_file 录制视频文件名(服务器开启录制时有效)
chat_time long 通话本地时长,code为1001有效
chat_rx ulong 下行数据量 code为1001有效
chat_tx ulong 上行数据量 code 为1001有效

对端进出:

参数 类型 说明
channel_id long 频道id
uid string 用户uid
status int 状态码,对应NIMVideoChatSessionStatus
示例
NIMVChatSessionStatus vchat_session_;
/// 链接通知
vchat_session_.onSessionConnectNotify = OnSessionConnectNotifyCallback;
/// 成员状态通知
vchat_session_.onSessionPeopleStatus = OnSessionPeopleStatusCallback;
public void OnSessionConnectNotifyCallback(long channel_id, int code, string record_file, string video_record_file, long chat_time, ulong chat_rx, ulong chat_tx)
{
    //do something
}
public void OnSessionPeopleStatusCallback(long channel_id, string uid, int status)
{
    //do something
}
VChatAPI.SetSessionStatusCb(vchat_session_);
特殊说明

在主叫发起通话和被叫收到邀请后,都应该创建一个定时器,当通话建立超时时,应该按创建失败的流程结束通话。

挂断流程

sequenceDiagram 主叫->>被叫: 结束通话(hangup) 被叫->>被叫: 收到对方结束通话回调(onHangup) 被叫->>被叫: 通话断开(onCallDisconnected) 被叫->>被叫: 话单通知 主叫->>主叫: 通话断开(onCallDisconnected) 主叫->>主叫: 话单通知

结束通话

API介绍

需要在通话结束时调用,用于底层挂断和清理数据,如果是自己主动结束会通知对方。

API原型

public static void End(string jsonExtension="")

File:NIMVChatAPI.cs

参数说明
参数 类型 说明
json_extension char* Json 扩展,无效
返回值说明

无返回值。

示例
VChatAPI.End();//断开通话
特殊说明

主动结束会返回hangup调用结果的回调通知,对于已经建立连接的通话,结束后返回connect的回调通知,code=1001(kNIMVChatConnectLogout)

收到对方结束通话回调

API介绍

对端主动结束通话,另一端会收到挂断通知。

API原型

public delegate void onSessionHandler(long channel_id, int code);

File:NIMVChatDef.cs

参数说明
参数 类型 说明
channel_id long 频道id
code int 错误码
示例
NIMVChatSessionStatus vchat_session_;
/// 对方挂断通知
vchat_session_.onSessionHangupNotify = OnSessionHangupNotifyCallback;

public void OnSessionHangupNotifyCallback(long channel_id, int code)
{
    //do something
}
VChatAPI.SetSessionStatusCb(vchat_session_);

通话断开

API介绍

在通话建立后,会有connect的通知,告知200的成功状态。之后connect返回非200都代表通话断开。

API原型

public delegate void onSessionConnectNotifyHandler(long channel_id, int code,string record_file,string video_record_file,long chat_time, ulong chat_rx, ulong chat_tx);

File:NIMVChatDef.cs

参数说明
参数 类型 说明
channel_id long 频道id
code int 错误码NIMVChatConnectErrorCode,200代表连接成功
record_file string 录制音频文件名(服务器开启录制时有效)
video_revord_file 录制视频文件名(服务器开启录制时有效)
chat_time long 通话本地时长,code为1001有效
chat_rx ulong 下行数据量 code为1001有效
chat_tx ulong 上行数据量 code 为1001有效
示例
NIMVChatSessionStatus vchat_session_;
/// 链接通知
vchat_session_.onSessionConnectNotify = OnSessionConnectNotifyCallback;

public void OnSessionConnectNotifyCallback(long channel_id, int code, string record_file, string video_record_file, long chat_time, ulong chat_rx, ulong chat_tx)
{
    //do something
}

VChatAPI.SetSessionStatusCb(vchat_session_);
特殊说明

大部分因为网络原因导致的通话断开,都会在连接超时后返回connect通知,并且这个超时和IM的账号登陆长链接无关联。