示例代码

创建全局Application

创建全局Application文件,如果目标工程全局Application文件已经存在,则在该文件合适的地方使用EVSdk.init()方法来进行初始化,将上面获取到的APPID,Access Key,Secret Key作为该方法的参数,该方法调用的位置应该是:目标工程用户登录成功后调用全局Application设置用户信息的函数,将用户信息作为EVSdk.init的参数。如果初期目标工程没有用户系统,在全局Application的onCreate()函数中调用EVSdk.init(),用户信息的参数传空字符串即可。如下:

    @Override public void onCreate() {
        super.onCreate();

        app = this;

        //打开SDK详细日志开关
        EVSdk.enableDebugLog();

        //初始化SDK,传入APPID,Access Key,Secret Key,userdata等参数
        EVSdk.init(app.getApplicationContext(), "APPID", "Access Key", "Secret Key", "userdata");
    }

创建播放主界面

可参考demo工程中的com.easyvaas.sdk.demo.PlayerActivity类完成一个简单的播放示例

  • 在AndroidManifest.xml文件中注册Activity,固定为竖屏、全屏播放

      <activity
          android:name=".PlayerActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/title_activity_player"
          android:screenOrientation="portrait"
          android:theme="@style/Theme.AppCompat.Light.NoActionBar"
          android:windowSoftInputMode="stateHidden|adjustResize" >
      </activity>
    
  • 在布局文件中加入播放显示View

      <com.easyvaas.sdk.player.base.EVVideoView
          android:id="@+id/player_surface_view"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:layout_gravity="center"/>
    
  • 初始化EVVideoView

      mVideoView = (EVVideoView) findViewById(R.id.player_surface_view);
    
  • 播放参数设置 播放参数EVPlayerParameter使用了Builder模式,这里只设置当前播放的流是否为直播流。如下:

      EVPlayerParameter.Builder builder = new EVPlayerParameter.Builder();
      builder.setLive(true);
    
  • 创建播放事件、错误回调 播放过程中出现错误,需要在错误回调中捕获相关错误信息,给予用户友好的提示。同时一些重要的事件信息也需要进行合适的处理。如下:

      private EVPlayerBase.OnPreparedListener mOnPreparedListener = new EVPlayerBase.OnPreparedListener() {
          @Override public boolean onPrepared() {
              //播放准备完成,开始播放
              return true;
          }
      };
    
      private EVPlayerBase.OnCompletionListener mOnCompletionListener = new EVPlayerBase.OnCompletionListener() {
          @Override public boolean onCompletion() {
              //观看录播时,收到该回调弹出播放结束提示;对于直播而言,收到该回调后应该查询业务服务器该直播是否结束,如果未结束,应该尝试重连
              return true;
          }
      };
    
      private EVPlayerBase.OnInfoListener mOnInfoListener = new EVPlayerBase.OnInfoListener() {
          @Override public boolean onInfo(int what, int extra) {
              switch (what) {
                  case IMediaPlayer.MEDIA_INFO_BUFFERING_START:
                      //开始缓冲,界面上给出提示
                      break;
                  case IMediaPlayer.MEDIA_INFO_BUFFERING_END:
                      //缓冲结束,界面上提示消失
                      break;
              }
              return true;
          }
      };
    
      private EVPlayerBase.OnErrorListener mOnErrorListener = new EVPlayerBase.OnErrorListener() {
          @Override public boolean onError(int what, int extra) {
              switch (what) {
                  case PlayerConstants.EV_PLAYER_ERROR_SDK_INIT:
                      //sdk初始失败,给出提示
                      break;
                  case PlayerConstants.EV_PLAYER_ERROR_GET_RESOURCE:
                      //播放资源调度失败,给出提示
                      break;
                  case PlayerConstants.EV_PLAYER_ERROR_GET_URL:
                      //获取播放地址失败,给出提示
                      break;
                  default:
                      //底层播放器抛出的错误,对于网络io错误可以考虑进行重连
                      break;
              }
    
              return true;
          }
      };
    
  • 创建EVPlayer对象,在onCreate()函数中调用

      mEVPlayer = new EVPlayer(this);
      mEVPlayer.setParameter(builder.build());
      mEVPlayer.setVideoView(mVideoView);
      mEVPlayer.setEnableAutoReconnect(true);  //是否打开自动重连,默认情况下关闭,网络发生抖动直接报播放错误
      mEVPlayer.setOnPreparedListener(mOnPreparedListener);
      mEVPlayer.setOnCompletionListener(mOnCompletionListener);
      mEVPlayer.setOnInfoListener(mOnInfoListener);
      mEVPlayer.setOnErrorListener(mOnErrorListener);
      mEVPlayer.onCreate();
    
  • 开始播放 调用mEVPlayer.watchStart()函数开始播放,该函数需要传入两个参数:lid和表示是否在直播的living,这两个参数通过上层业务获取。如下:

      mEVPlayer.watchStart(lid, living);
    

关于lid和living参数,sdk使用者应该自己搭建基本的视频管理后台,管理直播流的列表以及各个流的生命周期,包括流创建、直播中、停止、录播文件创建中、录播文件创建完成等状态(管理后台需要配置直播流状态通知url接收状态通知)。流列表中处于直播中或录播文件创建完成状态时,可以将lid和living参数下发给播放器sdk进行直播或回放视频的播放。

  • Activity的生命周期回调处理。播放过程中,需要处理来电、误触、切后台等情况,这些状态都依赖于Activity的生命周期,所以必须在Activity的生命周期中也调用EVPlayer SDK相应的接口,以确保播放正常退出或恢复。如下:

      @Override
      protected void onStart() {
          super.onStart();
          if (null != mEVPlayer) {
              mEVPlayer.onStart();
          }
      }
    
      @Override
      protected void onResume() {
          super.onResume();
          if (null != mEVPlayer) {
              mEVPlayer.onResume();
          }
      }
    
      @Override
      protected void onStop() {
          super.onStop();
          if (null != mEVPlayer) {
              mEVPlayer.onStop();
          }
      }
    
      @Override
      protected void onDestroy() {
          super.onDestroy();
          if (null != mEVPlayer) {
              mEVPlayer.onDestroy();
          }
      }
    

results matching ""

    No results matching ""