-
Notifications
You must be signed in to change notification settings - Fork 247
NetworkInformation
xinbaicheng edited this page May 12, 2017
·
2 revisions
/**
* @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解析耗时、链接建立耗时和首个数据包耗时三个数据
获取方式如下所示
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());
在播放过程中获取播放器缓存数据等信息
/**
* @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);