升级至4.5.0

本文介绍了Android播放器SDK从低于4.5.0版本升级至4.5.0版本的步骤及SDK在4.5.0发生的重要变更。

背景信息

Android播放器SDK在4.5.0版本对接口、方法和类进行了大幅改动。如果您正在使用4.5.0以下版本,建议通过本文提供的方法升级至4.5.0。详细变化请参见下文内容:

升级路径

本文以3.4.10版本为例介绍升级至4.5.0版本的操作步骤。Android播放器SDK4.5.0版本及后续的版本SDK仅类名和方法有变化,版本号有区别。4.5.0升级至5.1.4版本接口变化详情请参见升级Android播放器至5.1.0。低于4.5.0版本直接升级至5.1.4版本暂无参考文档,如有需要请提交工单,获取阿里云技术支持。

升级步骤-本地依赖

如果您采用了本地依赖方式集成Android播放器SDK,升级至4.5.0版本需要替换本地依赖包及gradle依赖包。替换完成后按指引修改代码完成升级。

  1. 替换本地依赖包及gradle依赖包。

    1. 替换本地依赖包。

      AlivcPlayer-3.4.10.aarAlivcReporter-1.2.aarAliyunVodPlayer-3.4.10.aar替换为AliyunPlayer-4.5.0-full.aar替换替换完成:结果

    2. 增加阿里云的Maven地址。

      在项目的build.gradle文件中,在buildscriptallprojects两处增加阿里Maven地址,示例如下:

      maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
    3. 替换gradle依赖包。

      将OSS的依赖删除,增加conan的依赖。修改后如下:替换

  2. 集成短视频。

    如果集成Android播放器SDK的同时也集成短视频SDK,那么播放器的SDK需要依赖两个包:AliyunPlayer-4.5.0-partcom.aliyun.video.android:AlivcFFmpeg:1.0.0(这个包是为了使用与短视频SDK共通的ffmpeg版本)。

    说明

    如果集成时使用了错误的SDK包,会导致ffmpeg冲突。

  3. 修改代码。

    依赖包替换完成之后,编译工程就会出错。这个时候,需要使用播放器4.5.0版本SDK中的类和方法。此处变化比较大,主要是包名的变化与API的变化。下面是几个需要重点修改的地方:

    1. 更改创建播放器方式
      播放器4.5.0版本SDK创建播放器对象类型改为AliPlayer,通过AliPlayerFactory类进行创建。示例如下:
      //定义一个播放器对象
      AliPlayer mAliyunVodPlayer;
      ...
      //创建播放器对象
      mAliyunVodPlayer = AliPlayerFactory.createAliPlayer(getContext().getApplicationContext());
    2. 修改监听事件
      播放器3.4.10版本SDK,监听事件都是位于IAliyunVodPlayer类下面。播放器4.5.0版本SDK,所有的监听事件都是在IPlayer类下面。类名基本保持一致,有些有变化。所以替换监听事件需要替换类名。详细变化情况请参见监听事件变化。此处以OnPreparedListener为例:类名修改类名后:类名
  4. 设置播放源。
    播放器3.4.10版本SDK通过prepareAsync方法直接传值。播放器4.5.0版本SDK改为AliPlayer.setDataSource方法设置。设置完之后,调用AliPlayer.prepare方法准备播放源。示例如下:
    /**
     * 设置UrlSource数据源
     */
    public void setDataSource(UrlSource urlSource);
    /**
     * 设置vidSts数据源
     */
    public void setDataSource(VidSts vidSts);
    /**
     * 设置vidAuth数据源
     */
    public void setDataSource(VidAuth vidAuth);
    /**
     * 设置mps数据源
     */
    public void setDataSource(VidMps vidMps);
    设置直播时移:通过AliLiveShiftPlayer.setDataSource方法设置时移源。示例如下:
    /**
     * 设置数据源
     */
    public void setDataSource(LiveShift liveShift);    
    说明 如果由AlivcMediaPlayer升级到新版本播放,改用UrlSource播放即可。

升级步骤-gradle依赖

