Java 类com.google.android.exoplayer2.upstream.BandwidthMeter 实例源码

项目:Cable-Android    文件:VideoPlayer.java   
private void setExoViewSource(@NonNull MasterSecret masterSecret, @NonNull VideoSlide videoSource)
    throws IOException
{
  BandwidthMeter         bandwidthMeter             = new DefaultBandwidthMeter();
  TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
  TrackSelector          trackSelector              = new DefaultTrackSelector(videoTrackSelectionFactory);
  LoadControl            loadControl                = new DefaultLoadControl();

  exoPlayer = ExoPlayerFactory.newSimpleInstance(getContext(), trackSelector, loadControl);
  exoView.setPlayer(exoPlayer);

  DefaultDataSourceFactory    defaultDataSourceFactory    = new DefaultDataSourceFactory(getContext(), "GenericUserAgent", null);
  AttachmentDataSourceFactory attachmentDataSourceFactory = new AttachmentDataSourceFactory(getContext(), masterSecret, defaultDataSourceFactory, null);
  ExtractorsFactory           extractorsFactory           = new DefaultExtractorsFactory();

  MediaSource mediaSource = new ExtractorMediaSource(videoSource.getUri(), attachmentDataSourceFactory, extractorsFactory, null, null);

  exoPlayer.prepare(mediaSource);
  exoPlayer.setPlayWhenReady(true);
}
项目:Exoplayer2Radio    文件:AdaptiveTrackSelection.java   
/**
 * Computes the ideal selected index ignoring buffer health.
 *
 * @param nowMs The current time in the timebase of {@link SystemClock#elapsedRealtime()}, or
 *     {@link Long#MIN_VALUE} to ignore blacklisting.
 */
private int determineIdealSelectedIndex(long nowMs) {
  long bitrateEstimate = bandwidthMeter.getBitrateEstimate();
  long effectiveBitrate = bitrateEstimate == BandwidthMeter.NO_ESTIMATE
      ? maxInitialBitrate : (long) (bitrateEstimate * bandwidthFraction);
  int lowestBitrateNonBlacklistedIndex = 0;
  for (int i = 0; i < length; i++) {
    if (nowMs == Long.MIN_VALUE || !isBlacklisted(i, nowMs)) {
      Format format = getFormat(i);
      if (format.bitrate <= effectiveBitrate) {
        return i;
      } else {
        lowestBitrateNonBlacklistedIndex = i;
      }
    }
  }
  return lowestBitrateNonBlacklistedIndex;
}
项目:K-Sonic    文件:AdaptiveTrackSelection.java   
/**
 * Computes the ideal selected index ignoring buffer health.
 *
 * @param nowMs The current time in the timebase of {@link SystemClock#elapsedRealtime()}, or
 *     {@link Long#MIN_VALUE} to ignore blacklisting.
 */
private int determineIdealSelectedIndex(long nowMs) {
  long bitrateEstimate = bandwidthMeter.getBitrateEstimate();
  long effectiveBitrate = bitrateEstimate == BandwidthMeter.NO_ESTIMATE
      ? maxInitialBitrate : (long) (bitrateEstimate * bandwidthFraction);
  int lowestBitrateNonBlacklistedIndex = 0;
  for (int i = 0; i < length; i++) {
    if (nowMs == Long.MIN_VALUE || !isBlacklisted(i, nowMs)) {
      Format format = getFormat(i);
      if (format.bitrate <= effectiveBitrate) {
        return i;
      } else {
        lowestBitrateNonBlacklistedIndex = i;
      }
    }
  }
  return lowestBitrateNonBlacklistedIndex;
}
项目:videoPickPlayer    文件:AdaptiveVideoTrackSelection.java   
/**
 * Computes the ideal selected index ignoring buffer health.
 *
 * @param nowMs The current time in the timebase of {@link SystemClock#elapsedRealtime()}, or
 *     {@link Long#MIN_VALUE} to ignore blacklisting.
 */
private int determineIdealSelectedIndex(long nowMs) {
  long bitrateEstimate = bandwidthMeter.getBitrateEstimate();
  long effectiveBitrate = bitrateEstimate == BandwidthMeter.NO_ESTIMATE
      ? maxInitialBitrate : (long) (bitrateEstimate * bandwidthFraction);
  int lowestBitrateNonBlacklistedIndex = 0;
  for (int i = 0; i < length; i++) {
    if (nowMs == Long.MIN_VALUE || !isBlacklisted(i, nowMs)) {
      Format format = getFormat(i);
      if (format.bitrate <= effectiveBitrate) {
        return i;
      } else {
        lowestBitrateNonBlacklistedIndex = i;
      }
    }
  }
  return lowestBitrateNonBlacklistedIndex;
}
项目:transistor    文件:AdaptiveTrackSelection.java   
/**
 * Computes the ideal selected index ignoring buffer health.
 *
 * @param nowMs The current time in the timebase of {@link SystemClock#elapsedRealtime()}, or
 *     {@link Long#MIN_VALUE} to ignore blacklisting.
 */
