ExoPlayer : how to set the quality of video according to bandwidth

Viewed 1321

I am really stuck at this , i am building a live stream tv app , where the player automatically select the quality of the stream according to bandwidth . I followed answers related this issue here in stackoverflow but its seems didnt work , i dont know what i am missing or miss understanding.

please look at me code below ..... is this the correct way , or i should have like list of urls with different reoultions , but how to the player could select i dont know

thanks in advance .

       private String hlsVideoUri = "http://stream/1080p.m3u8";
     TrackSelection.Factory trackSelectionFactory;

        trackSelectionFactory = new 
      AdaptiveTrackSelection.Factory(bandwidthMeter);


    TrackSelector trackSelector = new 
    DefaultTrackSelector(trackSelectionFactory);
    DefaultDataSourceFactory defaultDataSourceFactory = new 
    DefaultDataSourceFactory(this, Util.getUserAgent(this, "Tv"), 
    bandwidthMeter);
    // 1. Create a default TrackSelector
    Handler mainHandler = new Handler();

    Log.d("rashed"," "+bandwidthMeter.getBitrateEstimate());
    // 2. Create a default LoadControl
    LoadControl loadControl = new DefaultLoadControl();


    // 3. Create the player
    player =
            ExoPlayerFactory.newSimpleInstance(
                    this, trackSelector);

    simpleExoPlayerView = (PlayerView) findViewById(R.id.playerview);
    simpleExoPlayerView.setPlayer(player);

//

    // Measures bandwidth during playback. Can be null if not required.

    // This is the MediaSource representing the media to be played.
  HlsMediaSource hlsMediaSource =new   



   HlsMediaSource.Factory(defaultDataSourceFactory).
    createMediaSource(Uri.parse(hls 
  VideoUri),mainHandler, new MediaSourceEventListener() {
  @Override
  public void onLoadStarted(DataSpec dataSpec, int dataType, int trackType, 
  Format trackFormat, int trackSelectionReason, Object trackSelectionData, 
  long 
   mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs) {

  }

  @Override
  public void onLoadCompleted(DataSpec dataSpec, int dataType, int 
  trackType, 
  Format trackFormat, int trackSelectionReason, Object trackSelectionData, 
  long 
  mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long 
  loadDurationMs, long bytesLoaded) {

  }

  @Override
  public void onLoadCanceled(DataSpec dataSpec, int dataType, int trackType, 
  Format trackFormat, int trackSelectionReason, Object trackSelectionData, 
 long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long 
 loadDurationMs, long bytesLoaded) {

}

  @Override
   public void onLoadError(DataSpec dataSpec, int dataType, int trackType, 
   Format trackFormat, int trackSelectionReason, Object trackSelectionData, 
   long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long 
   loadDurationMs, long bytesLoaded, IOException error, boolean wasCanceled) 
   {

   }

@Override
public void onUpstreamDiscarded(int trackType, long mediaStartTimeMs, long 
 mediaEndTimeMs) {

}

@Override
public void onDownstreamFormatChanged(int trackType, Format trackFormat, int 
 trackSelectionReason, Object trackSelectionData, long mediaTimeMs) {

   }
  });



    player.prepare(hlsMediaSource);
    simpleExoPlayerView.requestFocus();
    player.setPlayWhenReady(true);

}

0 Answers
Related