Я действительно застрял в этом, я создаю прямую трансляцию телевизионного приложения, в котором проигрыватель автоматически выбирает качество потока в соответствии с пропускной способностью.Я следовал за ответами, связанными с этой проблемой, здесь в stackoverflow, но, похоже, это не сработало, я не знаю, что мне не хватает, или мне не хватает понимания.
, пожалуйста, посмотрите на код ниже ..... Это правильный путь, илиу меня должен быть как список URL с разными вступлениями, но как игрок мог выбрать, я не знаю
спасибо заранее.
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);
}