-
Notifications
You must be signed in to change notification settings - Fork 246
reload
xinbaicheng edited this page May 26, 2017
·
10 revisions
只能在播放过程中使用,如果finish或者主动stop后需要继续使用该实例,需要使用reset。
// v1.4.7 or later
public enum KSYReloadMode {
// 选择该模式能更快速的reload
// 可能存在的问题是在音视频交织不正常的情况下,可能忽略某路流
KSY_RELOAD_MODE_FAST,
// 选择该模式reload速度可能较慢,但是更为精确
KSY_RELOAD_MODE_ACCURATE
}
/**
* v1.4.7或更新版本,默认使用KSY_RELOAD_MODE_FAST模式
* @param url 播放地址
* @param flushBuffer 是否丢弃播放器中旧的数据
*/
public void reload(String url, boolean flushBuffer)
/**
* v1.5.1或更新版本,flushBuffer默认值为TRUE,会flush播放器旧有数据
* @param url 播放地址
* @param flushBuffer 是否清除播放器的旧数据
* @param reloadMode reload模式
*/
public void reload(String url, boolean flushBuffer, KSYReloadMode reloadMode)
// v1.4.6 or earlier
/**
* @param url 播放地址
* @param flushBuffer 是否丢弃播放器中旧的数据
*/
public void reload(String url, boolean flushBuffer)
Reload模式定义
// v1.4.7 or later
public enum KSYReloadMode {
// 选择该模式能更快速的reload
// 可能存在的问题是在音视频交织不正常的情况下,可能忽略某路流
KSY_RELOAD_MODE_FAST,
// 选择该模式reload速度可能较慢,但是更为精确
KSY_RELOAD_MODE_ACCURATE
}
/**
* v1.4.7或更新版本,默认使用KSY_RELOAD_MODE_FAST模式
* @param url 播放地址
* @param flushBuffer 是否丢弃播放器中旧的数据
*/
public void reload(String url, boolean flushBuffer)
/**
* v1.4.7至v1.5.0,flushBuffer默认值为TRUE,会flush播放器旧有数据
* @param url 播放地址
* @param reloadMode reload模式
*/
public void reload(String url, KSYReloadMode reloadMode)
建议在直播
场景下使用
- 发起重连的行为
- 播放新的视频
- 收到onInfo消息:MEDIA_INFO_SUGGEST_RELOAD
当收到onInfo消息:MEDIA_INFO_SUGGEST_RELOAD时建议调用
ksyMediaPlayer.reload(url, KSYReloadMode.KSY_RELOAD_MODE_ACCURATE)
KSYMediaPlayer ksyMediaPlayer;
// 假设最初播放地址为mVideoUrl1
String mVideoUrl1 = "http://test.rtmplive.com/live/test1.flv";
String mVideoUrl2 = "http://test.rtmplive.com/live/test2.flv";
// 重新链接
ksyMediaPlayer.reload(mVideoUrl1, false);
// 播放新的视频
ksyMediaPlayer.reload(mVideoUrl2, true);
// v1.4.7 or later
// 播放新视频并快速reload
ksyMediaPlayer.reload(mVideoUrl2, KSYReloadMode.KSY_RELOAD_MODE_FAST);
// reload成功后会有消息回调
public IMediaPlayer.OnInfoListener mOnInfoListener = new IMediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(IMediaPlayer iMediaPlayer, int info, int extra) {
if(info == IMediaPlayer.MEDIA_INFO_RELOADED)
Log.d(TAG, "Succeed to reload video.");
return false;
}
};
KSYMediaPlayer ksyMediaPlayer;
Surface mSurface;
// 假设最初播放地址为mVideoUrl1
String mVideoUrl1 = "http://test.rtmplive.com/live/test1.flv";
String mVideoUrl2 = "http://test.rtmplive.com/live/test2.flv";
ksyMediaPlayer.reset();
ksyMediaPlayer.setDataSource(mVideoUrl2);
ksyMediaPlayer.prepareAsync();
ksyMediaPlayer.setSurface(mSurface); // 非常重要,reset之后需重新设置Surface,播放器才能渲染
// 在onPrepared回调里
ksyMediaPlayer.start()