本文为您介绍了播放器3.x.x版本SDK升级到播放器4.5.0版本SDK的重大的变化和更新,包含统一播放器、依赖包、类名与方法变化的相关说明以及操作步骤。

统一播放器

  • 播放器3.x.x版本SDK,提供了两种播放器,分别用于URL播放与VID视频的播放。
    • AlivcMediaPlayer播放器
    • AliyunVodPlayer播放器
  • 在播放器4.5.0版本SDK中,不再区分播放器,统一为AliPlayer端播放器对URL视频和VID视频进行播放。
说明 播放器4.5.0版本SDK及后续的版本SDK均可以按照此文档升级,版本号有区别。

依赖包的不同

  • 播放器3.x.x版本SDK的依赖包有三个本地依赖文件:
    • AlivcPlayer-3.x.x.aar文件
    • AlivcReporter-1.2.aar文件
    • AliyunVodPlayer-3.x.x.aar文件
    • 以及一个gradle依赖:compile 'com.aliyun.dpa:oss-android-sdk:+'
  • 播放器4.5.0版本SDK的依赖变为:
    • AliyunPlayer-4.5.0-full.aar文件
    • implementation 'com.alivc.conan:AlivcConan:0.9.5'

类名与方法变化

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

混淆配置变化

播放器4.5.0版本SDK混淆配置示例如下:
  -keep class com.alivc.**{*;}
  -keep class com.aliyun.**{*;}
  -keep class com.cicada.**{*;}
  -dontwarn com.alivc.**
  -dontwarn com.aliyun.**

升级实践

以播放器3.4.10版本SDK升级到播放器4.5.0版本SDK为例。
说明 播放器3.x.x版本SDK升级到播放器4.5.0版本SDK基本一致。
  1. 替换依赖包
    • 播放器3.4.10版本SDK的依赖包有三个本地依赖文件
      • AlivcPlayer-3.4.10.aar文件
      • AlivcReporter-1.2.aar文件
      • AliyunVodPlayer-3.4.10.aar文件
      • 以及一个gradle依赖:compile 'com.aliyun.dpa:oss-android-sdk:+'
    • 播放器4.5.0版本SDK的依赖变为:
      • AliyunPlayer-4.5.0-full.aar文件
      • implementation 'com.alivc.conan:AlivcConan:0.9.5'
    1. 本地依赖方式:
      使用本地依赖方式,需要替换本地依赖包,以及替换gradle的依赖包。
      1. 替换本地依赖包:
        将AlivcPlayer-3.4.10.aar、AlivcReporter-1.2.aar、AliyunVodPlayer-3.4.10.aar替换为AliyunPlayer-4.5.0-full.aar。替换替换完成:结果
      2. 增加阿里云的maven地址:
        在项目的build.gradle文件中,在两处增加阿里maven地址,示例如下:
        maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
        截图如下(url可能有更新,按照上面的地址为准):截图
      3. 替换gradle依赖包:
        将oss的依赖删除, 增加conan的依赖。修改后如下:修改
    2. 使用gradle依赖方式
      使用gradle依赖方式,需要删除本地依赖包,以及替换gradle的依赖包。
      1. 替换gradle的依赖包。替换删除AlivcPlayer-3.4.10.aar、AlivcReporter-1.2.aar、AliyunVodPlayer-3.4.10.aar依赖包。删除
      2. 增加阿里云的maven地址:
        在项目的build.gradle文件中,在两处增加阿里云的maven地址:
        maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
        截图如下(url可能有更新,按照上面的地址为准):结果
      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'
    3. 同时集成短视频
      如果集成播放器的同时也集成短视频SDK,那么播放器的SDK依赖AliyunPlayer-4.5.0-part包,同时使用共通的ffmpeg版本,即需要额外依赖com.aliyun.video.android:AlivcFFmpeg:1.0.0这个包。
      说明 如果集成时使用了错误的SDK包,会导致ffmpeg冲突。
  2. 修改代码

    依赖包替换完成之后,编译工程就会出错。这个时候,需要使用播放器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为例:类名修改类名后:类名
      • 大部分监听事件替换类名即可。对于有删减或者不同的,需要修改对应的接口实现。下面是两个版本监听事件的对比:
        表 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 截图结果事件 新增
      • 接口有变化的监听事件详解如下:
        OnFirstFrameStartListener首帧显示事件 : OnRenderingStartListener播放器3.4.10版本SDK的OnFirstFrameStartListener,在播放器4.5.0版本SDK中用OnRenderingStartListener替换。示例如下:
        public interface OnRenderingStartListener {
             void onRenderingStart();
        }
        public void setOnRenderingStartListener(OnRenderingStartListener l);
        OnStoppedListener播放停止事件:OnStateChangedListener播放器3.4.10版本SDK的OnStoppedListener,在播放器4.5.0版本SDK中用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;
        OnCircleStartListener循环播放开始事件:
        OnInfoListener播放器3.4.10版本SDK的OnCircleStartListener,在播放器4.5.0版本SDK中用OnInfoListener替换。示例如下:
        public interface OnInfoListener {
            void onInfo(InfoBean infoBean);
        }
        public void setOnInfoListener(OnInfoListener l);
        说明 回调中的InfoBean.getCode() = InfoCode.LoopingStart被回调时,表示循环播放事件。
        OnLoadingListener视频加载事件:
        OnLoadingStatusListener播放器3.4.10版本SDK的OnLoadingListener,在播放器4.5.0版本SDK中用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播放器3.4.10版本SDK的OnBufferingUpdateListener,在播放器4.5.0版本SDK中用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播放器3.4.10版本SDK的OnErrorListener,在播放器4.5.0版本SDK中用OnErrorListener替换。示例如下:
        public interface OnErrorListener {
            void onError(ErrorInfo errorInfo);
        }
        public void setOnErrorListener(OnErrorListener l);
        说明 ErrorInfo为错误信息,可以通过ErrorInfo.getCode()ErrorInfo.getMsg()获取错误码与错误信息。
        OnInfoListener播放信息事件:
        OnInfoListener版本3.4.10版本SDK的OnBufferingUpdateListener,在播放器4.5.0版本SDK中用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),
        OnChangeQualityListener切换清晰度变化:
        OnTrackChangedListener播放器3.4.10版本SDK的OnChangeQualityListener,在4.5.0版本中用OnTrackChangedListener替换。示例入下:
        public interface OnTrackChangedListener {
            void onChangedSuccess(TrackInfo trackInfo);
            void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo);
        }
        public void setOnTrackChangedListener(OnTrackChangedListener l);
        说明 切换清晰度调用selectTrack(index)之后,将会回调此方法。
        OnAutoPlayListener自动播放开始事件:
        OnInfoListener播放器3.4.10版本SDK的OnAutoPlayListener,在4.5.0版本中用OnInfoListener替换。示例如下:
        public interface OnInfoListener {
            void onInfo(InfoBean infoBean);
        }
        public void setOnInfoListener(OnInfoListener l);
        说明 ErrorInfo为错误信息,可以通过ErrorInfo.getCode()ErrorInfo.getMsg()获取错误码与错误信息。过期错误码的值,请参见错误码查询
  3. 设置播放源
    播放器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. 主要API变化
    原方法 新方法 说明
    surfaceChanged redraw 在surface变化的时候调用
    getPlayerState OnStateChangedListener 改为回调获取播放器状态
    说明 其他API变化请参见API概览

3.x.x版本相关文档