如果您采用了gradle依赖方式集成Android播放器SDK,升级至4.5.0版本需要删除本地依赖并替换gradle依赖包。

  1. 删除本地依赖并替换gradle依赖包。

    1. 删除本地依赖。

      删除AlivcPlayer-3.4.10.aarAlivcReporter-1.2.aarAliyunVodPlayer-3.4.10.aar依赖包(删除框中的内容)。删除

    2. 增加阿里云的Maven地址。

      在项目的build.gradle文件中,在buildscriptallprojects两处增加阿里云的Maven地址:

      maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
    3. 替换gradle依赖包。

      修改App的build.gradle文件,dependencies节点中增加对aar的引用。示例如下:

      implementation 'com.aliyun.sdk.android:AliyunPlayer:4.5.0-full'
      implementation 'com.alivc.conan:AlivcConan:0.9.5'
  2. 集成短视频。

    如果集成Android播放器SDK的同时也集成短视频SDK,那么播放器的SDK需要依赖两个包:AliyunPlayer-4.5.0-partcom.aliyun.video.android:AlivcFFmpeg:1.0.0(这个包是为了使用与短视频SDK共通的ffmpeg版本)。

    说明

    如果集成时使用了错误的SDK包,会导致ffmpeg冲突。

  3. 修改代码。

    依赖包替换完成之后,编译工程就会出错。这个时候,需要使用播放器4.5.0版本SDK中的类和方法。此处变化比较大,主要是包名的变化与API的变化。下面是几个需要重点修改的地方:

    1. 更改创建播放器方式
      播放器4.5.0版本SDK创建播放器对象类型改为AliPlayer,通过AliPlayerFactory类进行创建。示例如下:
      //定义一个播放器对象
      AliPlayer mAliyunVodPlayer;
      ...
      //创建播放器对象
      mAliyunVodPlayer = AliPlayerFactory.createAliPlayer(getContext().getApplicationContext());
    2. 修改监听事件
      播放器3.4.10版本SDK,监听事件都是位于IAliyunVodPlayer类下面。播放器4.5.0版本SDK,所有的监听事件都是在IPlayer类下面。类名基本保持一致,有些有变化。所以替换监听事件需要替换类名。详细变化情况请参见监听事件变化。此处以OnPreparedListener为例:类名修改类名后:类名
  4. 设置播放源。
    播放器3.4.10版本SDK通过prepareAsync方法直接传值。播放器4.5.0版本SDK改为AliPlayer.setDataSource方法设置。设置完之后,调用AliPlayer.prepare方法准备播放源。示例如下:
    /**
     * 设置UrlSource数据源
     */
    public void setDataSource(UrlSource urlSource);
    /**
     * 设置vidSts数据源
     */
    public void setDataSource(VidSts vidSts);
    /**
     * 设置vidAuth数据源
     */
    public void setDataSource(VidAuth vidAuth);
    /**
     * 设置mps数据源
     */
    public void setDataSource(VidMps vidMps);
    设置直播时移:通过AliLiveShiftPlayer.setDataSource方法设置时移源。示例如下:
    /**
     * 设置数据源
     */
    public void setDataSource(LiveShift liveShift);    
    说明 如果由AlivcMediaPlayer升级到新版本播放,改用UrlSource播放即可。

播放器变化

变化

低于4.5.0

4.5.0

统一播放器

提供了两种播放器,分别用于URL播放与VID视频的播放。

  • AlivcMediaPlayer播放器

  • AliyunVodPlayer播放器

在SDK4.5.0中,不再区分播放器,统一为AliPlayer端播放器对URL视频和VID视频进行播放。

依赖包变化

变化

低于4.5.0

4.5.0

依赖包

3个本地依赖和1个gradle依赖:

  • AlivcPlayer-3.x.x.aar文件

  • AlivcReporter-1.2.aar文件

  • AliyunVodPlayer-3.x.x.aar文件

  • gradle依赖:compile 'com.aliyun.dpa:oss-android-sdk:+'

  • AliyunPlayer-4.5.0-full.aar文件

  • implementation 'com.alivc.conan:AlivcConan:0.9.5'

