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);
}