private int determineIdealSelectedIndex(long nowMs) {
  long bitrateEstimate = bandwidthMeter.getBitrateEstimate();
  long effectiveBitrate = bitrateEstimate == BandwidthMeter.NO_ESTIMATE
      ? maxInitialBitrate : (long) (bitrateEstimate * bandwidthFraction);
  int lowestBitrateNonBlacklistedIndex = 0;
  for (int i = 0; i < length; i++) {
    if (nowMs == Long.MIN_VALUE || !isBlacklisted(i, nowMs)) {
      Format format = getFormat(i);
      if (format.bitrate <= effectiveBitrate) {
        return i;
      } else {
        lowestBitrateNonBlacklistedIndex = i;
      }
    }
  }
  return lowestBitrateNonBlacklistedIndex;
}
项目:androidtv-Leanback    文件:PlaybackFragment.java   
private void initializePlayer() {
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory =
            new AdaptiveTrackSelection.Factory(bandwidthMeter);
    mTrackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

    mPlayer = ExoPlayerFactory.newSimpleInstance(getActivity(), mTrackSelector);
    mPlayerAdapter = new LeanbackPlayerAdapter(getActivity(), mPlayer, UPDATE_DELAY);
    mPlaylistActionListener = new PlaylistActionListener(mPlaylist);
    mPlayerGlue = new VideoPlayerGlue(getActivity(), mPlayerAdapter, mPlaylistActionListener);
    mPlayerGlue.setHost(new VideoFragmentGlueHost(this));
    mPlayerGlue.playWhenPrepared();

    play(mVideo);

    ArrayObjectAdapter mRowsAdapter = initializeRelatedVideosRow();
    setAdapter(mRowsAdapter);
}
项目:Phoenix-for-VK    文件:ExoVideoPlayer.java   
private static SimpleExoPlayer createPlayer(Context context) {
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

    return ExoPlayerFactory.newSimpleInstance(context.getApplicationContext(), trackSelector);
}
项目:lostfilm-android-client    文件:MainActivity.java   
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (!isPlaying) {
        Handler mainHandler = new Handler();
        BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
        TrackSelection.Factory videoTrackSelectionFactory =
                new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
        TrackSelector trackSelector =
                new DefaultTrackSelector(videoTrackSelectionFactory);

        LoadControl loadControl = new DefaultLoadControl();

        SimpleExoPlayer player =
                ExoPlayerFactory.newSimpleInstance(MainActivity.this, trackSelector, loadControl);
        SimpleExoPlayerView playerView = (SimpleExoPlayerView) findViewById(R.id.videoView);
        playerView.setPlayer(player);
        DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(MainActivity.this,
                Util.getUserAgent(MainActivity.this, "yourApplicationName"));
        MediaSource mediaSource = new ExtractorMediaSource(Uri.parse("https://r7---sn-3c27ln7k.googlevideo.com/videoplayback?id=6fb497d0971b8cdf&itag=22&source=picasa&begin=0&requiressl=yes&mm=30&mn=sn-3c27ln7k&ms=nxu&mv=m&nh=IgphcjAzLmticDAxKgkxMjcuMC4wLjE&pl=22&sc=yes&mime=video/mp4&lmt=1486083166327499&mt=1486135406&ip=134.249.158.189&ipbits=8&expire=1486164239&sparams=ip,ipbits,expire,id,itag,source,requiressl,mm,mn,ms,mv,nh,pl,sc,mime,lmt&signature=3BB06D8D4294F8C49B3CE910B3D6849954302BB1.02ABE00700DFCEF715E72D0EFB73B67841E659F8&key=ck2&ratebypass=yes&title=%5BAnime365%5D%20Kuzu%20no%20Honkai%20-%2004%20(t1174045)"), dataSourceFactory,
                new DefaultExtractorsFactory(), null, null);
        player.prepare(mediaSource);
        player.setPlayWhenReady(true);

    }
}
项目:MyAnimeViewer    文件:VideoDetailsFragment.java   
private TrackSelector createTrackSelector() {
    // Create a default TrackSelector
    // Measures bandwidth during playback. Can be null if not required.
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory =
            new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector =
            new DefaultTrackSelector(videoTrackSelectionFactory);
    return trackSelector;
}
项目:MyAnimeViewer    文件:OfflineVideoDetailsFragment.java   
private TrackSelector createTrackSelector() {
    // Create a default TrackSelector
    // Measures bandwidth during playback. Can be null if not required.
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory =
            new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector =
            new DefaultTrackSelector(videoTrackSelectionFactory);
    return trackSelector;
}
项目:MyAnimeViewer    文件:VideoPlayerActivity.java   
private TrackSelector createTrackSelector() {
    // Create a default TrackSelector
    // Measures bandwidth during playback. Can be null if not required.
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory =
            new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector =
            new DefaultTrackSelector(videoTrackSelectionFactory);
    return trackSelector;
}
项目:Exoplayer2Radio    文件:AdaptiveTrackSelection.java   
/**
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 */
public Factory(BandwidthMeter bandwidthMeter) {
  this (bandwidthMeter, DEFAULT_MAX_INITIAL_BITRATE,
      DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
      DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
      DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS, DEFAULT_BANDWIDTH_FRACTION);
}
项目:Exoplayer2Radio    文件:AdaptiveTrackSelection.java   
/**
 * @param group The {@link TrackGroup}.
 * @param tracks The indices of the selected tracks within the {@link TrackGroup}. Must not be
 *     empty. May be in any order.
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 */
public AdaptiveTrackSelection(TrackGroup group, int[] tracks,
    BandwidthMeter bandwidthMeter) {
  this (group, tracks, bandwidthMeter, DEFAULT_MAX_INITIAL_BITRATE,
      DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
      DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
      DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS, DEFAULT_BANDWIDTH_FRACTION);
}
项目:K-Sonic    文件:AdaptiveTrackSelection.java   
/**
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 */
public Factory(BandwidthMeter bandwidthMeter) {
  this (bandwidthMeter, DEFAULT_MAX_INITIAL_BITRATE,
      DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
      DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
      DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS, DEFAULT_BANDWIDTH_FRACTION);
}
项目:K-Sonic    文件:AdaptiveTrackSelection.java   
/**
 * @param group The {@link TrackGroup}.
 * @param tracks The indices of the selected tracks within the {@link TrackGroup}. Must not be
 *     empty. May be in any order.
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 */
public AdaptiveTrackSelection(TrackGroup group, int[] tracks,
    BandwidthMeter bandwidthMeter) {
  this (group, tracks, bandwidthMeter, DEFAULT_MAX_INITIAL_BITRATE,
      DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
      DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
      DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS, DEFAULT_BANDWIDTH_FRACTION);
}
项目:videoPickPlayer    文件:AdaptiveVideoTrackSelection.java   
/**
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 */
public Factory(BandwidthMeter bandwidthMeter) {
  this (bandwidthMeter, DEFAULT_MAX_INITIAL_BITRATE,
      DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
      DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
      DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS, DEFAULT_BANDWIDTH_FRACTION);
}
项目:videoPickPlayer    文件:AdaptiveVideoTrackSelection.java   
/**
 * @param group The {@link TrackGroup}. Must not be null.
 * @param tracks The indices of the selected tracks within the {@link TrackGroup}. Must not be
 *     null or empty. May be in any order.
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 */
public AdaptiveVideoTrackSelection(TrackGroup group, int[] tracks,
    BandwidthMeter bandwidthMeter) {
  this (group, tracks, bandwidthMeter, DEFAULT_MAX_INITIAL_BITRATE,
      DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
      DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
      DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS, DEFAULT_BANDWIDTH_FRACTION);
}
项目:itplayer    文件:PlayerActivity.java   
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player);

    media = (MediaFile) getIntent().getSerializableExtra(MEDIA);

    videoFragment = (VideoFragment) getFragmentManager().findFragmentById(R.id.playback_fragment);
    VideoFragmentGlueHost glueHost = new VideoFragmentGlueHost(videoFragment);

    subtitleView = (SubtitleView) findViewById(R.id.subtitle_view);
    if (subtitleView != null) {
        subtitleView.setUserDefaultStyle();
        subtitleView.setUserDefaultTextSize();
    }

    Handler mainHandler = new Handler();
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
    MappingTrackSelector trackSelector = new DefaultTrackSelector(mainHandler, videoTrackSelectionFactory);
    LoadControl loadControl = new DefaultLoadControl();
    player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
    player.addListener(this);
    player.setTextOutput(this);

    glueHelper = new ExoPlayerGlue(player, trackSelector, this);
    glueHelper.setHost(glueHost);

    session = new MediaSession(this, "ITPlayer");
    session.setCallback(new ExoPlayerMediaSessionCalback(player));
    session.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
    session.setActive(true);

    MediaMetadata.Builder metaBuilder = new MediaMetadata.Builder();
    session.setMetadata(metaBuilder.build());

    new SourceTask().execute(media);
}
项目:Loop    文件:VideoDetailsFragment.java   
private TrackSelector createTrackSelector(){
    // Create a default TrackSelector
    // Measures bandwidth during playback. Can be null if not required.
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory =
            new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector =
            new DefaultTrackSelector(videoTrackSelectionFactory);
    return trackSelector;
}
项目:transistor    文件:PlayerManager.java   
public void init(Context context, SimpleExoPlayerView simpleExoPlayerView) {
  // Create a default track selector.
  BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
  TrackSelection.Factory videoTrackSelectionFactory =
      new AdaptiveTrackSelection.Factory(bandwidthMeter);
  TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

  // Create a player instance.
  player = ExoPlayerFactory.newSimpleInstance(context, trackSelector);

  // Bind the player to the view.
  simpleExoPlayerView.setPlayer(player);

  // Produces DataSource instances through which media data is loaded.
  DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
      Util.getUserAgent(context, context.getString(R.string.application_name)));

  // This is the MediaSource representing the content media (i.e. not the ad).
  String contentUrl = context.getString(R.string.content_url);
  MediaSource contentMediaSource =
      new ExtractorMediaSource.Factory(dataSourceFactory)
          .createMediaSource(Uri.parse(contentUrl));

  // Compose the content media source into a new AdsMediaSource with both ads and content.
  MediaSource mediaSourceWithAds =
      new AdsMediaSource(
          contentMediaSource,
          /* adMediaSourceFactory= */ this,
          adsLoader,
          simpleExoPlayerView.getOverlayFrameLayout(),
          /* eventHandler= */ null,
          /* eventListener= */ null);

  // Prepare the player with the source.
  player.seekTo(contentPosition);
  player.prepare(mediaSourceWithAds);
  player.setPlayWhenReady(true);
}
项目:transistor    文件:AdaptiveTrackSelection.java   
/**
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 */
public Factory(BandwidthMeter bandwidthMeter) {
  this (bandwidthMeter, DEFAULT_MAX_INITIAL_BITRATE,
      DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
      DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
      DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS,
      DEFAULT_BANDWIDTH_FRACTION,
      DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE);
}
项目:transistor    文件:AdaptiveTrackSelection.java   
/**
 * @param group The {@link TrackGroup}.
 * @param tracks The indices of the selected tracks within the {@link TrackGroup}. Must not be
 *     empty. May be in any order.
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 */
public AdaptiveTrackSelection(TrackGroup group, int[] tracks,
    BandwidthMeter bandwidthMeter) {
  this (group, tracks, bandwidthMeter, DEFAULT_MAX_INITIAL_BITRATE,
      DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
      DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
      DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS,
      DEFAULT_BANDWIDTH_FRACTION,
      DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE);
}
项目:DemocracyDroid    文件:MediaService.java   
@Override
public void onCreate() {
    Log.d("MediaService", "OnCreate");
    // Load controls
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();

    TrackSelection.Factory videoFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector = new DefaultTrackSelector(videoFactory);
    LoadControl loadControl = new DefaultLoadControl();

    // Create Player
    player = ExoPlayerFactory.newSimpleInstance(getApplicationContext(),
            trackSelector, loadControl);

}
项目:TFG-SmartU-La-red-social    文件:VideoActivity.java   
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video);
    Bundle bundle = getIntent().getExtras();
    if(bundle!=null && bundle.containsKey("multimedia")) {

        Multimedia multimedia = bundle.getParcelable("multimedia");
        SimpleExoPlayerView videoView = (SimpleExoPlayerView) findViewById(R.id.video);

        // 1. Crea un slector de pista por defecto
        BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
        TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
        TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

        // 2. Creo un control para el player
        LoadControl loadControl = new DefaultLoadControl();

        // 3. Creo el player con los componentes anteriores
        player = ExoPlayerFactory.newSimpleInstance(getApplicationContext(), trackSelector, loadControl);

        //Obtengo la URL completa del archivo de video
        Uri uri = Uri.parse(ConsultasBBDD.server + ConsultasBBDD.imagenes +  multimedia.getUrl());

        //A la vista le establezco el reproductor que va a usar
        videoView.setPlayer(player);

        // Procuce que se instancie el DataSource a través de los datos del video que ha sido cargado.
        DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getApplicationContext(), Util.getUserAgent(getApplicationContext(), "SmartU"));
        // Produce un extractor que parsea el video.
        ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
        // Construyo un MediaSource con el formato y los datos del video para asignarselo al reproductor.
        MediaSource videoSource = new ExtractorMediaSource(uri, dataSourceFactory, extractorsFactory, null, null);
        // If has subtitles load video with subtitles
        if (multimedia.getUrlSubtitulos() != null && multimedia.getUrlSubtitulos().compareTo("") != 0) {
            //Obtengo la URL completa para los subtitulos del video
            Uri subtitulosUri = Uri.parse(ConsultasBBDD.server + ConsultasBBDD.imagenes +  multimedia.getUrlSubtitulos());
            //Asigno el formato de los subtitulos
            Format textFormat = Format.createTextSampleFormat(null, MimeTypes.TEXT_VTT,
                    null, Format.NO_VALUE, Format.NO_VALUE, Locale.getDefault().getLanguage(), null);
            //Creo un MediaSource para los subtitulos para añadirselos al video
            MediaSource subtitleSource = new SingleSampleMediaSource(subtitulosUri, dataSourceFactory, textFormat, C.TIME_UNSET);
            // Mezcla el video con los subtitulos
            MergingMediaSource mergedSource = new MergingMediaSource(videoSource, subtitleSource);
            // Preparo el reproductor con los subtitulos y el video
            player.prepare(mergedSource);
        } else // Si no tiene subtitulos preparo solo el video
            player.prepare(videoSource);
    }
}
项目:Phoenix-for-VK    文件:ExoVoicePlayer.java   
private void preparePlayer() {
    setStatus(STATUS_PREPARING);

    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory trackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector = new DefaultTrackSelector(trackSelectionFactory);

    exoPlayer = ExoPlayerFactory.newSimpleInstance(app, trackSelector);

    // DefaultBandwidthMeter bandwidthMeterA = new DefaultBandwidthMeter();
    // Produces DataSource instances through which media data is loaded.
    // DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "exoplayer2example"), bandwidthMeterA);
    // DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(App.getInstance(), Util.getUserAgent(App.getInstance(), "exoplayer2example"), bandwidthMeterA);

    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyConfig.getAddress(), proxyConfig.getPort()));
    if (proxyConfig.isAuthEnabled()) {
        Authenticator authenticator = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(proxyConfig.getUser(), proxyConfig.getPass().toCharArray());
            }
        };

        Authenticator.setDefault(authenticator);
    } else {
        Authenticator.setDefault(null);
    }

    String userAgent = Util.getUserAgent(app, "Phoenix-for-VK");
    CustomHttpDataSourceFactory factory = new CustomHttpDataSourceFactory(userAgent, proxy);

    // Produces Extractor instances for parsing the media data.
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();

    // This is the MediaSource representing the media to be played:
    // FOR SD CARD SOURCE:
    // MediaSource videoSource = new ExtractorMediaSource(mp4VideoUri, dataSourceFactory, extractorsFactory, null, null);
    // FOR LIVESTREAM LINK:

    String url = playingEntry.getAudio().getLinkMp3();

    MediaSource mediaSource = new ExtractorMediaSource(Uri.parse(url), factory, extractorsFactory, null, null);
    exoPlayer.setRepeatMode(Player.REPEAT_MODE_OFF);
    exoPlayer.addListener(new ExoEventAdapter() {
        @Override
        public void onPlayerStateChanged(boolean b, int i) {
            onInternalPlayerStateChanged(i);
        }

        @Override
        public void onPlayerError(ExoPlaybackException error) {
            onExoPlayerException(error);
        }
    });

    exoPlayer.setPlayWhenReady(supposedToBePlaying);
    exoPlayer.prepare(mediaSource);
}
项目:ExoPlayer-Offline    文件:ExoHostedTest.java   
@SuppressWarnings("unused")
protected MappingTrackSelector buildTrackSelector(HostActivity host,
    BandwidthMeter bandwidthMeter) {
  return new DefaultTrackSelector(new AdaptiveVideoTrackSelection.Factory(bandwidthMeter));
}
项目:ExoPlayer-Offline    文件:DashTest.java   
@Override
protected MappingTrackSelector buildTrackSelector(HostActivity host,
    BandwidthMeter bandwidthMeter) {
  return trackSelector;
}
项目:B4A_ExoPlayer    文件:SimpleExoPlayerWrapper.java   
/**
 * Initializes the player.
 */
