-
Notifications
You must be signed in to change notification settings - Fork 246
LaunchTimeCost
xinbaicheng edited this page Jun 15, 2017
·
1 revision
开播时间是个比较重要的性能指标,无论直播或者点播场景,开播都意味着观众的等待耗时。
- 直播APP中一般指的是从点击直播房间,到出现直播画面开始播放的耗时。
- 点播APP中一般指视频选中到画面渲染出来的耗时。
除去直播界面UI的初始化所需时间,下面将介绍如何使用播放SDK计算播放器
渲染第一帧视频所需的耗时
- 播放SDK提供的
onInfo回调
里有消息MEDIA_INFO_VIDEO_RENDERING_START
表征第一帧视频开始渲染, 消息MEDIA_INFO_AUDIO_RENDERING_START
表征第一帧音频开始播放 - 在调用
prepareAsync
之前计时一次 - 在收到消息
MEDIA_INFO_VIDEO_RENDERING_START
再次计时 - 两次计时之差即为
首屏时间
long prepareStartTime = 0l; // 调用prepareAsync的时间点
long firsrVideoFrameRenderingTime = 0l; // 首帧时间
KSYTextureView mKsyTextureView;
// 记录调用prepareAsync时的时间点
prepareStartTime = System.currentTimeMillis();
mKsyTextureView.prepareAsync();
// ...
public IMediaPlayer.OnInfoListener mOnInfoListener = new IMediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(IMediaPlayer iMediaPlayer, int what, int extra) {
switch (what) {
case KSYMediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START:
Toast.makeText(mContext, "Video Rendering Start", Toast.LENGTH_SHORT).show();
// 第一帧视频已渲染,计算当前时间点与调用prepareAsync()时间点的差值即为 首帧时间
firsrVideoFrameRenderingTime = System.currentTimeMillis() - prepareStartTime;
break;
}
}
return false;
};
前一节简述了如何计算首帧时间
, 本节内容会更进一步描述播放器渲染第一帧视频耗时的具体情况
在播放HTTP视频时,SDK提供DNS解析耗时、链接建立耗时和首个数据包耗时三个数据
获取方式如下所示
Bundle bundle = ksyMediaPlayer.getMediaMeta();
KSYMediaMeta meta = KSYMediaMeta.parse(bundle);
if (meta != null)
// 获取DNS解析耗时
Log.d(TAG, "Http DNS Analyze Time Cost:" + meta.getAnalyzeDnsTime());
if (meta != null)
// 获取Http建连耗时
Log.d(TAG, "Http Connect Time Cost:" + meta.getConnectTime());
if (meta != null)
// 获取Http首个数据包的耗时
Log.d(TAG, "Http First Data Packet Time Cost:" + meta.getFirstDataTime());