Skip to content

debugInfo

shixuemei edited this page Sep 28, 2017 · 4 revisions

播放器调试信息

1. 获取版本号

调用播放器方法getVersion获得当前的版本信息

[_player getVersion];

2. 获取服务器地址

调用播放器属性serverAddress获取播放文件所在的服务器地址

[_player serverAddress];

3. 获取http DNS解析时间

调用播放器方法getMetadata后,通过查询kKSYPLYHttpAnalyzeDns关键字获得DNS解析时间

NSDictionary *meta = [_player getMetadata];
[meta objectForKey:kKSYPLYHttpAnalyzeDns];

只对http协议播放有效,其它协议的播放获取到的值为NULL

4. 获取http服务器链接时间

调用播放器方法getMetadata后,通过查询kKSYPLYHttpConnectTime关键字获得服务器连接时间

NSDictionary *meta = [_player getMetadata];
[meta objectForKey:kKSYPLYHttpConnectTime];

只对http协议播放有效,其它协议的播放获取到的值为NULL

5. 获取首个http包接收时间

调用播放器方法getMetadata后,通过查询kKSYPLYHttpFirstDataTime关键字获得客户端接收到的首个http数据包时间

NSDictionary *meta = [_player getMetadata];
[meta objectForKey:kKSYPLYHttpFirstDataTime];

只对http协议播放有效,其它协议的播放获取到的值为NULL

6. 获取视频的宽高信息

监听到MPMovieNaturalSizeAvailableNotification通知后,调用播放器属性naturalSize查询视频的宽高信息

_player.naturalSize.width;
_player.naturalSize.height;

7. 获取首个视频帧的出现时间

播放出首个视频画面时,会发送MPMoviePlayerFirstVideoFrameRenderedNotification通知,用监听到该消息时的时间减去调用prepareToPlay方法时的时间,得到的差值即为首个视频帧的出现时间

//记录调用prepareToPlay方法时的时间
prepared_time = (long long int)([self getCurrentTime] * 1000);
[_player prepareToPlay];

//监听到MPMoviePlayerFirstVideoFrameRenderedNotification通知时,用当前时间减去prepared_time,差值即为首个视频帧的出现时间
if (MPMoviePlayerFirstVideoFrameRenderedNotification == notify.name)
{
  fvr_costtime = (int)((long long int)([self getCurrentTime] * 1000) - prepared_time);
  NSLog(@"first video frame show, cost time : %dms!\n", fvr_costtime);
}

8. 获取首个音频帧的出现时间

播放出首个音频帧时,会发送MPMoviePlayerFirstAudioFrameRenderedNotification通知,用监听到该消息时的时间减去调用prepareToPlay方法时的时间,得到的差值即为首个音频帧的出现时间

//记录调用prepareToPlay方法时的时间
prepared_time = (long long int)([self getCurrentTime] * 1000);
[_player prepareToPlay];

//监听到MPMoviePlayerFirstAudioFrameRenderedNotification通知时,用当前时间减去prepared_time,即为首个视频帧的出现时间
if (MPMoviePlayerFirstAudioFrameRenderedNotification == notify.name)
{
  far_costtime = (int)((long long int)([self getCurrentTime] * 1000) - prepared_time);
  NSLog(@"first audio frame render, cost time : %dms!\n", far_costtime);
}

9. 获取播放时间

调用播放器属性currentPlaybackTime获取当前播放时间

_player.currentPlaybackTime;

10. 获取可播放长度

调用播放器属性playableDuration获取当前播放文件的总时长

_player.playableDuration;

11. 获取节目总时长

调用播放器属性duration获取当前播放文件的总时长

_player.duration;

12. 获取卡顿次数

调用播放器属性bufferEmptyCount获取从开始播放到现在缓冲的次数

_player.bufferEmptyCount;

13. 获取卡顿总时长

调用播放器属性bufferEmptyDuration获取从开始播放到现在每次缓冲的时间和

_player.bufferEmptyDuration;

14. 获取最大缓冲时长

调用播放器属性bufferTimeMax获取允许的最大缓冲时长

_player.bufferTimeMax;

15. 获取当前的下载速率

播放器中没有直接提供获取当前下载速率的方法,但是提供了获取当前下载数据大小的属性readSize(单位是Byte),通过前后两次获取该属性值,用两次的差值除以时间差,即可得到当前的下载速率

// 播放中,时间点1
NSTimeInterval mTime1 = [self getCurrentTime];
double mflowSize1 = [_player readSize];

// 播放中,当前时间,大于时间点1
NSTimeInterval mTime2 = [self getCurrentTime];
double mflowSize2 = [_player readSize];

// 下载速率
float realBitrate = (mflowSize2 - mflowSize1) / (mTime2 - mTime1);

16. 获取QOS信息

调用播放器属性qosInfo即可获得播放的Qos信息,其中的具体含义可以查看KSYQosInfo

KSYQosInfo *info = _player.qosInfo;

重点说明:如果将shouldEnableKSYStatModule参数设置为NO,获取qosInfo将会返回nil;如果需要该信息,请务必将该参数设置为YES,或者不设置,默认值即为YES

(1) 缓冲时长

当前缓冲了多少音频时长(单位为毫秒)

  • info.audioBufferTimeLength

当前缓冲了多少视频时长(单位为毫秒)

  • info.videoBufferTimeLength

(2) 缓冲size

当前缓冲了多少音频数据(单位为bytes)

  • info.audioTotalDataSize

当前缓冲了多少视频数据(单位为bytes)

  • info.videoBufferByteLength

(3) 下载数据size

从开播到现在,总共下载了多少音频数据(单位为bytes)

  • info.audioTotalDataSize

从开播到现在,总共下载了多少音频数据(单位为bytes)

  • info.videoTotalDataSize

从开播到现在,总共下载了多少数据(单位为bytes),包括音频、视频。

  • info.totalDataSize

(4) 帧率

解码帧率,每秒钟从原始数据解码出来的图像的帧数

  • info.videoDecodeFPS

显示帧率,每秒钟显示渲染的图像的帧数

  • info.videoRefreshFPS
Clone this wiki locally