Skip to content
xinbaicheng edited this page May 26, 2017 · 10 revisions

reload重载播放资源

只能在播放过程中使用,如果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)

使用场景

建议在直播场景下使用

  1. 发起重连的行为
  2. 播放新的视频
  3. 收到onInfo消息:MEDIA_INFO_SUGGEST_RELOAD

注意

当收到onInfo消息:MEDIA_INFO_SUGGEST_RELOAD时建议调用

ksyMediaPlayer.reload(url, KSYReloadMode.KSY_RELOAD_MODE_ACCURATE)

使用示例

使用reload接口

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;
    }
};

使用reset接口

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