Skip to content

LaunchTimeCost

xinbaicheng edited this page Jun 15, 2017 · 1 revision

首帧时间(首屏时间)

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

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

除去直播界面UI的初始化所需时间,下面将介绍如何使用播放SDK计算播放器渲染第一帧视频所需的耗时

1. 计算方法

  • 播放SDK提供的onInfo回调里有消息MEDIA_INFO_VIDEO_RENDERING_START表征第一帧视频开始渲染, 消息MEDIA_INFO_AUDIO_RENDERING_START 表征第一帧音频开始播放
  • 在调用prepareAsync之前计时一次
  • 在收到消息MEDIA_INFO_VIDEO_RENDERING_START再次计时
  • 两次计时之差即为首屏时间

2. 代码示例

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解析耗时链接建立耗时首个数据包耗时三个数据
获取方式如下所示

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());  
Clone this wiki locally