Skip to content

NetworkInformation

xinbaicheng edited this page May 12, 2017 · 2 revisions

网络相关信息

获取服务器IP

/**
 * @return 返回服务器地址,在收到 准备完成 onPrepared回调后有效
 */
public String getServerAddress()

首帧时间(首屏时间)

对于直播,首帧时间是一个非常重要的指标,首帧时间一般是指点击直播间封面进入直播房间到第一帧视频渲染到屏幕的耗时
除去直播界面UI的初始化所需时间,下面将介绍如何使用播放SDK计算播放器渲染第一帧视频所需的耗时

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 i, int i1) {
            switch (i) {
                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());  

QOS信息

在播放过程中获取播放器缓存数据等信息

/**
 * @return KSYQosInfo的对象
 */
public KSYQosInfo getStreamQosInfo();

类KSYQosInfo的定义如下

public class KSYQosInfo {
    /**
     *  音频缓存数据量大小,单位:Byte
     */
    public int audioBufferByteLength;
    /**
     * 音频缓存数据时长,单位:Ms
     */
    public int audioBufferTimeLength;
    /**
     * 开播后音频总数据量,单位:Byte
     */
    public long audioTotalDataSize;

    /**
     * 视频缓存数据量大小,单位:Byte
     */
    public int videoBufferByteLength;
    /**
     * 视频缓存时长,单位:Ms
     */
    public int videoBufferTimeLength;
    /**
     * 开播后视频总数据量,单位:Byte
     */
    public long videoTotalDataSize;

    /**
     * 开播后音视频总数据量,单位:Byte
     */
    public long totalDataSize;
}

数据下载量

/**
 * @return 开播后下载数据总量大小,单位:KB
 */
public long getDownloadDataSize()

码率计算

// 视频开播时间点
long mVideoStartTime = System.currentTimeMillis();

// 播放中,时间点1
long mVideoTime1 = System.currentTimeMillis();
long mVideoDownloadSize1 = getDownloadDataSize();

// 播放中,当前时间,大于时间点1
long mVideoTime2 = System.currentTimeMillis();
long mVideoDownloadSize2 = getDownloadDataSize();

// 平均码率
long averageBitrate = mVideoDownloadSize2 / (mVideoTime2 - mVideoStartTime);

// 瞬时码率
long realBitrate = (mVideoDownloadSize2 - mVideoDownloadSize1) / (mVideoTime2 - mVideoTime1);
Clone this wiki locally