通过阅读本文,您可以了解Android端阿里云播放器SDK集成Native RTS SDK实现超低延时直播的方法。

操作步骤

  1. 使用Maven方式添加阿里云播放器SDK和Native RTS SDK的依赖文件。

    在工程的app/build.gradle文件中添加阿里云播放器SDK和Native RTS SDK的依赖文件。

    implementation 'com.aliyun.sdk.android:AlivcArtc:5.4.4.0'
    implementation 'com.aliyun.rts.android:RtsSDK:2.1.0'
    implementation 'com.aliyun.sdk.android:AliyunPlayer:5.4.4.0-full'
    说明
    • AlivcArtcRtsSDK对应的依赖文件添加后,阿里云播放器SDK会自动将RTS SDK加载为插件。
    • 此处Maven依赖的版本仅供参考。获取最新的版本,阿里云播放器SDK请参见Android播放器SDK超低延时直播SDK请参见SDK下载
    • 集成阿里云播放器SDK和Native RTS SDK时需要满足对应的配套关系,详情请参见发布日志
  2. 添加Maven仓库地址。

    在根目录的build.gradle中添加Maven仓库地址。

    //MPChart maven仓库地址,如果不需要曲线图,可以删除
    maven { url 'https://jitpack.io' }
    //阿里云相关SDK(阿里云播放器、RTS SDK) Maven仓库地址
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases' }
  3. 调用阿里云播放器SDK接口实现超低延时直播功能。
    • 创建播放器

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

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

      播放器提供了多种监听事件,例如:onPrepared、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.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) {
              //截图事件
          }
      });
    • 创建DataSource

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

      UrlSource urlSource = new UrlSource();
      urlSource.setUri("artc://<播流地址>");
      aliyunVodPlayer.setDataSource(urlSource);
    • 设置显示的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.surfaceChanged();
          }
          @Override
          public void surfaceDestroyed(SurfaceHolder holder) {
              aliyunVodPlayer.setDisplay(null);
          }
      });
    • 播放控制

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

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

      配置播放参数,提升超低延时直播效果。

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

      根据实际需求,在适当的Activity内加入System.loadLibrary("RtsSDK");

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

    更多阿里云播放器SDK功能,请参见进阶功能接口说明