通过阅读本文,您可以了解RTS SDK与阿里云播放器SDK集成的方法。

背景信息

移动端RTS SDK与阿里云播放器SDK集成比较简单,因为集成工作在播放器SDK中已内置,只需完成依赖,就可以像RTMP协议一样使用ARTC协议。

Android平台集成

  1. 阿里云播放器SDK集成RTS SDK作为插件。

    使用Maven或者本地依赖的方式将阿里云播放器SDK版本中AliyunARTC.aar依赖到App工程中,同时添加RtsSDK.aar到App工程中。在依赖了AliyunARTC.aar后,播放器SDK会自动将RTS SDK加载为插件。

    • Maven依赖
      名称 版本号 相关代码
      AliyunARTC 5.3.0p implementation 'com.aliyun.sdk.android:AlivcArtc:5.3.0p'
      RtsSDK 1.9.0 implementation 'com.aliyun.rts.android:RtsSDK:1.9.0'
    • 本地依赖

      使用本地依赖,请下载对应的依赖文件,详情请参见SDK下载

  2. 客户工程集成阿里云播放器SDK和RTS SDK。

    使用Maven或者本地依赖的方式集成阿里云播放器SDK和RTS SDK。

    • Maven依赖
      名称 版本号 相关代码
      AliyunPlayer 5.4.2 implementation 'com.aliyun.sdk.android:AliyunPlayer:5.4.2-full'
    • 本地依赖

      使用本地依赖,请通过官网中版本的.zip包中手动获取依赖文件,详情请参见Android播放器SDK,播放器SDK集成请参见集成文档

    1. 新建工程,如下图所示。 此处以Maven依赖方式举例说明。
      01
    2. 在根目录的build.gradle中添加如下代码。
      b
      //MPChart maven仓库地址,如果不需要曲线图,可以删除
      maven { url 'https://jitpack.io' }
      //阿里云相关SDK(阿里云播放器、RTSSDK) maven仓库地址,如果使用IJKPlayer可以删除
      maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases' }
      ext {
          compileSdkVersion = 25
          buildToolsVersion = "25.0.3"
          minSdkVersion = 21
          targetSdkVersion = 25
      
          versionCode = 800800
          versionName = "0.8.8"
          appVersionCode = 1
          appVersionName = "1.0"
      
          externalRecyclerView = 'com.android.support:recyclerview-v7:25.4.0'
          externalMPAndroidChart = 'com.github.PhilJay:MPAndroidChart:v3.1.0'
          externalSupportAppCompat = 'com.android.support:appcompat-v7:25.4.0'
      
          //ARTC直播播放器
          externalAliyunARTCNet = 'com.aliyun.rts.android:RtsSDK:1.9.0'
          externalAliyunARTC = 'com.aliyun.sdk.android:AlivcArtc:5.4.2.0'
          externalAliyunPlayer = 'com.aliyun.sdk.android:AliyunPlayer:5.4.2.0-full'
      
          //required, enough for most devices.
          //implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
          //implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
      }
  3. 调用阿里云播放器SDK的接口使用RTS服务。
    1. 创建播放器。

      通过AliPlayerFactory类可创建两种播放器:AliPlayer和AliListPlayer。单个播放功能使用AliPlayer,创建方法如下所示:

      AliPlayer aliyunVodPlayer;
      .....
      aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());
    2. 设置播放器监听事件。

      播放器提供了多种监听事件,如onPrepared,onCompletion等事件。设置方法如下所示:

      aliyunVodPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
          @Override
          public void onCompletion() {
              //播放完成事件
          }
      });
      aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
          @Override
          public void onError(ErrorInfo errorInfo) {
              //出错事件
          }
      });
      aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
          @Override
          public void onPrepared() {
              //准备成功事件
          }
      });
      aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
          @Override
          public void onVideoSizeChanged(int width, int height) {
              //视频分辨率变化回调
          }
      });
      aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() {
          @Override
          public void onRenderingStart() {
              //首帧渲染显示事件
          }
      });
      aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
          @Override
          public void onInfo(int type, long extra) {
              //其他信息的事件,type包括循环播放开始、缓冲位置、当前播放位置、自动播放开始等
          }
      });
      aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
          @Override
          public void onLoadingBegin() {
              //缓冲开始
          }
          @Override
          public void onLoadingProgress(int percent, float kbps) {
              //缓冲进度
          }
          @Override
          public void onLoadingEnd() {
              //缓冲结束
          }
      });
      aliyunVodPlayer.setOnSeekCompleteListener(new IPlayer.OnSeekCompleteListener() {
          @Override
          public void onSeekComplete() {
              //拖动结束
          }
      });
      aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() {
          @Override
          public void onSubtitleShow(long id, String data) {
              //显示字幕
          }
          @Override
          public void onSubtitleHide(long id) {
              //隐藏字幕
          }
      });
      aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
          @Override
          public void onChangedSuccess(TrackInfo trackInfo) {
              //切换音视频流或者清晰度成功
          }
          @Override
          public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
              //切换音视频流或者清晰度失败
          }
      });
      aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
          @Override
          public void onStateChanged(int newState) {
              //播放器状态改变事件
          }
      });
      aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() {
          @Override
          public void onSnapShot(Bitmap bm, int with, int height) {
              //截图事件
          }
      });
    3. 创建DataSource,准备播放。

      播放器支持4种播放源:VidSts、VidAuth、VidMps、UrlSource。其中UrlSource是直接URL播放,需要将URL设置为artc://协议,才可以使用RTS服务。

      UrlSource urlSource = new UrlSource();
      urlSource.setUri("artc://xxxx");
      aliyunVodPlayer.setDataSource(urlSource);
    4. 设置显示的view。

      如果源有画面,需要设置显示的view(支持SurfaceView和TextureView)到播放器中,用来显示画面。本文以SurfaceView举例说明,如下所示:

      surfaceView = (SurfaceView) findViewById(R.id.playview);
      surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
          @Override
          public void surfaceCreated(SurfaceHolder holder) {
              aliyunVodPlayer.setDisplay(holder);
          }
          @Override
          public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
              aliyunVodPlayer.redraw();
          }
          @Override
          public void surfaceDestroyed(SurfaceHolder holder) {
              aliyunVodPlayer.setDisplay(null);
          }
      });
    5. 播放控制。

      用户自行创建播放器的播放控制按钮,在按钮事件里面实现播放器控制接口。基本控制功能有播放、暂停、停止、拖动(seek),其中seek功能仅对点播有效;直播使用暂停功能时会使画面停留在当前画面,使用恢复后会开始播放当前画面。使用示例如下所示:

      //准备,在准备完成的回调接口中,调用start()可以开始播放
      aliyunVodPlayer.prepare();
      //开始播放
      aliyunVodPlayer.start();
      //暂停播放
      aliyunVodPlayer.pause();
      //停止播放
      aliyunVodPlayer.stop();
      //跳转到(不精准)
      aliyunVodPlayer.seekTo(long position);
      //重置
      aliyunVodPlayer.reset();
      //释放(释放后播放器将不可再被使用)
      aliyunVodPlayer.release();

      更多播放器SDK功能,请参见接口说明功能使用

    6. 参数配置。

      参数配置如下所示,可以更好地发挥低延迟优势。

      //获取配置
      PlayerConfig config = mAliyunVodPlayer.getConfig();
      //设置最大延迟为1秒,延迟控制由ARTC控制
      config.mMaxDelayTime = 1000;
      //设置播放器启播缓存为10毫秒,数据控制由ARTC控制。
      config.mHighBufferDuration = 10;
      config.mStartBufferDuration = 10;
      ....//其他设置
      //给播放器加载配置
      mAliyunVodPlayer.setConfig(config);
    7. 加载库。

      在合适的Activity内加入System.loadLibrary("RtsSDK");

      static {
          System.loadLibrary("RtsSDK");
      }

