通过阅读本文,您可以快速创建并使用Android播放器。

前提条件

您在创建和使用Android播放器之前,需要集成最新版的Android播放器SDK。具体操作,请参见集成文档

创建与使用流程

基本流程
  1. 创建播放器。
    通过AliPlayerFactory类创建播放器。
    AliPlayer aliPlayer = AliPlayerFactory.createAliPlayer(context);
  2. 设置监听器。
    播放器支持设置多个监听器,其中OnPreparedListenerOnErrorListenerOnCompletionListenerOnLoadingStatusListenerOnInfoListener较为重要,建议您设置。示例如下:
    aliPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
        //此回调会在使用播放器的过程中,出现了任何错误,都会回调此接口。
    
        @Override
        public void onError(ErrorInfo errorInfo) {
            ErrorCode errorCode = errorInfo.getCode(); //错误码
            String errorMsg =errorInfo.getMsg(); //错误描述
            //出错后需要停止掉播放器
            aliPlayer.stop();
        }
    });
    aliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
        // 调用aliPlayer.prepare()方法后,播放器开始读取并解析数据。成功后,会回调此接口。
    
        @Override
        public void onPrepared() {
            //一般调用start开始播放视频
            aliPlayer.start();
        }
    });
    aliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
        //播放完成之后,就会回调到此接口。
        @Override
        public void onCompletion() {
            //一般调用stop停止播放视频
            aliPlayer.stop();
        }
    });
    aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        //播放器中的一些信息,包括:当前进度、缓存位置等等
        @Override
        public void onInfo(InfoBean infoBean) {
            InfoCode code = infoBean.getCode(); //信息码
            String msg = infoBean.getExtraMsg();//信息内容
            long value = infoBean.getExtraValue(); //信息值
    
            //当前进度:InfoCode.CurrentPosition
            //当前缓存位置:InfoCode.BufferedPosition
        }
    });
    aliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
        //播放器的加载状态, 网络不佳时,用于展示加载画面。
    
        @Override
        public void onLoadingBegin() {
            //开始加载。画面和声音不足以播放。
            //一般在此处显示圆形加载
        }
    
        @Override
        public void onLoadingProgress(int percent, float netSpeed) {
            //加载进度。百分比和网速。
        }
    
        @Override
        public void onLoadingEnd() {
            //结束加载。画面和声音可以播放。
            //一般在此处隐藏圆形加载
        }
    });
  3. 创建DataSource,准备播放。
    播放器支持4种播放源:
    • VidSts播放
    • VidAuth播放
    • VidMps播放
    • UrlSource播放
    说明 UrlSource是直接的URL播放,其余的三种是通过vid进行播放:VidSts,VidAuth点播用户使用;VidMps仅限MPS用户使用。
    示例如下:
    //url 方式
            UrlSource urlSource = new UrlSource();
            urlSource.setUri("播放地址,支持http、https、rtmp、本地文件、artc等协议");//既支持http、https等协议在线音视频播放,也支持通过本地文件的绝对路径(支持file://或者content://)播放本地音视频
            aliPlayer.setDataSource(urlSource);
    //vidAuth 方式
            VidAuth vidAuth = new VidAuth();
            vidAuth.setVid("vid信息");//从app服务端获取此值
            vidAuth.setPlayAuth("playAuth信息");//从app服务端获取此值
            vidAuth.setRegion("地域信息");//默认为cn-shanghai。 可以咨询app服务端获取此值
            aliPlayer.setDataSource(vidAuth);
    //vidSts 方式
            VidSts vidSts = new VidSts();
            vidSts.setVid("Vid信息");//从app服务端获取此值
            vidSts.setAccessKeyId("akId信息");//从app服务端获取此值
            vidSts.setAccessKeySecret("akSecret信息");//从app服务端获取此值
            vidSts.setSecurityToken("token信息");//从app服务端获取此值
            vidSts.setRegion("地域信息");//默认为cn-shanghai。 可以咨询app服务端获取此值
            aliPlayer.setDataSource(vidSts);
  4. 设置显示View。
    播放器支持SurfaceView和TextureView,选择其中一种即可。
    • 设置SurfaceView,示例如下:
      SurfaceView surfaceView = findViewById(R.id.surface_view);
      surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
          @Override
          public void surfaceCreated(SurfaceHolder holder) {
              aliPlayer.setSurface(holder.getSurface());
          }
      
          @Override
          public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
              aliPlayer.surfaceChanged();
          }
      
          @Override
          public void surfaceDestroyed(SurfaceHolder holder) {
              aliPlayer.setSurface(null);
          }
      });
    • 设置TextureView,示例如下:
      TextureView textureView = findViewById(R.id.texture_view);
      textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
          @Override
          public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
              aliPlayer.setSurface(new Surface(surface));
          }
      
          @Override
          public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
              aliPlayer.surfaceChanged();
          }
      
          @Override
          public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
              aliPlayer.setSurface(null);
              return false;
          }
      
          @Override
          public void onSurfaceTextureUpdated(SurfaceTexture surface) {
      
          }
      });
  5. 开始准备播放。

    调用aliPlayer.prepare()开始读取并解析数据。

    aliPlayer.prepare();
  6. 准备成功。
    调用aliPlayer.prepare()成功之后,会回调到onPrepared()回调接口中。失败则会回调到onError(ErrorInfo errorInfo)回调接口中。
  7. 开始播放。
    通过调用aliPlayer.start()开始播放视频。
    aliPlayer.start();//开始之后可以调用pause()暂停播放视频。
  8. 暂停播放。
    通过调用aliPlayer.pause()暂停播放视频。
    aliPlayer.pause();//暂停之后可以调用start()继续播放视频。
  9. 停止播放。
    通过调用aliPlayer.stop()停止播放视频。停止后,如果需要重新播放,则需要重新设置步骤三步骤四
    aliPlayer.stop(); //此方法在任何时机都可以调用。尤其是onError/onCompletio时,需要调用。
  10. 释放播放器。
    当不需要使用播放器实例时,需要调用aliPlayer.release()释放播放器内存。释放之后,播放器实例不可继续使用。如果需要使用播放器,需要重新创建播放器 。
    aliPlayer.release();