public void Initialize(final BA ba, String EventName) {
    eventName = EventName.toLowerCase(BA.cul);
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory =
        new AdaptiveTrackSelection.Factory(bandwidthMeter);
    trackSelector =
        new DefaultTrackSelector(videoTrackSelectionFactory);

    player = ExoPlayerFactory.newSimpleInstance(BA.applicationContext, trackSelector);
    player.addListener(new Player.EventListener() {

        @Override
        public void onLoadingChanged(boolean isLoading) {
        }

        @Override
        public void onPlayerError(ExoPlaybackException error) {
            ba.raiseEvent(SimpleExoPlayerWrapper.this, eventName + "_error", String.valueOf(error.getCause()));
        }

        @Override
        public void onPlayerStateChanged(boolean playWhenReady,
                int playbackState) {
            if (playbackState != currentState) {
                currentState = playbackState;
                if (currentState == Player.STATE_ENDED)
                    ba.raiseEvent(SimpleExoPlayerWrapper.this, eventName + "_complete");
                else if (currentState == Player.STATE_READY)
                    ba.raiseEvent(SimpleExoPlayerWrapper.this, eventName + "_ready");
            }
        }

        @Override
        public void onPositionDiscontinuity() {

        }

        @Override
        public void onTimelineChanged(Timeline timeline, Object manifest) {
        }

        @Override
        public void onPlaybackParametersChanged(
                PlaybackParameters playbackParameters) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onRepeatModeChanged(int repeatMode) {

        }

        @Override
        public void onTracksChanged(TrackGroupArray trackGroups,
                TrackSelectionArray trackSelections) {
            ba.raiseEventFromUI(SimpleExoPlayerWrapper.this, eventName + "_trackchanged");
        }

    });
}
项目:WhatsAppStatusSaver    文件:MainActivity.java   
public void showImagePopup(Point p, final String uri) {
        Activity context = MainActivity.this;
        //COMPLETED solving video problem

        final Dialog dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.image_popup_layout);
        dialog.show();
        WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        lp.copyFrom(dialog.getWindow().getAttributes());
        dialog.getWindow().setAttributes(lp);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        dialog.getWindow().setDimAmount(0);


        // Getting a reference to Close button, and close the popup when clicked.
        FloatingActionButton close = (FloatingActionButton) dialog.findViewById(R.id.close_image_popup_button);
        ImageView statusImage = (ImageView) dialog.findViewById(R.id.full_status_image_view);
        final SimpleExoPlayerView simpleExoPlayerView = dialog.findViewById(R.id.full_status_video_view);
        final SimpleExoPlayer player;
        if (uri.endsWith(".jpg")) {
            GlideApp.with(context).load(uri).fitCenter().into(statusImage);
        } else if (uri.endsWith(".mp4")) {
            statusImage.setVisibility(View.GONE);
            simpleExoPlayerView.setVisibility(View.VISIBLE);
            Uri myUri = Uri.parse(uri); // initialize Uri here

            // 1. Create a default TrackSelector
            BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
            TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
            TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

// 2. Create a default LoadControl
            LoadControl loadControl = new DefaultLoadControl();

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

//Set media controller
            simpleExoPlayerView.setUseController(true);
            simpleExoPlayerView.requestFocus();

// Bind the player to the view.
            simpleExoPlayerView.setPlayer(player);

            //Measures bandwidth during playback. Can be null if not required.
            DefaultBandwidthMeter bandwidthMeterA = new DefaultBandwidthMeter();
//Produces DataSource instances through which media data is loaded.
            DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this, Util.
                    getUserAgent(this, "exoplayer2example"), bandwidthMeterA);
