Skip to content

debugInfo

shixuemei edited this page Jun 26, 2017 · 17 revisions

推流端调试信息

本文可以帮助开发者定位问题。

同时,如果开发者希望向金山云提交issue,以下内容可以指导快速收集问题依赖的线索。

1. 通用信息

1.1 获取版本号

通过KSYGPUStreamerKit类的getKSYVersion方法获取当前版本信息

[_kit getKSYVersion];

2. 采集状态相关

2.1 当前采集状态

  • 通过KSYGPUStreamerKit类的captureState可查询当前采集状态
_kit.captureState
[_kit.streamerBase getCurCaptureStateName]

2.2 当前采集帧率

  • 通过KSYGPUStreamerKit类的videoFPS可获取当前采集帧率
_kit.videoFPS

3. 推流状态相关

3.1 获取当前推流的事件ID

通过KSYStreamerBase类的streamID可获取当前推流的事件ID,用于全流程追踪流信息。

_kit.streamerBase.streamID

3.2 获取当前推流的rtmp服务器的主机IP

通过KSYStreamerBase类的rtmpHostIP可获取当前推流服务器的主机IP,用于定位连接节点,排查网络问题。

_kit.streamerBase.rtmpHostIP

3.3 当前推流状态

  • 通过KSYStreamerBase类的streamState可查询当前推流状态
_kit.streamerBase.streamState
[_kit.streamerBase getCurStreamStateName]

3.4 当前编码的视频码率大小

通过KSYStreamerBase类的encodeVKbps可获取当前编码的视频码率大小,每一秒钟更新一次,更新的是一秒观察区间的编码视频码率。该值并不是真实的视频发送码率(存在丢帧)。

_kit.streamerBase.encodeVKbps

3.5 当前编码的音频码率大小

通过KSYStreamerBase类的encodeAKbps可获取当前编码的音频码率大小,每一秒钟更新一次,更新的是一秒观察区间的编码音频码率

_kit.streamerBase.encodeAKbps

3.6 当前编码的平均视频帧率

通过KSYStreamerBase类的encodingFPS可获取当前编码的平均视频帧率,每一秒钟更新一次,更新的是一秒观察区间的视频帧率,如果需要其他长度的观察区间的统计结果,请参考3.7自行计算

_kit.streamerBase.encodingFPS

3.7 本次推流编码的视频总帧数

通过KSYStreamerBase类的encodedFrames可获取本次推流编码的视频总帧数,用于计算一定观察区间的视频编码帧率(观察区间需要自己计算)

_kit.streamerBase.encodedFrames

3.8 本次推流的丢帧数量

通过KSYStreamerBase类的droppedVideoFrames可获取本次推流编码后,由于网络发送阻塞导致丢弃的帧数,配合encodedFrames可以计算丢帧率

_kit.streamerBase.droppedVideoFrames

3.9 本次推流发送的流量大小

通过KSYStreamerBase类的uploadedKByte可获取本次推流发送的流量大小 ,用于计算一定观察区间的发送码率(音视频)(观察区间需要自己计算)

_kit.streamerBase.uploadedKByte

3.10 当前码率大小

通过KSYStreamerBase类的currentUploadingKbps可获取当前实际推送的码率大小,统计周期为1秒,如果需要计算其它长度周期的码率,请自行计算,参考3.9

_kit.streamerBase.currentUploadingKbps

3.11 推流卡顿通知

当发现推流模块KSYNetStateCode为KSYNetStateCode_SEND_PACKET_SLOW,标识当前推流发送困难,将引入播放端卡顿。

此时推流发送包时间过长,单次发送超过500毫秒。

查询接口:

注册KSYNetStateEventNotification通知:
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(onNetStateEvent:)
                                                 name:KSYNetStateEventNotification
                                               object:nil];
响应KSYNetStateEventNotification事件,查询_kit.streamerBase.netStateCode属性:
- (void) onNetStateEvent:(NSNotification *)notification {
    KSYNetStateCode netEvent = _kit.streamerBase.netStateCode;
    if ( netEvent == ) {
        NSLog(@"bad network" );
    }
    else if ( netEvent == KSYNetStateCode_EST_BW_RAISE ) {
        NSLog(@"bitrate raising" );
    }
    else if ( netEvent == KSYNetStateCode_EST_BW_DROP ) {
        NSLog(@"bitrate dropping" );
    }
}

3.12 获取QOS信息

备注:从v2.0.1版本开始支持该属性

通过KSYStreamerBase类的qosInfo可获取当前缓冲区状态信息。

KSYStreamerQosInfo *info = _kit.streamerBase.qosInfo;
(1) 缓冲区待发送数据的Size(单位为Bytes)
  • 缓冲区中待发送的音频数据Size
info->audioBufferDataSize
  • 缓冲区中待发送的视频数据Size
info->videoBufferDataSize
(2) 缓冲区待发送数据的时长(单位为毫秒)
  • 缓冲区待发送的音频数据时长
info->audioBufferTimeLength
  • 缓冲区待发送的视频数据时长
info->videoBufferTimeLength
(3) 缓冲区待发送数据的包个数
  • 缓冲区待发送的音频包个数
info->audioBufferPackets
  • 缓冲区待发送的视频包个数
info->videoBufferPackets
(4) 推送总数据Size(单位为Bytes)
  • 从开始推流到现在,总共推送的音频数据Size
info->audioTotalDataSize
  • 从开始推流到现在,总共推送的视频数据Size
info->videoTotalDataSize

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