网络状况
本章节介绍有关网络状况的功能。针对网络状况,网易云信提供了网络探测和网络状况回调这两个功能。
网络探测是一个辅助的网络情况测试工具,可以探测音视频通话网络的连通性、丢包率和延迟等信息。目前支持选择音频通话和视频通话这两种通话模式的探测,视频通话的网络探测支持选择相应的清晰度进行探测。另外,网络探测会占用网络带宽资源,建议在通话开始之前使用以免影响通话质量。
网络状况回调是通话过程中,SDK定时会通知上层当前的网络状况。值得注意的是,这个网络状况是基于当前的实际通话情况的。比如,当前正进行的是音频通话,上报的网络情况是良好,那只是说明当前的网络情况可以很好地满足音频通话,并不能说明当前进行视频通话也会很流畅。
开启网络探测
- API介绍
开启网络探测,网络探测结果通过 completion
回调给应用
- API原型
@protocol NIMAVChatNetDetectManager <NSObject>
/**
* 开始网络探测任务
*
* @param detectType 探测类型 包括音频探测 及6种清晰度的视频探测
*
* @param completion 任务完成 block
*
* @return 开始的网络探测任务的 id,可以用该 id 停止该任务,如果返回 0 表示开始失败
*/
- (UInt64)startDetectTaskForDetectType:(NIMAVChatNetDetectType)detectType
completion:(NIMAVChatNetDetectCompleteBlock)completion;
@end
- 参数说明
API参数说明
参数 | 类型 | 说明 |
---|---|---|
detectType | BOOL | 探测类型 包括音频探测 及6种清晰度的视频探测 |
completion | NIMAVChatNetDetectCompleteBlock | 任务完成 |
- 示例
//开启480P视频网络探测
[[NIMAVChatSDK sharedSDK].avchatNetDetectManager startDetectTaskForDetectType:NIMAVChatNetDetectType480P
completion:^(NIMAVChatNetDetectResult * _Nonnull result) {
//探测完成结果回调
weakself.detectResult = result;
}];
停止网络探测
- API介绍
停止网络探测
- API原型
@protocol NIMAVChatNetDetectManager <NSObject>
/**
* 停止网络探测任务
*
* @param taskId 需要停止的任务的 id
*/
- (void)stopDetectTask:(UInt64)taskId;
@end
- 参数说明
参数 | 类型 | 说明 |
---|---|---|
taskId | UInt64 | 需要停止的任务的 id |
- 示例
//停止网络探测
[[NIMAVChatSDK sharedSDK].avchatNetDetectManager stopDetectTask:taskId];
获取网络探测日志文件路径
- API介绍
获取网络探测日志文件路径
- API原型
@protocol NIMAVChatNetDetectManager <NSObject>
/**
* 获得 SDK 网络探测 log 文件路径
*
* @return 网络探测 log 文件路径
*/
- (NSString *)logFilepath;
@end
参数说明
无
示例
//获取网络探测日志文件路径
NSString *filePath = [[NIMAVChatSDK sharedSDK].avchatNetDetectManager logFilepath];
当前通话网络状况回调
- API介绍
当前通话网络状况回调
- API原型
@protocol NIMNetCallManagerDelegate <NSObject>
/**
* 当前通话网络状态
*
* @param status 网络状态
* @param user 网络状态对应的用户;如果是自己,表示自己的发送网络状态
*/
- (void)onNetStatus:(NIMNetCallNetStatus)status
user:(NSString *)user;
@end
- 参数说明
参数 | 类型 | 说明 |
---|---|---|
status | NIMNetCallNetStatus | 状态 |
user | NSString | 网络状态对应的用户;如果是自己,表示自己的发送网络状态 |
- 示例
//网络状况回调
- (void)onNetStatus:(NIMNetCallNetStatus)status user:(NSString *)user
{
NSString *netState;
switch (status) {
case NIMNetCallNetStatusGood:
netState = @"网络正常:";
break;
case NIMNetCallNetStatusPoor:
netState = @"网络一般:";
break;
case NIMNetCallNetStatusBad:
netState = @"网络差:";
break;
default:
break;
}
}
- 特殊说明
网络状态返回中,根据user
参数来判断本人及他人,本人状态一般指本人上行网络情况,他人的网络状态指本地接收对方数据的下行网络情况。
获取当前通话网络状况
- API介绍
获取当前通话网络状况
- API原型
@protocol NIMNetCallManager <NSObject>
/**
* 获取当前网络通话中某用户的网络状态
*
* @param user 用户. 可以传入自己的 id 以获取自己的发送网络状况
*
* @return 网络状态
*/
- (NIMNetCallNetStatus)netStatus:(NSString *)user;
@end
- 参数说明
参数 | 类型 | 说明 |
---|---|---|
user | NSString | 用户. 可以传入自己的 id 以获取自己的发送网络状况 |
- 示例
//获取点对点通话对方的网络状态
NIMNetCallNetStatus status = [[NIMAVChatSDK sharedSDK].netCallManager netStatus:peerUid];
网络探测结果
网络探测结果回调声明如下:
typedef void(^NIMAVChatNetDetectCompleteBlock)(NIMAVChatNetDetectResult *result)
返回的 result
包含以下参数:
/**
网络探测任务结果
*/
@interface NIMAVChatNetDetectResult : NSObject
/**
任务 id
*/
@property (nonatomic,assign,readonly) UInt64 taskId;
/**
任务执行结果,如果没有错误则为 nil
*/
@property (nonatomic,strong,readonly) NSError *error;
/**
丢包率百分比
*/
@property (nonatomic,assign,readonly) NSInteger lossRate;
/**
rtt 最大值
*/
@property (nonatomic,assign,readonly) NSInteger rttMaximal;
/**
rtt 最小值
*/
@property (nonatomic,assign,readonly) NSInteger rttMinimal;
/**
rtt 平均值
*/
@property (nonatomic,assign,readonly) NSInteger rttAverage;
/**
rtt 偏差
*/
@property (nonatomic,assign,readonly) NSInteger rttMeanDeviation;
/**
扩展信息
*/
@property (nonatomic,copy,readonly) NSString *expandInfo;
@end
taskId
是任务标识,与开始任务接口返回的 id 对应;
error
是任务执行的结果,如果执行成功为 nil,如果执行失败,result
中的 taskId
以外的其他字段均无意义;
在上述返回的字段中,lossRate、rttAverage、rttMeanDeviation这三个值最能反应当前客户端的实际网络情况。由这三个值可以计算出当前的网络状况指数:
网络状况指数 = (lossRate/20)*50% +(rttAverage/1200)*25% +(rttMeanDeviation/150)*25%
经过我们的反复测试,现提供三个网络状况指数节点
网络状况指数节点 | lossRate(%) | rttAverage(ms) | rttMeanDeviation(ms) | 网络状况指数 |
---|---|---|---|---|
A | 3 | 500 | 50 | 0.2625 |
B | 10 | 800 | 80 | 0.55 |
C | 20 | 1200 | 150 | 1 |
备注:
1.当网络状况指数≤0.2625时,网络状况非常好,音视频通话流畅;
2.当0.2625<网络状况指数≤0.55时,网络状况好,音视频通话偶有卡顿;
3.当0.55<网络状况指数≤1时,网络状况差,音频通话流畅;
4.当网络状况指数>1时,网络状况非常差,音频通话偶有卡顿。