-
Notifications
You must be signed in to change notification settings - Fork 146
launchTime
Franken Zeng edited this page Jun 15, 2017
·
3 revisions
开播时间是个比较重要的性能指标,无论直播或者点播场景,开播都意味着观众的等待耗时。
- 直播APP中一般指的是从点击直播房间,到出现直播画面开始播放的耗时。
- 点播APP中一般指视频选中到画面渲染出来的耗时。
这里提供如何计算及分析与播放SDK相关的开播时间
- 播放SDK提供了MPMoviePlayerFirstVideoFrameRenderedNotification和MPMoviePlayerFirstAudioFrameRenderedNotification两个通知,分别在播放器显示出第一帧画面和播放出第一帧声音时产生,计算首屏时间时需要注册这两个消息的监听,参见notification
- 在调用prepareToPlay之前进行一次计时
- 在监听到MPMoviePlayerFirstVideoFrameRenderedNotification消息之后再次计时
- 两次计时之差即为开播时间(或者说首屏时间)
- DNS解析时间
- HTTP建联时间
- HTTP首包时间
- 音频首帧时间(播放)
- 视频首帧时间(渲染)
以上5个指标,是影响播放器首屏耗时的不同因子。
说明该观众所在的localDNS服务没有cache该域名,或者localDNS服务异常。
使用HTTP DNS可以有效避免该部分耗时
说明观众所在网络与对应连接的CDN边缘节点通讯不通畅。原因:
- 观众网络异常
- CDN边缘节点负载高
- DNS解析异常,连接了异常CDN节点(比如垮网络运营商,垮国运营商)
通过播放器提供的CDN边缘节点IP定位问题,区分CDN节点问题、调度问题还是观众网络问题
问题同建联HTTP建联耗时一致。
一般出现在观众拉流网络比较慢,观众出口带宽不足
- 播放SDK提供了getMetadata方法来获取网络相关的耗时,见debug信息说明中的说明
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内部解码渲染的耗时,相对来说耗时较短