Skip to content

streamStat

Franken Zeng edited this page Oct 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,一般出现在VT264编码时,当出现该错误的时候需要重试
KSYStreamErrorCode_CONNECT_FAILED 连接出错,检查地址
KSYStreamErrorCode_CONNECT_BREAK 网络连接中断 , 当出现该错误的时候建议重推流
KSYStreamErrorCode_KSYAUTHFAILED SDK 鉴权失败 (暂时正常推流5~8分钟后终止推流)(KSY 自定义,已经不会出现)
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];
        });
    }
}

1. 推流环节说明

2. 特色功能说明

2.1 采集

2.2 音频处理

2.3 视频处理

2.4 编码

2.5 推流

2.6 输入多样化

2.7 集成

3. 第三方功能

4. 技术专栏

5. 已知问题

8. FAQ

金山云计算

Clone this wiki locally