//Produces Extractor instances for parsing the media data.
            ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();

            MediaSource videoSource = new ExtractorMediaSource(myUri, dataSourceFactory, extractorsFactory, null, null);
            player.prepare(videoSource);
            player.setPlayWhenReady(true); //run file/link when ready to play.
            dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialogInterface) {
                    player.release();
                }
            });

        }
        close.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
//                popup.dismiss();
                dialog.cancel();
            }
        });
    }
项目:BeatPulse    文件:MusicService.java   
@Override
public IBinder onBind(Intent intent) {
    //onBind is only called when the first client connects. All other bind attempts just return the same binder object
    Handler handler = new Handler();
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory trackSelection = new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector = new DefaultTrackSelector(handler, trackSelection);
    LoadControl loadControl = new DefaultLoadControl();

    player = ExoPlayerFactory.newSimpleInstance(getApplicationContext(), trackSelector, loadControl);
    player.addListener(new ExoPlayer.EventListener() {
        @Override
        public void onLoadingChanged(boolean isLoading) {

        }

        @Override
        public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
            if(playbackState == ExoPlayer.STATE_ENDED){
                if(replayMode == REPLAY_ONE){
                    playNext(true, false);
                } else if (replayMode != STOP_AFTER_NEXT) {
                    playNext(false, false);
                }
            }
        }

        @Override
        public void onTimelineChanged(Timeline timeline, Object manifest) {

        }

        @Override
        public void onPlayerError(ExoPlaybackException error) {

        }

        @Override
        public void onPositionDiscontinuity() {

        }
    });
    return binder;
}
项目:transistor    文件:DashTestRunner.java   
@Override
protected MappingTrackSelector buildTrackSelector(HostActivity host,
    BandwidthMeter bandwidthMeter) {
  return trackSelector;
}
项目:transistor    文件:ExoHostedTest.java   
@SuppressWarnings("unused")
protected MappingTrackSelector buildTrackSelector(HostActivity host,
    BandwidthMeter bandwidthMeter) {
  return new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
}
项目:transistor    文件:AdaptiveTrackSelection.java   
/**
 * @param group The {@link TrackGroup}.
 * @param tracks The indices of the selected tracks within the {@link TrackGroup}. Must not be
 *     empty. May be in any order.
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 * @param maxInitialBitrate The maximum bitrate in bits per second that should be assumed when a
 *     bandwidth estimate is unavailable.
 * @param minDurationForQualityIncreaseMs The minimum duration of buffered data required for the
 *     selected track to switch to one of higher quality.
 * @param maxDurationForQualityDecreaseMs The maximum duration of buffered data required for the
 *     selected track to switch to one of lower quality.
 * @param minDurationToRetainAfterDiscardMs When switching to a track of significantly higher
 *     quality, the selection may indicate that media already buffered at the lower quality can
 *     be discarded to speed up the switch. This is the minimum duration of media that must be
 *     retained at the lower quality.
 * @param bandwidthFraction The fraction of the available bandwidth that the selection should
 *     consider available for use. Setting to a value less than 1 is recommended to account
 *     for inaccuracies in the bandwidth estimator.
 * @param bufferedFractionToLiveEdgeForQualityIncrease For live streaming, the fraction of
 *     the duration from current playback position to the live edge that has to be buffered
 *     before the selected track can be switched to one of higher quality. This parameter is
 *     only applied when the playback position is closer to the live edge than
 *     {@code minDurationForQualityIncreaseMs}, which would otherwise prevent switching to a
 *     higher quality from happening.
 */