混淆配置变化

Android播放器SDK4.5.0版本混淆配置示例如下:

  -keep class com.alivc.**{*;}
  -keep class com.aliyun.**{*;}
  -keep class com.cicada.**{*;}
  -dontwarn com.alivc.**
  -dontwarn com.aliyun.**

类名与方法变化

Android播放器SDK4.5.0版本,修改了部分类名,增加了新的功能和事件回调。同时,也移除了低于SDK4.5.0版本中的部分接口。

监听事件变化

大部分监听事件替换类名即可。对于有删减或者不同的,需要修改对应的接口实现。下面是两个版本监听事件的对比:

事件名

功能

变化情况

示例代码

OnPreparedListener

准备成功事件

无变化

不涉及

OnSeekCompleteListener

拖动结束事件

无变化

不涉及

OnCompletionListener

播放完成事件

无变化

不涉及

OnFirstFrameStartListener

首帧显示事件

OnRenderingStartListener

public interface OnRenderingStartListener {
     void onRenderingStart();
}
public void setOnRenderingStartListener(OnRenderingStartListener l);

OnStoppedListener

播放停止事件

OnStateChangedListener

public interface OnStateChangedListener {
    void onStateChanged(int newState);
}
public void setOnStateChangedListener(OnStateChangedListener l);

OnStateChangedListener接口回调中的newState值,表示播放器的新的状态,包含了多种状态值。状态的值定义在IPlayer中。示例如下:

/**
 * 未知状态
 */
public static final int unknow = -1;
 /**
 * 空状态。刚创建出来的状态。
 */
public static final int idle = 0;
/**
 * 初始化了的状态,设置播放源之后的状态
 */
public static final int initalized = 1;//
/**
 * 准备成功的状态
 */
public static final int prepared = 2;
/**
 * 正在播放的状态
 */
public static final int started = 3;
/**
 * 播放已暂停的状态
 */
public static final int paused = 4;
/**
 * 播放已停止的状态
 */
public static final int stopped = 5;
/**
 * 播放完成状态
 */
public static final int completion = 6;
/**
 * 出错状态
 */
public static final int error = 7;

OnPcmDataListener

PCM音频数据回调事件

事件被删除

不涉及

OnCircleStartListener

循环播放开始事件

OnInfoListener

public interface OnInfoListener {
    void onInfo(InfoBean infoBean);
}
public void setOnInfoListener(OnInfoListener l);
说明

回调中的InfoBean.getCode() = InfoCode.LoopingStart被回调时,表示循环播放事件。

OnLoadingListener

视频加载事件

OnLoadingStatusListener

public interface OnLoadingStatusListener {
    void onLoadingBegin();
    void onLoadingProgress(int percent, float netSpeed);  //百分比,kbps
    void onLoadingEnd();
}
public void setOnLoadingStatusListener(OnLoadingStatusListener l);
说明

onLoadingProgress中的netSpeed目前值为0。

OnBufferingUpdateListener

视频缓冲进度事件

OnInfoListener

public interface OnInfoListener {
     void onInfo(InfoBean infoBean);
}
public void setOnInfoListener(OnInfoListener l);
说明

回调中的InfoBean.getCode() = InfoCode.BufferedPosition被回调时,表示缓冲进度事件。通过InfoBean.getExtraValue()获取缓冲进度的值。同时,如果InfoBean.getCode() = InfoCode.CurrentPosition被回调时,表示播放进度事件。通过InfoBean.getExtraValue()获取播放进度的值。

OnErrorListener

播放错误事件

OnErrorListener

public interface OnErrorListener {
    void onError(ErrorInfo errorInfo);
}
public void setOnErrorListener(OnErrorListener l);
说明

ErrorInfo为错误信息,可以通过ErrorInfo.getCode()ErrorInfo.getMsg()获取错误码与错误信息。

OnInfoListener

播放信息事件

OnInfoListener

