首页 > 解决方案 > ExoPlayer:如何根据带宽设置视频质量

问题描述

我真的很困惑,我正在构建一个直播电视应用程序,播放器根据带宽自动选择流的质量。我在stackoverflow中关注了与此问题相关的答案,但它似乎没有用,我不知道我错过了什么或错过了什么。

请看我下面的代码.....这是正确的方法吗,或者我应该有不同reoultions的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);

}

标签: javaandroidhttp-live-streamingexoplayer

解决方案


推荐阅读