全部产品
云市场

3.x.x升级到4.5.0版本指南

更新时间:2019-09-18 14:26:45

4.5.0版本与3.x.x版本有了比较重大的变化和更新。

  • 统一了播放器
  • 依赖包的不同
  • 类名与方法有变化
  • 混淆配置的变化

播放器的统一

3.x.x的SDK,提供了两种播放器:AlivcMediaPlayerAliyunVodPlayer,分别用于URL播放与VID视频的播放。在4.5.0的SDK中,不再区分,统一为AliPlayer去播放URL视频和VID视频。

依赖包的不同

3.x.x SDK 的依赖包有三个本地依赖文件:AlivcPlayer-3.x.x.aarAlivcReporter-1.2.aarAliyunVodPlayer-3.x.x.aar,以及一个gradle依赖:compile 'com.aliyun.dpa:oss-android-sdk:+'。4.5.0 SDK 的依赖变为:AliyunPlayer-4.5.0-full.aarimplementation 'com.alivc.conan:AlivcConan:0.9.5'

类名与方法变化

4.5.0的SDK,修改了部分类名,增加了新的功能和事件回调。同时,也移除了3.x.xSDK中部分接口。

混淆配置的变化

新版本混淆配置如下:

  1. -keep class com.alivc.**{*;}
  2. -keep class com.aliyun.**{*;}
  3. -dontwarn com.alivc.**
  4. -dontwarn com.aliyun.**

升级实践

以3.4.10 升级到4.5.0版本为例(3.x.x升级到4.5.0版本基本一致):

1. 替换依赖包

3.4.10版本的依赖包有三个本地依赖文件:AlivcPlayer-3.4.10.aarAlivcReporter-1.2.aarAliyunVodPlayer-3.4.10.aar,以及一个gradle依赖:compile 'com.aliyun.dpa:oss-android-sdk:+'。4.5.0版本 的依赖变为:AliyunPlayer-4.5.0-full.aarimplementation 'com.alivc.conan:AlivcConan:0.9.5'

1.使用本地依赖方式

使用本地依赖方式,需要替换本地依赖包,以及替换gradle的依赖包。1.替换本地依赖包:将三个aar包替换为4.5.0的aar包image1

替换之后:

image2

  1. 增加阿里maven地址:在项目的build.gradle文件中,在两处增加阿里maven地址:
    1. maven {
    2. url 'https://maven.aliyun.com/repository/releases'
    3. }
    截图如下:image3

3.替换gradle依赖包:将oss的依赖删除, 增加conan的依赖:image4

增加conan的依赖:

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

修改后截图:image5

2.使用gradle依赖方式

使用gradle依赖方式,需要删除本地依赖包,以及替换gradle的依赖包。1.删除本地依赖包:将三个aar包删除。image6删除这三个依赖包:image7

  1. 增加阿里maven地址:在项目的build.gradle文件中,在两处增加阿里maven地址:
    1. maven {
    2. url 'https://maven.aliyun.com/repository/releases'
    3. }
    截图如下:image9

3.替换gradle依赖包:修改app的build.gradle文件,dependencies节点中增加对aar的引用:

  1. implementation 'com.aliyun.sdk.android:AliyunPlayer:4.5.0-full'
  2. implementation 'com.alivc.conan:AlivcConan:0.9.5'

操作后的截图如下:

image10

3.同时集成短视频

如果集成播放器的同时,也集成短视频SDK,那么播放器的sdk依赖AliyunPlayer-4.5.0-part包,同时使用共通的ffmpeg版本,即需要额外依赖com.aliyun.video.android:AlivcFFmpeg:1.0.0这个包。

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

2. 修改代码

第一步进行完之后,编译工程就会出错。这个时候,需要使用4.5.0中的类和方法。这块变化比较大,主要是包名的变化与API的变化。下面是几个需要重点修改的地方:

1.更改创建播放器方式

3.4.10的版本创建的播放器是IAliyunVodPlayer的对象,直接mAliyunVodPlayer = new AliyunVodPlayer(getContext());就可以创建。4.5.0版本创建播放器对象类型改为AliPlayer,通过AliPlayerFactory类进行创建:

  1. //定义一个播放器对象
  2. AliPlayer mAliyunVodPlayer;
  3. ...
  4. //创建播放器对象
  5. mAliyunVodPlayer = AliPlayerFactory.createAliPlayer(getContext().getApplicationContext());

2.修改监听事件

3.4.10的版本,监听事件都是位于IAliyunVodPlayer类下面。4.5.0版本,所有的监听事件都是在IPlayer类下面。类名基本保持一致,有些有变化。所以替换监听事件,基本上就是替换一下类名即可。OnPreparedListener为例:image11

修改类名后,结果如下:image12

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