public interface OnInfoListener {
    void onInfo(InfoBean infoBean);
}
public void setOnInfoListener(OnInfoListener l);

InfoBean为信息类,可以通过InfoBean.getCode()InfoBean.getExtraMsg(),获取具体的信息类型等。InfoCode包含:

/**
 * 未知。
 */
Unknown(-1);
/**
 * 循环播放开始。无额外信息。
 */
LoopingStart(0),
/**
 * 缓冲位置。额外值为当前缓冲位置。单位:毫秒。
 */
BufferedPosition(1),
/**
 * 当前播放位置。额外值为当前播放位置。单位:毫秒。
 */
CurrentPosition(2),
/**
 * 开始自动播放。无额外信息。
 */
AutoPlayStart(3),
/**
 * 设置了硬解,但是切换为软解。额外信息为描述信息。
 */
SwitchToSoftwareVideoDecoder(100),
/**
 * 音频解码格式不支持。额外信息为描述信息。
 */
AudioCodecNotSupport(101),
/**
 * 音频解码器设备失败。额外信息为描述信息。
 */
AudioDecoderDeviceError(102),
/**
 * 视频解码格式不支持。额外信息为描述信息。
 */
VideoCodecNotSupport(103),
/**
 * 视频解码器设备失败。额外信息为描述信息。
 */
VideoDecoderDeviceError(104),
/**
 * 网络失败,需要重试。无额外信息。
 */
NetworkRetry(107),
/**
 * 缓存成功。无额外信息。
 */
CacheSuccess(108),
/**
 * 缓存失败。额外信息为描述信息。
 */
CacheError(109),
/**
 * 系统无可用内存来存放媒体数据
 */
LowMemory(110),

OnVideoSizeChangedListener

视频画面变化回调

无变化

不涉及

OnChangeQualityListener

切换清晰度变化

OnTrackChangedListener

public interface OnTrackChangedListener {
    void onChangedSuccess(TrackInfo trackInfo);
    void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo);
}
public void setOnTrackChangedListener(OnTrackChangedListener l);
说明

切换清晰度调用selectTrack(index)之后,将会回调此方法。

LockPortraitListener

固定竖屏

事件被删除

不涉及

OnRePlayListener

重播开始事件

事件被删除

不涉及

OnAutoPlayListener

自动播放开始事件

OnInfoListener

public interface OnTrackChangedListener {
    void onChangedSuccess(TrackInfo trackInfo);
    void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo);
}
public void setOnTrackChangedListener(OnTrackChangedListener l);
说明

ErrorInfo为错误信息,可以通过ErrorInfo.getCode()ErrorInfo.getMsg()获取错误码与错误信息。过期错误码的值,请参见错误码查询

OnTimeShiftUpdaterListener

直播时移变化事件

移动到AliLiveshiftPlayer中

不涉及

OnSeekLiveCompletionListener

直播时移拖动结束事件

移动到AliLiveshiftPlayer中

不涉及

OnTimeExpiredErrorListener

请求信息过期事件

OnErrorListener

public interface OnErrorListener {
  void onError(ErrorInfo info);
}
void setOnErrorListener(IPlayer.OnErrorListener l)

OnUrlTimeExpiredListener

URL即将过期事件

事件被删除

不涉及

OnTrackReadyListener

流获取成功事件

新增

不涉及

OnSubtitleDisplayListener

字幕显示时间

新增

不涉及

OnSnapShotListener

截图结果事件

新增

不涉及

主要API变化

以Android播放器SDK3.4.10版本升级到播放器SDK4.5.0版本为例。

说明

低于SDK4.5.0版本升级到SDK4.5.0版本的API变化基本一致。

原方法

新方法

说明

surfaceChanged

redraw

在surface变化的时候调用

getPlayerState

OnStateChangedListener

改为回调获取播放器状态

说明

其他API变化请参见Android播放器SDK 4.5.0

低于4.5.0版本相关文档

如您需要查看低于4.5.0版本接口的相关内容,请参见Android播放器SDK。找到您所需版本的更新记录,单击历史版本中的示例代码下载链接即可获取对应信息。