-
Notifications
You must be signed in to change notification settings - Fork 271
streamStat
sunjian283019 edited this page Aug 25, 2016
·
15 revisions
##推流 配置好采集参数之后,通过kit.streamerBase类的startStream和stopStream方法启动和停止推流。
##状态 推流相关的消息通知需要通过NSNotificationCenter注册 KSYStreamStateDidChangeNotification来接收。 当收到推流状态变化的通知时,通过kit.streamerBase.streamState属性查询新的状态
| 状态名称 | 状态说明 |
|---|---|
| KSYStreamStateIdle | 初始化时状态为空闲 |
| KSYStreamStateConnecting | 连接中 |
| KSYStreamStateConnected | 已连接 |
| KSYStreamStateDisconnecting | 断开连接中 |
| KSYStreamStateError | 推流出错 |
注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(onStreamStateChange:)
name:KSYStreamStateDidChangeNotification
object:nil];
响应事件:
- (void) onStreamStateChange:(NSNotification *)notification {
if ( _kit.streamerBase.streamState == KSYStreamStateIdle) {
NSLog(@"idle");
}
else if ( _kit.streamerBase.streamState == KSYStreamStateConnected){
NSLog(@"connected");
}
else if (_kit.streamerBase.streamState == KSYStreamStateConnecting ) {
NSLog(@"kit connecting");
}
else if (_kit.streamerBase.streamState == KSYStreamStateDisconnecting ) {
NSLog(@"disconnecting");
}
else if (_kit.streamerBase.streamState == KSYStreamStateError ) {
[self onStreamError];
}
}
移除通知:
[[NSNotificationCenter defaultCenter] removeObserver:self
name:KSYStreamStateDidChangeNotification
object:nil];
##错误状态 (KSYStreamErrorCode)
| 状态名称 | 状态说明 |
|---|---|
| KSYStreamErrorCode_NONE | 正常无错误 |
| KSYStreamErrorCode_CODEC_OPEN_FAILED | 无法打开配置指示的CODEC |
| KSYStreamErrorCode_CONNECT_FAILED | 连接出错,检查地址 |
| KSYStreamErrorCode_CONNECT_BREAK | 网络连接中断 |
| KSYStreamErrorCode_KSYAUTHFAILED | SDK 鉴权失败 (暂时正常推流5~8分钟后终止推流) |
| KSYStreamErrorCode_ENCODE_FRAMES_FAILED | 当前帧编码失败 |
| KSYStreamErrorCode_RTMP_NonExistDomain | rtmp 推流域名不存在 (KSY 自定义) |
| KSYStreamErrorCode_RTMP_NonExistApplication | rtmp 应用名不存在(KSY 自定义) |
| KSYStreamErrorCode_RTMP_AlreadyExistStreamName | rtmp 流名已存在(KSY 自定义) |
| KSYStreamErrorCode_RTMP_ForbiddenByBlacklist | rtmp 被黑名单拒绝(KSY 自定义) |
| KSYStreamErrorCode_RTMP_InternalError | rtmp 内部错误(KSY 自定义) |
| KSYStreamErrorCode_RTMP_URLExpired | rtmp URL 地址已过期(KSY 自定义) |
| KSYStreamErrorCode_RTMP_SignatureDoesNotMatch | rtmp URL 地址签名错误(KSY 自定义) |
| KSYStreamErrorCode_RTMP_InvalidAccessKeyId | rtmp URL 中AccessKeyId非法(KSY 自定义) |
| KSYStreamErrorCode_RTMP_BadParams | rtmp URL 中参数错误(KSY 自定义) |
| KSYStreamErrorCode_RTMP_ForbiddenByRegion | rtmp URL 中的推流不在发布点内(KSY 自定义) |
| KSYStreamErrorCode_FRAMES_THRESHOLD | SDK 因为鉴权失败停止推流 |
| KSYStreamErrorCode_NO_INPUT_SAMPLE | 没有输入的数据,无法开始推流 |
| KSYStreamErrorCode_DNS_Parse_failed | 对于URL中的域名解析失败 |
| KSYStreamErrorCode_Connect_Server_failed | 对于URL对应的服务器连接失败(无法建立TCP连接) |
| KSYStreamErrorCode_RTMP_Publish_failed | 跟RTMP服务器完成握手后,向{appname}/{streamname} 推流失败 |
| 、、、 | 、、、 |
- (void) onStreamError {
KSYStreamErrorCode err = _kit.streamerBase.streamErrorCode;
if ( KSYStreamErrorCode_KSYAUTHFAILED == err ) {
NSLog(@"SDK auth failed, \npls check ak/sk");
}
else if ( KSYStreamErrorCode_CODEC_OPEN_FAILED == err) {
NSLog(@"Selected Codec not supported \n in this version");
}
else if ( KSYStreamErrorCode_CONNECT_FAILED == err) {
NSLog(@"Connecting error, pls check host url \nor network");
}
else if ( KSYStreamErrorCode_CONNECT_BREAK == err) {
NSLog( @"Connection break");
}
else {
_stat.text = [_kit getKSYStreamErrorCodeName:err];
}
// 断网重连
if ( KSYStreamErrorCode_CONNECT_BREAK == err && _btnAutoReconnect.isOn ) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[_kit.streamerBase stopStream];
[_kit.streamerBase startStream:_hostURL];
[self initStatData];
});
}
}