public AdaptiveTrackSelection(TrackGroup group, int[] tracks, BandwidthMeter bandwidthMeter,
    int maxInitialBitrate, long minDurationForQualityIncreaseMs,
    long maxDurationForQualityDecreaseMs, long minDurationToRetainAfterDiscardMs,
    float bandwidthFraction, float bufferedFractionToLiveEdgeForQualityIncrease) {
  super(group, tracks);
  this.bandwidthMeter = bandwidthMeter;
  this.maxInitialBitrate = maxInitialBitrate;
  this.minDurationForQualityIncreaseUs = minDurationForQualityIncreaseMs * 1000L;
  this.maxDurationForQualityDecreaseUs = maxDurationForQualityDecreaseMs * 1000L;
  this.minDurationToRetainAfterDiscardUs = minDurationToRetainAfterDiscardMs * 1000L;
  this.bandwidthFraction = bandwidthFraction;
  this.bufferedFractionToLiveEdgeForQualityIncrease =
      bufferedFractionToLiveEdgeForQualityIncrease;
  selectedIndex = determineIdealSelectedIndex(Long.MIN_VALUE);
  reason = C.SELECTION_REASON_INITIAL;
}
项目:Exoplayer2Radio    文件:AdaptiveTrackSelection.java   
/**
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 * @param maxInitialBitrate The maximum bitrate in bits per second that should be assumed
 *     when a bandwidth estimate is unavailable.
 * @param minDurationForQualityIncreaseMs The minimum duration of buffered data required for
 *     the selected track to switch to one of higher quality.
 * @param maxDurationForQualityDecreaseMs The maximum duration of buffered data required for
 *     the selected track to switch to one of lower quality.
 * @param minDurationToRetainAfterDiscardMs When switching to a track of significantly higher
 *     quality, the selection may indicate that media already buffered at the lower quality can
 *     be discarded to speed up the switch. This is the minimum duration of media that must be
 *     retained at the lower quality.
 * @param bandwidthFraction The fraction of the available bandwidth that the selection should
 *     consider available for use. Setting to a value less than 1 is recommended to account
 *     for inaccuracies in the bandwidth estimator.
 */
