4.5.0版本与3.x.x版本有了比较重大的变化和更新。统一了基础和高级播放器、依赖的Framework不同、类名与方法有变化。

播放器的统一

3.x.x的SDK,提供了基础播放器和高级播放器:AlivcMediaPlayer和AliyunVodPlayer,分别用于URL播放与VID视频播放。在4.5.0的SDK中,不再区分,统一为AliPlayer去播放URL视频和VID视频。

依赖Framework的不同

3.x.x和4.5.0 SDK区别如下所示。

  • 3.x.x SDK 的依赖framework有:AliyunPlayerSDK.framework、AliyunVodPlayerSDK.framework和AliThirdparty.framework,以及一个bundle:AliyunLanguageSource.bundle。
  • 4.5.0 SDK依赖的framework变为:AliyunPlayer.framework、AliyunMediaDownloader.framework、AlivcConan.framework和alivcffmpeg.framework。

类名与方法变化

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

升级实践

以3.4.10 升级到4.5.0版本为例(3.x.x升级到4.x.x版本基本一致,以高级播放器AliyunVodPlayer升级为例)。

  • 集成framework。

    从xcode的工程设置Embedded Binaries删除原来的几个播放器的framework,然后添加新的播放器的framework进去,具体方式请参考播放器的集成文档

  • 修改代码。

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

    • 修改引用的头文件。

      更改framework的头文件引用。

      #import <AliyunVodPlayerSDK/AliyunVodPlayerSDK.h>

      更改为:

      #import <AliyunPlayer/AliyunPlayer.h>
    • 更改播放器类名。

      3.4.10的版本创建的播放器是AliyunVodPlayer的对象,新播放器创建的对象为AliPlayer。

      self.player = [[AliyunVodPlayer alloc] init];

      更改为:

      self.player = [[AliPlayer alloc] init];
    • 修改delegate回调。3.4.10的版本,delegate是AliyunVodPlayerDelegate类。4.5.0版本,delegate是AVPDelegate类,一些回调的基本意义是一样,但是名字发生了改变。以onEventCallback为例。
      - (void)vodPlayer:(AliyunVodPlayer *)vodPlayer onEventCallback:(AliyunVodPlayerEvent)event ;

      更改为:

      -(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType;

      监听事件变化情况如下:

      • 3.x.x的delegate的回调变化。
        事件名 功能 变化情况
        onEventCallback 播放事件 onPlayerEvent
        playBackErrorModel 播放错误 onError
        willSwitchToQuality 清晰度将要改变 删除
        didSwitchToQuality 清晰度切换成功 onTrackChanged
        failSwitchToQuality 清晰度切换失败 删除
        onCircleStartWithVodPlayer 循环播放 onPlayerEvent中的AVPEventLoopingStart
        onTimeExpiredErrorWithVodPlayer 超时错误 删除
        vodPlayerPlaybackAddressExpiredWithVideoId 地址将要过期 删除
      • 4.5.0新增加的delegate。
        事件名 功能
        onPlayerEvent:eventWithString 一些播放信息事件
        onVideoSizeChanged 视频分辨率发生改变
        onCurrentPositionUpdate 播放进度
        onBufferedPositionUpdate 缓存进度
        onLoadingProgress 缓冲进度
        onTrackReady 清晰度准备完成
        onSubtitleShow 字幕显示
        onSubtitleHide 字幕隐藏
        onGetThumbnailSuc 获取缩略图成功
        onGetThumbnailFailed 获取缩略图失败
        onPlayerStatusChanged 播放状态改变
        onCaptureScreen 截屏通知
    • 修改播放源的设置。

      3.4.10版本通过prepareWithVid方法传值并直接prepare。4.5.0改为setSource方法设置,并需要调用prepare来准备。

      /**
       @brief 使用url方式来播放视频
       @param source AVPUrlSource的输入类型
       @see AVPUrlSource
       */
      - (void)setUrlSource:(AVPUrlSource*)source;
      
      /**
       @brief 用vid和sts来播放视频
       @param source AVPVidStsSource的输入类型
       @see AVPVidStsSource
       */
      - (void)setStsSource:(AVPVidStsSource*)source;
      
      /**
       @brief 用vid和MPS信息来播放视频
       @param source AVPVidMpsSource的输入类型
       @see AVPVidMpsSource
       */
      - (void)setMpsSource:(AVPVidMpsSource*)source;
      
      /**
       @brief 使用vid+playauth方式播放
       @param source AVPVidAuthSource的输入类型
       @see AVPVidAuthSource
       */
      - (void)setAuthSource:(AVPVidAuthSource*)source;

      直播时移的设置,4.5.0新增类AVPLiveTimeShift来播放,将以前的一些接口移植到了这个类中,使用方式和以前一样。

    • 播放音视频信息获取。

      播放器preparedone之后,需要获取vid的一些基本信息,3.x.x播放器AliyunVodPlayerVideo来获取,而4.5.0播放器则是如下所示。

      if (event == AliyunVodPlayerEventPrepareDone) {
              AliyunVodPlayerVideo *videoModel = [self.vodPlayer getAliyunMediaInfo];
      }

      更改为:

      case AVPEventPrepareDone: 
          AVPTrackInfo *videoInfo = [self.player getCurrentTrack:AVPTRACK_TYPE_VIDEO];

      TrackInfo包括音视频的码率,播放地址、vid返回的一些信息,具体可以参考接口文档中AVPTrackInfo的描述。

    • 播放参数设置。

      3.x.x的播放的一些参数设置是通过直接的接口设置,而4.5.0里面则是封装到了一个config里面,通过GetConfig可以获取到播放器当前的参数配置,通过SetConfig可以修改播放器的一些参数。

      设置 功能 变化情况
      referer referer配置 AVPConfig中referer
      timeout 超时 AVPConfig中networkTimeout
      dropBufferDuration 丢帧阈值 AVPConfig中maxDelayTime

      同时4.5.0播放器中新增了很多config,方便对播放器进行多方面的控制,具体可以参考接口文档。

    • 播放控制接口。

      播放器控制接口4.5.0基本上没有太多的变化,比如pause、start、stop等,这边要注意的是新增了两个接口,一个是reload,这个是在网络出现问题的时候可以调用reload进行重新网络请求。另一个接口是redraw,这个在窗口发生变化的时候可以调用redraw来强制刷新视图。