Skip to content

launchTime

Franken Zeng edited this page Jun 15, 2017 · 3 revisions

开播时间

1. 描述

开播时间是个比较重要的性能指标,无论直播或者点播场景,开播都意味着观众的等待耗时。

  • 直播APP中一般指的是从点击直播房间,到出现直播画面开始播放的耗时。
  • 点播APP中一般指视频选中到画面渲染出来的耗时。

这里提供如何计算及分析与播放SDK相关的开播时间

2. 开播时间的计算

  • 播放SDK提供了MPMoviePlayerFirstVideoFrameRenderedNotification和MPMoviePlayerFirstAudioFrameRenderedNotification两个通知,分别在播放器显示出第一帧画面和播放出第一帧声音时产生,计算首屏时间时需要注册这两个消息的监听,参见notification
  • 在调用prepareToPlay之前进行一次计时
  • 在监听到MPMoviePlayerFirstVideoFrameRenderedNotification消息之后再次计时
  • 两次计时之差即为开播时间(或者说首屏时间)

2. 开播耗时分析

2.1 耗时指标

  • DNS解析时间
  • HTTP建联时间
  • HTTP首包时间
  • 音频首帧时间(播放)
  • 视频首帧时间(渲染)

以上5个指标,是影响播放器首屏耗时的不同因子。

2.1.1 DNS解析耗时严重

说明该观众所在的localDNS服务没有cache该域名,或者localDNS服务异常。

使用HTTP DNS可以有效避免该部分耗时

2.1.2 HTTP建联耗时严重

说明观众所在网络与对应连接的CDN边缘节点通讯不通畅。原因:

  1. 观众网络异常
  2. CDN边缘节点负载高
  3. DNS解析异常,连接了异常CDN节点(比如垮网络运营商,垮国运营商)

通过播放器提供的CDN边缘节点IP定位问题,区分CDN节点问题、调度问题还是观众网络问题

2.1.3 HTTP首包耗时严重

问题同建联HTTP建联耗时一致。

2.1.4 音视频首帧耗时严重

一般出现在观众拉流网络比较慢,观众出口带宽不足

2.2 接口说明

NSDictionary *meta = [_player getMetadata];
//DNS解析用时,单位毫秒
long dnsAnalyzetime = (long)[(NSNumber *)[meta objectForKey:kKSYPLYHttpAnalyzeDns] integerValue];

//http连接耗时,单位毫秒
long connectTime = (long)[(NSNumber *)[meta objectForKey:kKSYPLYHttpConnectTime] integerValue];

//http首包数据接收耗时,单位毫秒
long firstDataTime = (long)[(NSNumber *)[meta objectForKey:kKSYPLYHttpFirstDataTime] integerValue];
  • 该参数目前只对http协议生效(直播使用rtmp播放时无法获取以上数据)
  • 这三个参数为网络相关耗时,出现问题是可以通过调整网络解决
  • 这三个参数相加的值会比之前计算的首屏时间稍小,剩余的时间为SDK内部解码渲染的耗时,相对来说耗时较短
Clone this wiki locally