public Factory(BandwidthMeter bandwidthMeter, int maxInitialBitrate,
    int minDurationForQualityIncreaseMs, int maxDurationForQualityDecreaseMs,
    int minDurationToRetainAfterDiscardMs, float bandwidthFraction) {
  this.bandwidthMeter = bandwidthMeter;
  this.maxInitialBitrate = maxInitialBitrate;
  this.minDurationForQualityIncreaseMs = minDurationForQualityIncreaseMs;
  this.maxDurationForQualityDecreaseMs = maxDurationForQualityDecreaseMs;
  this.minDurationToRetainAfterDiscardMs = minDurationToRetainAfterDiscardMs;
  this.bandwidthFraction = bandwidthFraction;
}
项目:Exoplayer2Radio    文件:AdaptiveTrackSelection.java   
/**
 * @param group The {@link TrackGroup}.
 * @param tracks The indices of the selected tracks within the {@link TrackGroup}. Must not be
 *     empty. May be in any order.
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 * @param maxInitialBitrate The maximum bitrate in bits per second that should be assumed when a
 *     bandwidth estimate is unavailable.
 * @param minDurationForQualityIncreaseMs The minimum duration of buffered data required for the
 *     selected track to switch to one of higher quality.
 * @param maxDurationForQualityDecreaseMs The maximum duration of buffered data required for the
 *     selected track to switch to one of lower quality.
 * @param minDurationToRetainAfterDiscardMs When switching to a track of significantly higher
 *     quality, the selection may indicate that media already buffered at the lower quality can
 *     be discarded to speed up the switch. This is the minimum duration of media that must be
 *     retained at the lower quality.
 * @param bandwidthFraction The fraction of the available bandwidth that the selection should
 *     consider available for use. Setting to a value less than 1 is recommended to account
 *     for inaccuracies in the bandwidth estimator.
 */