iOS平台集成

  1. 阿里云播放器SDK集成RTS SDK作为插件。

    移动端App依赖阿里云播放器SDK的同时依赖RTS SDK和AliPlayerSDK_iOS_ARTC,播放器SDK自动将RTS SDK加载为插件。

    • pod依赖
      名称 版本号 相关代码
      AliPlayerSDK_iOS_ARTC 5.3.0p pod 'AliPlayerSDK_iOS_ARTC','5.3.0p'
      RtsSDK 1.9.0 pod 'RtsSDK','1.9.0'
    • 本地依赖

      使用本地依赖,需要在SDK下载页面中获取framework,详情请参见SDK下载

  2. 客户工程集成阿里云播放器SDK和RTS SDK。
    • pod依赖
      名称 版本号 相关代码
      阿里云播放器SDK 5.4.2 pod 'AliPlayerSDK_iOS','5.4.2'
      使用pod方式打开终端,进入工程根目录运行pod init,在生成的podfile文件中输入如下文本(如需指定版本,请自行补充版本号),运行pod install
       pod 'RtsSDK'
       pod 'AliPlayerSDK_iOS'
       pod 'AliPlayerSDK_iOS_ARTC'
       ```
    • 本地依赖

      使用本地依赖,请通过官网中版本的.zip包中手动获取依赖文件,详情请参见iOS播放器SDK,播放器SDK集成请参见集成文档

      使用本地依赖方式,需将如下库文件拖到项目中,并在target的Gennel栏将各framework设置为Embed & Sign001
  3. 调用阿里云播放器SDK接口。
    1. 初始化Aliplayer。
      - (AliPlayer *)aliPlayer{
          if (!_aliPlayer) {
              _aliPlayer = [[AliPlayer alloc] init];
              _aliPlayer.scalingMode =  AVP_SCALINGMODE_SCALEASPECTFIT;
              _aliPlayer.rate = 1;
          //如需实现AVPDelegate代理,添加此行
              _aliPlayer.delegate = self;
          //设置播放的视图,将您的播放视图赋值给aliplayer
              _aliPlayer.playerView = self.basePlayerView.playerView;
              _aliPlayer.autoPlay = YES;
          }
          return _aliPlayer;
      }
    2. 设置播放URL。
      AVPUrlSource *source = [[AVPUrlSource alloc] urlWithString:_url];
      [self.aliPlayer setUrlSource:source];
    3. 设置播放参数。 使用阿里云播放器播放ARTC直播流,推荐配置如下所示:
      说明 播放器参数配置需要在调用prepare之前才能生效。
      AVPConfig *config = self.aliPlayer.getConfig;
      //直播最大延迟
      [config setMaxDelayTime:1000];
      //卡顿恢复时长
      [config setHighBufferDuration:10];
      //起播最大延迟
      [config setStartBufferDuration:10];
      //重连次数
      [config setNetworkRetryCount:2];
      //重连时长  
      [config setNetworkTimeout:15000];
       [_aliPlayer setConfig:config];
      //默认为硬解,如播放器在准备过程中发现硬解失败,会自动切换到软解
       _aliPlayer.enableHardwareDecoder = YES;
    4. 打开日志。
      [AliPlayer setEnableLog:YES];
      [AliPlayer setLogCallbackInfo:LOG_LEVEL_DEBUG callbackBlock:nil];
    5. 播放控制。
      [self.aliPlayer prepare];
      [self.aliPlayer stop];
      [self.aliPlayer destroy];
      [self.aliPlayer reload];

Windows平台集成

Windows端RTS SDK内置阿里云播放器功能,无需重复集成。

Mac平台集成

Mac端RTS SDK内置阿里云播放器功能,无需重复集成。