1.监听事件变化情况如下:
事件名 功能 变化情况
OnPreparedListener 准备成功事件 无变化
OnSeekCompleteListener 拖动结束事件 无变化
OnCompletionListener 播放完成事件 无变化
OnFirstFrameStartListener 首帧显示事件 OnRenderingStartListener
OnStoppedListener 播放停止事件 OnStateChangedListener
OnPcmDataListener PCM音频数据回调事件 事件被删除
OnCircleStartListener 循环播放开始事件 OnInfoListener
OnLoadingListener 视频加载事件 OnLoadingStatusListener
OnBufferingUpdateListener 视频缓冲进度事件 OnInfoListener
OnErrorListener 播放错误事件 OnErrorListener
OnInfoListener 播放信息事件 OnInfoListener
OnVideoSizeChangedListener 视频画面变化回调 无变化
OnChangeQualityListener 切换清晰度变化 OnTrackChangedListener
LockPortraitListener 固定竖屏 事件被删除
OnRePlayListener 重播开始事件 事件被删除
OnAutoPlayListener 自动播放开始事件 OnInfoListener
OnTimeShiftUpdaterListener 直播时移变化事件 移动到AliLiveshiftPlayer中
OnSeekLiveCompletionListener 直播时移拖动结束事件 移动到AliLiveshiftPlayer中
OnTimeExpiredErrorListener 请求信息过期事件 OnErrorListener
OnUrlTimeExpiredListener URL即将过期事件 事件被删除
OnTrackReadyListener 流获取成功事件 新增
OnSubtitleDisplayListener 字幕显示时间 新增
OnSnapShotListener 截图结果事件 新增
2.接口有变化的监听事件详解如下:

OnFirstFrameStartListener 首帧显示事件 —> OnRenderingStartListener3.4.10的OnFirstFrameStartListener,在4.5.0版本中用OnRenderingStartListener替换:

  1. public interface OnRenderingStartListener {
  2. void onRenderingStart();
  3. }
  4. public void setOnRenderingStartListener(OnRenderingStartListener l);

OnStoppedListener 播放停止事件 —> OnStateChangedListener3.4.10的OnStoppedListener,在4.5.0版本中用OnStateChangedListener替换:

  1. public interface OnStateChangedListener {
  2. void onStateChanged(int newState);
  3. }
  4. public void setOnStateChangedListener(OnStateChangedListener l);

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

  1. /**
  2. * 未知状态
  3. */
  4. public static final int unknow = -1;
  5. /**
  6. * 空状态。刚创建出来的状态。
  7. */
  8. public static final int idle = 0;
  9. /**
  10. * 初始化了的状态,设置播放源之后的状态
  11. */
  12. public static final int initalized = 1;//
  13. /**
  14. * 准备成功的状态
  15. */
  16. public static final int prepared = 2;
  17. /**
  18. * 正在播放的状态
  19. */
  20. public static final int started = 3;
  21. /**
  22. * 播放已暂停的状态
  23. */
  24. public static final int paused = 4;
  25. /**
  26. * 播放已停止的状态
  27. */
  28. public static final int stopped = 5;
  29. /**
  30. * 播放完成状态
  31. */
  32. public static final int completion = 6;
  33. /**
  34. * 出错状态
  35. */
  36. public static final int error = 7;

OnCircleStartListener 循环播放开始事件 —> OnInfoListener3.4.10的OnCircleStartListener,在4.5.0版本中用OnInfoListener替换:

  1. public interface OnInfoListener {
  2. void onInfo(InfoBean infoBean);
  3. }
  4. public void setOnInfoListener(OnInfoListener l);

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

OnLoadingListener 视频加载事件 —> OnLoadingStatusListener3.4.10的OnLoadingListener,在4.5.0版本中用OnLoadingStatusListener替换:

  1. public interface OnLoadingStatusListener {
  2. void onLoadingBegin();
  3. void onLoadingProgress(int percent, float netSpeed); //百分比,kbps
  4. void onLoadingEnd();
  5. }
  6. public void setOnLoadingStatusListener(OnLoadingStatusListener l);

注意:onLoadingProgress中的netSpeed目前值为0。

OnBufferingUpdateListener 视频缓冲进度事件 —> OnInfoListener3.4.10的OnBufferingUpdateListener,在4.5.0版本中用OnInfoListener替换:

  1. public interface OnInfoListener {
  2. void onInfo(InfoBean infoBean);
  3. }
  4. public void setOnInfoListener(OnInfoListener l);

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

OnErrorListener 播放错误事件 —> OnErrorListener3.4.10的OnErrorListener,在4.5.0版本中用OnErrorListener替换:

  1. public interface OnErrorListener {
  2. void onError(ErrorInfo errorInfo);
  3. }
  4. public void setOnErrorListener(OnErrorListener l);

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