public AdaptiveTrackSelection(TrackGroup group, int[] tracks, BandwidthMeter bandwidthMeter,
    int maxInitialBitrate, long minDurationForQualityIncreaseMs,
    long maxDurationForQualityDecreaseMs, long minDurationToRetainAfterDiscardMs,
    float bandwidthFraction) {
  super(group, tracks);
  this.bandwidthMeter = bandwidthMeter;
  this.maxInitialBitrate = maxInitialBitrate;
  this.minDurationForQualityIncreaseUs = minDurationForQualityIncreaseMs * 1000L;
  this.maxDurationForQualityDecreaseUs = maxDurationForQualityDecreaseMs * 1000L;
  this.minDurationToRetainAfterDiscardUs = minDurationToRetainAfterDiscardMs * 1000L;
  this.bandwidthFraction = bandwidthFraction;
  selectedIndex = determineIdealSelectedIndex(Long.MIN_VALUE);
  reason = C.SELECTION_REASON_INITIAL;
}
项目:K-Sonic    文件:AdaptiveTrackSelection.java   
/**
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 * @param maxInitialBitrate The maximum bitrate in bits per second that should be assumed
 *     when a bandwidth estimate is unavailable.
 * @param minDurationForQualityIncreaseMs The minimum duration of buffered data required for
 *     the selected track to switch to one of higher quality.
 * @param maxDurationForQualityDecreaseMs The maximum duration of buffered data required for
 *     the selected track to switch to one of lower quality.
 * @param minDurationToRetainAfterDiscardMs When switching to a track of significantly higher
 *     quality, the selection may indicate that media already buffered at the lower quality can
 *     be discarded to speed up the switch. This is the minimum duration of media that must be
 *     retained at the lower quality.
 * @param bandwidthFraction The fraction of the available bandwidth that the selection should
 *     consider available for use. Setting to a value less than 1 is recommended to account
 *     for inaccuracies in the bandwidth estimator.
 */
public Factory(BandwidthMeter bandwidthMeter, int maxInitialBitrate,
    int minDurationForQualityIncreaseMs, int maxDurationForQualityDecreaseMs,
    int minDurationToRetainAfterDiscardMs, float bandwidthFraction) {
  this.bandwidthMeter = bandwidthMeter;
  this.maxInitialBitrate = maxInitialBitrate;
  this.minDurationForQualityIncreaseMs = minDurationForQualityIncreaseMs;
  this.maxDurationForQualityDecreaseMs = maxDurationForQualityDecreaseMs;
  this.minDurationToRetainAfterDiscardMs = minDurationToRetainAfterDiscardMs;
  this.bandwidthFraction = bandwidthFraction;
}
项目:K-Sonic    文件:AdaptiveTrackSelection.java   
/**
 * @param group The {@link TrackGroup}.
 * @param tracks The indices of the selected tracks within the {@link TrackGroup}. Must not be
 *     empty. May be in any order.
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 * @param maxInitialBitrate The maximum bitrate in bits per second that should be assumed when a
 *     bandwidth estimate is unavailable.
 * @param minDurationForQualityIncreaseMs The minimum duration of buffered data required for the
 *     selected track to switch to one of higher quality.
 * @param maxDurationForQualityDecreaseMs The maximum duration of buffered data required for the
 *     selected track to switch to one of lower quality.
 * @param minDurationToRetainAfterDiscardMs When switching to a track of significantly higher
 *     quality, the selection may indicate that media already buffered at the lower quality can
 *     be discarded to speed up the switch. This is the minimum duration of media that must be
 *     retained at the lower quality.
 * @param bandwidthFraction The fraction of the available bandwidth that the selection should
 *     consider available for use. Setting to a value less than 1 is recommended to account
 *     for inaccuracies in the bandwidth estimator.
 */
