docs: protected GVRVideoSceneObjectPlayer<ExoPlayer> makeExoPlayer(String movieFileName ) {
  
          GVRVideoSceneObjectPlayer<ExoPlayer> gvrVideoSceneObjectPlayer = null;
  
          try {
              //final Context context = activityContext;
              final Context context = gvrContext.getContext();
              final String movieFileNameFinal = movieFileName;
  
              DataSource.Factory dataSourceFactory = new DataSource.Factory() {
                  @Override
                  public DataSource createDataSource() {
                      return new AssetDataSource(context);
                  }
              };
  
              final MediaSource mediaSource = new ExtractorMediaSource(Uri.parse("asset:///" + movieFileName),
                      dataSourceFactory,
                      new DefaultExtractorsFactory(), null, null);
  
              final SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context,
                      new DefaultTrackSelector());
              player.prepare(mediaSource);
              Log.e(TAG, "Load movie " + movieFileNameFinal + ".");
  
              gvrVideoSceneObjectPlayer = new GVRVideoSceneObjectPlayer<ExoPlayer>() {
                  @Override
                  public ExoPlayer getPlayer() {
                      return player;
                  }
  
                  @Override
                  public void setSurface(final Surface surface) {
                      player.addListener(new Player.DefaultEventListener() {
                          @Override
                          public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
                              switch (playbackState) {
                                  case Player.STATE_BUFFERING:
                                      break;
                                  case Player.STATE_ENDED:
                                      player.seekTo(0);
                                      break;
                                  case Player.STATE_IDLE:
                                      break;
                                  case Player.STATE_READY:
                                      break;
                                  default:
                                      break;
                              }
                          }
                      });
                      player.setVideoSurface(surface);
                  }
  
                  @Override
                  public void release() {
                      player.release();
                  }
  
                  @Override
                  public boolean canReleaseSurfaceImmediately() {
                      return false;
                  }
  
                  @Override
                  public void pause() {
                      player.setPlayWhenReady(false);
                  }
  
                  @Override
                  public void start() {
                      Log.e(TAG, "movie start.");
                      player.setPlayWhenReady(true);
                  }
  
                  @Override
                  public boolean isPlaying() {
                      return player.getPlayWhenReady();
                  }
              };
          }
          catch (Exception e) {
              Log.e(TAG, "Exception makeExoPlayer: " + e);
          }
          return gvrVideoSceneObjectPlayer;
      }