OnInfoListener 播放信息事件 —> OnInfoListener3.4.10的OnBufferingUpdateListener,在4.5.0版本中用OnInfoListener替换:

  1. public interface OnInfoListener {
  2. void onInfo(InfoBean infoBean);
  3. }
  4. public void setOnInfoListener(OnInfoListener l);

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

  1. /**
  2. * 未知。
  3. */
  4. Unknown(-1);
  5. /**
  6. * 循环播放开始。无额外信息。
  7. */
  8. LoopingStart(0),
  9. /**
  10. * 缓冲位置。额外值为当前缓冲位置。单位:毫秒。
  11. */
  12. BufferedPosition(1),
  13. /**
  14. * 当前播放位置。额外值为当前播放位置。单位:毫秒。
  15. */
  16. CurrentPosition(2),
  17. /**
  18. * 开始自动播放。无额外信息。
  19. */
  20. AutoPlayStart(3),
  21. /**
  22. * 设置了硬解,但是切换为软解。额外信息为描述信息。
  23. */
  24. SwitchToSoftwareVideoDecoder(100),
  25. /**
  26. * 音频解码格式不支持。额外信息为描述信息。
  27. */
  28. AudioCodecNotSupport(101),
  29. /**
  30. * 音频解码器设备失败。额外信息为描述信息。
  31. */
  32. AudioDecoderDeviceError(102),
  33. /**
  34. * 视频解码格式不支持。额外信息为描述信息。
  35. */
  36. VideoCodecNotSupport(103),
  37. /**
  38. * 视频解码器设备失败。额外信息为描述信息。
  39. */
  40. VideoDecoderDeviceError(104),
  41. /**
  42. * 网络失败,需要重试。无额外信息。
  43. */
  44. NetworkRetry(107),
  45. /**
  46. * 缓存成功。无额外信息。
  47. */
  48. CacheSuccess(108),
  49. /**
  50. * 缓存失败。额外信息为描述信息。
  51. */
  52. CacheError(109),
  53. /**
  54. * 系统无可用内存来存放媒体数据
  55. */
  56. LowMemory(110),

OnChangeQualityListener 切换清晰度变化 —> OnTrackChangedListener3.4.10的OnChangeQualityListener,在4.5.0版本中用OnTrackChangedListener替换:

  1. public interface OnTrackChangedListener {
  2. void onChangedSuccess(TrackInfo trackInfo);
  3. void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo);
  4. }
  5. public void setOnTrackChangedListener(OnTrackChangedListener l);

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

OnAutoPlayListener 自动播放开始事件 —> OnInfoListener3.4.10的OnAutoPlayListener,在4.5.0版本中用OnInfoListener替换:

  1. public interface OnInfoListener {
  2. void onInfo(InfoBean infoBean);
  3. }
  4. public void setOnInfoListener(OnInfoListener l);

回调中的 InfoBean.getCode() = InfoCode.AutoPlayStart 被回调时,表示自动播放事件。

OnTimeExpiredErrorListener 请求信息过期事件 —> OnErrorListener3.4.10的OnTimeExpiredErrorListener,在4.5.0版本中用OnErrorListener替换:

  1. public interface OnErrorListener {
  2. void onError(ErrorInfo errorInfo);
  3. }
  4. public void setOnErrorListener(OnErrorListener l);

ErrorInfo 为错误信息,可以通过ErrorInfo.getCode()ErrorInfo.getMsg()获取错误码与错误信息。过期错误码的值,参考API文档

3.设置播放源

3.4.10版本通过prepareAsync方法直接传值,并prepare。4.5.0改为AliPlayer.setDataSource方法设置。设置完之后,调用AliPlayer.prepare方法准备播放源。

  1. /**
  2. * 设置UrlSource数据源
  3. */
  4. public void setDataSource(UrlSource urlSource);
  5. /**
  6. * 设置vidSts数据源
  7. */
  8. public void setDataSource(VidSts vidSts);
  9. /**
  10. * 设置vidAuth数据源
  11. */
  12. public void setDataSource(VidAuth vidAuth);
  13. /**
  14. * 设置mps数据源
  15. */
  16. public void setDataSource(VidMps vidMps);

直播时移的设置,通过AliLiveShiftPlayer.setDataSource设置时移源:

  1. /**
  2. * 设置数据源
  3. */
  4. public void setDataSource(LiveShift liveShift);

如果由AlivcMediaPlayer升级到新版本播放,改用UrlSource播放即可。

4.主要API变化

原方法 新方法 说明
surfaceChanged redraw 在surface变化的时候调用
getPlayerState OnStateChangedListener 改为回调获取播放器状态

5.其他API变化

参考具体的API文档做修改。

3.x.x版本相关文档

基础播放器

高级播放器

基础播放器接口说明

高级播放器接口说明