public AdaptiveTrackSelection(TrackGroup group, int[] tracks, BandwidthMeter bandwidthMeter,
    int maxInitialBitrate, long minDurationForQualityIncreaseMs,
    long maxDurationForQualityDecreaseMs, long minDurationToRetainAfterDiscardMs,
    float bandwidthFraction) {
  super(group, tracks);
  this.bandwidthMeter = bandwidthMeter;
  this.maxInitialBitrate = maxInitialBitrate;
  this.minDurationForQualityIncreaseUs = minDurationForQualityIncreaseMs * 1000L;
  this.maxDurationForQualityDecreaseUs = maxDurationForQualityDecreaseMs * 1000L;
  this.minDurationToRetainAfterDiscardUs = minDurationToRetainAfterDiscardMs * 1000L;
  this.bandwidthFraction = bandwidthFraction;
  selectedIndex = determineIdealSelectedIndex(Long.MIN_VALUE);
  reason = C.SELECTION_REASON_INITIAL;
}
项目:videoPickPlayer    文件:AdaptiveVideoTrackSelection.java   
/**
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 * @param maxInitialBitrate The maximum bitrate in bits per second that should be assumed
 *     when a bandwidth estimate is unavailable.
 * @param minDurationForQualityIncreaseMs The minimum duration of buffered data required for
 *     the selected track to switch to one of higher quality.
 * @param maxDurationForQualityDecreaseMs The maximum duration of buffered data required for
 *     the selected track to switch to one of lower quality.
 * @param minDurationToRetainAfterDiscardMs When switching to a track of significantly higher
 *     quality, the selection may indicate that media already buffered at the lower quality can
 *     be discarded to speed up the switch. This is the minimum duration of media that must be
 *     retained at the lower quality.
 * @param bandwidthFraction The fraction of the available bandwidth that the selection should
 *     consider available for use. Setting to a value less than 1 is recommended to account
 *     for inaccuracies in the bandwidth estimator.
 */
public Factory(BandwidthMeter bandwidthMeter, int maxInitialBitrate,
    int minDurationForQualityIncreaseMs, int maxDurationForQualityDecreaseMs,
    int minDurationToRetainAfterDiscardMs, float bandwidthFraction) {
  this.bandwidthMeter = bandwidthMeter;
  this.maxInitialBitrate = maxInitialBitrate;
  this.minDurationForQualityIncreaseMs = minDurationForQualityIncreaseMs;
  this.maxDurationForQualityDecreaseMs = maxDurationForQualityDecreaseMs;
  this.minDurationToRetainAfterDiscardMs = minDurationToRetainAfterDiscardMs;
  this.bandwidthFraction = bandwidthFraction;
}
项目:videoPickPlayer    文件:AdaptiveVideoTrackSelection.java   
/**
 * @param group The {@link TrackGroup}. Must not be null.
 * @param tracks The indices of the selected tracks within the {@link TrackGroup}. Must not be
 *     null or empty. May be in any order.
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 * @param maxInitialBitrate The maximum bitrate in bits per second that should be assumed when a
 *     bandwidth estimate is unavailable.
 * @param minDurationForQualityIncreaseMs The minimum duration of buffered data required for the
 *     selected track to switch to one of higher quality.
 * @param maxDurationForQualityDecreaseMs The maximum duration of buffered data required for the
 *     selected track to switch to one of lower quality.
 * @param minDurationToRetainAfterDiscardMs When switching to a track of significantly higher
 *     quality, the selection may indicate that media already buffered at the lower quality can
 *     be discarded to speed up the switch. This is the minimum duration of media that must be
 *     retained at the lower quality.
 * @param bandwidthFraction The fraction of the available bandwidth that the selection should
 *     consider available for use. Setting to a value less than 1 is recommended to account
 *     for inaccuracies in the bandwidth estimator.
 */
public AdaptiveVideoTrackSelection(TrackGroup group, int[] tracks, BandwidthMeter bandwidthMeter,
    int maxInitialBitrate, long minDurationForQualityIncreaseMs,
    long maxDurationForQualityDecreaseMs, long minDurationToRetainAfterDiscardMs,
    float bandwidthFraction) {
  super(group, tracks);
  this.bandwidthMeter = bandwidthMeter;
  this.maxInitialBitrate = maxInitialBitrate;
  this.minDurationForQualityIncreaseUs = minDurationForQualityIncreaseMs * 1000L;
  this.maxDurationForQualityDecreaseUs = maxDurationForQualityDecreaseMs * 1000L;
  this.minDurationToRetainAfterDiscardUs = minDurationToRetainAfterDiscardMs * 1000L;
  this.bandwidthFraction = bandwidthFraction;
  selectedIndex = determineIdealSelectedIndex(Long.MIN_VALUE);
  reason = C.SELECTION_REASON_INITIAL;
}
项目:transistor    文件:AdaptiveTrackSelection.java   
/**
 * @param bandwidthMeter Provides an estimate of the currently available bandwidth.
 * @param maxInitialBitrate The maximum bitrate in bits per second that should be assumed
 *     when a bandwidth estimate is unavailable.
 * @param minDurationForQualityIncreaseMs The minimum duration of buffered data required for
 *     the selected track to switch to one of higher quality.
 * @param maxDurationForQualityDecreaseMs The maximum duration of buffered data required for
 *     the selected track to switch to one of lower quality.
 * @param minDurationToRetainAfterDiscardMs When switching to a track of significantly higher
 *     quality, the selection may indicate that media already buffered at the lower quality can
 *     be discarded to speed up the switch. This is the minimum duration of media that must be
 *     retained at the lower quality.
 * @param bandwidthFraction The fraction of the available bandwidth that the selection should
 *     consider available for use. Setting to a value less than 1 is recommended to account
 *     for inaccuracies in the bandwidth estimator.
 */
public Factory(BandwidthMeter bandwidthMeter, int maxInitialBitrate,
    int minDurationForQualityIncreaseMs, int maxDurationForQualityDecreaseMs,
    int minDurationToRetainAfterDiscardMs, float bandwidthFraction) {
  this (bandwidthMeter, maxInitialBitrate, minDurationForQualityIncreaseMs,
      maxDurationForQualityDecreaseMs, minDurationToRetainAfterDiscardMs,
      bandwidthFraction, DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE);
}