Java Code Examples for com.google.android.exoplayer2.C#SELECTION_REASON_ADAPTIVE

The following examples show how to use com.google.android.exoplayer2.C#SELECTION_REASON_ADAPTIVE . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: BufferSizeAdaptationBuilder.java    From MediaSDK with Apache License 2.0 5 votes vote down vote up
@Override
public void updateSelectedTrack(
    long playbackPositionUs,
    long bufferedDurationUs,
    long availableDurationUs,
    List<? extends MediaChunk> queue,
    MediaChunkIterator[] mediaChunkIterators) {
  updateFormatBitrates(/* nowMs= */ clock.elapsedRealtime());

  // Make initial selection
  if (selectionReason == C.SELECTION_REASON_UNKNOWN) {
    selectionReason = C.SELECTION_REASON_INITIAL;
    selectedIndex = selectIdealIndexUsingBandwidth(/* isInitialSelection= */ true);
    return;
  }

  long bufferUs = getCurrentPeriodBufferedDurationUs(playbackPositionUs, bufferedDurationUs);
  int oldSelectedIndex = selectedIndex;
  if (isInSteadyState) {
    selectIndexSteadyState(bufferUs);
  } else {
    selectIndexStartUpPhase(bufferUs);
  }
  if (selectedIndex != oldSelectedIndex) {
    selectionReason = C.SELECTION_REASON_ADAPTIVE;
  }
}
 
Example 2
Source File: AdaptiveTrackSelection.java    From TelePlus-Android with GNU General Public License v2.0 5 votes vote down vote up
@Override
public void updateSelectedTrack(long playbackPositionUs, long bufferedDurationUs,
    long availableDurationUs) {
  long nowMs = clock.elapsedRealtime();
  // Stash the current selection, then make a new one.
  int currentSelectedIndex = selectedIndex;
  selectedIndex = determineIdealSelectedIndex(nowMs);
  if (selectedIndex == currentSelectedIndex) {
    return;
  }

  if (!isBlacklisted(currentSelectedIndex, nowMs)) {
    // Revert back to the current selection if conditions are not suitable for switching.
    Format currentFormat = getFormat(currentSelectedIndex);
    Format selectedFormat = getFormat(selectedIndex);
    if (selectedFormat.bitrate > currentFormat.bitrate
        && bufferedDurationUs < minDurationForQualityIncreaseUs(availableDurationUs)) {
      // The selected track is a higher quality, but we have insufficient buffer to safely switch
      // up. Defer switching up for now.
      selectedIndex = currentSelectedIndex;
    } else if (selectedFormat.bitrate < currentFormat.bitrate
        && bufferedDurationUs >= maxDurationForQualityDecreaseUs) {
      // The selected track is a lower quality, but we have sufficient buffer to defer switching
      // down for now.
      selectedIndex = currentSelectedIndex;
    }
  }
  // If we adapted, update the trigger.
  if (selectedIndex != currentSelectedIndex) {
    reason = C.SELECTION_REASON_ADAPTIVE;
  }
}
 
Example 3
Source File: AdaptiveTrackSelection.java    From TelePlus-Android with GNU General Public License v2.0 5 votes vote down vote up
@Override
public void updateSelectedTrack(long playbackPositionUs, long bufferedDurationUs,
    long availableDurationUs) {
  long nowMs = clock.elapsedRealtime();
  // Stash the current selection, then make a new one.
  int currentSelectedIndex = selectedIndex;
  selectedIndex = determineIdealSelectedIndex(nowMs);
  if (selectedIndex == currentSelectedIndex) {
    return;
  }

  if (!isBlacklisted(currentSelectedIndex, nowMs)) {
    // Revert back to the current selection if conditions are not suitable for switching.
    Format currentFormat = getFormat(currentSelectedIndex);
    Format selectedFormat = getFormat(selectedIndex);
    if (selectedFormat.bitrate > currentFormat.bitrate
        && bufferedDurationUs < minDurationForQualityIncreaseUs(availableDurationUs)) {
      // The selected track is a higher quality, but we have insufficient buffer to safely switch
      // up. Defer switching up for now.
      selectedIndex = currentSelectedIndex;
    } else if (selectedFormat.bitrate < currentFormat.bitrate
        && bufferedDurationUs >= maxDurationForQualityDecreaseUs) {
      // The selected track is a lower quality, but we have sufficient buffer to defer switching
      // down for now.
      selectedIndex = currentSelectedIndex;
    }
  }
  // If we adapted, update the trigger.
  if (selectedIndex != currentSelectedIndex) {
    reason = C.SELECTION_REASON_ADAPTIVE;
  }
}
 
Example 4
Source File: AdaptiveTrackSelection.java    From K-Sonic with MIT License 5 votes vote down vote up
@Override
public void updateSelectedTrack(long bufferedDurationUs) {
  long nowMs = SystemClock.elapsedRealtime();
  // Get the current and ideal selections.
  int currentSelectedIndex = selectedIndex;
  Format currentFormat = getSelectedFormat();
  int idealSelectedIndex = determineIdealSelectedIndex(nowMs);
  Format idealFormat = getFormat(idealSelectedIndex);
  // Assume we can switch to the ideal selection.
  selectedIndex = idealSelectedIndex;
  // Revert back to the current selection if conditions are not suitable for switching.
  if (currentFormat != null && !isBlacklisted(selectedIndex, nowMs)) {
    if (idealFormat.bitrate > currentFormat.bitrate
        && bufferedDurationUs < minDurationForQualityIncreaseUs) {
      // The ideal track is a higher quality, but we have insufficient buffer to safely switch
      // up. Defer switching up for now.
      selectedIndex = currentSelectedIndex;
    } else if (idealFormat.bitrate < currentFormat.bitrate
        && bufferedDurationUs >= maxDurationForQualityDecreaseUs) {
      // The ideal track is a lower quality, but we have sufficient buffer to defer switching
      // down for now.
      selectedIndex = currentSelectedIndex;
    }
  }
  // If we adapted, update the trigger.
  if (selectedIndex != currentSelectedIndex) {
    reason = C.SELECTION_REASON_ADAPTIVE;
  }
}
 
Example 5
Source File: BufferSizeAdaptationBuilder.java    From Telegram-FOSS with GNU General Public License v2.0 5 votes vote down vote up
@Override
public void updateSelectedTrack(
    long playbackPositionUs,
    long bufferedDurationUs,
    long availableDurationUs,
    List<? extends MediaChunk> queue,
    MediaChunkIterator[] mediaChunkIterators) {
  updateFormatBitrates(/* nowMs= */ clock.elapsedRealtime());

  // Make initial selection
  if (selectionReason == C.SELECTION_REASON_UNKNOWN) {
    selectionReason = C.SELECTION_REASON_INITIAL;
    selectedIndex = selectIdealIndexUsingBandwidth(/* isInitialSelection= */ true);
    return;
  }

  long bufferUs = getCurrentPeriodBufferedDurationUs(playbackPositionUs, bufferedDurationUs);
  int oldSelectedIndex = selectedIndex;
  if (isInSteadyState) {
    selectIndexSteadyState(bufferUs);
  } else {
    selectIndexStartUpPhase(bufferUs);
  }
  if (selectedIndex != oldSelectedIndex) {
    selectionReason = C.SELECTION_REASON_ADAPTIVE;
  }
}
 
Example 6
Source File: BufferSizeAdaptationBuilder.java    From Telegram with GNU General Public License v2.0 5 votes vote down vote up
@Override
public void updateSelectedTrack(
    long playbackPositionUs,
    long bufferedDurationUs,
    long availableDurationUs,
    List<? extends MediaChunk> queue,
    MediaChunkIterator[] mediaChunkIterators) {
  updateFormatBitrates(/* nowMs= */ clock.elapsedRealtime());

  // Make initial selection
  if (selectionReason == C.SELECTION_REASON_UNKNOWN) {
    selectionReason = C.SELECTION_REASON_INITIAL;
    selectedIndex = selectIdealIndexUsingBandwidth(/* isInitialSelection= */ true);
    return;
  }

  long bufferUs = getCurrentPeriodBufferedDurationUs(playbackPositionUs, bufferedDurationUs);
  int oldSelectedIndex = selectedIndex;
  if (isInSteadyState) {
    selectIndexSteadyState(bufferUs);
  } else {
    selectIndexStartUpPhase(bufferUs);
  }
  if (selectedIndex != oldSelectedIndex) {
    selectionReason = C.SELECTION_REASON_ADAPTIVE;
  }
}
 
Example 7
Source File: RandomTrackSelection.java    From MediaSDK with Apache License 2.0 4 votes vote down vote up
@Override
public int getSelectionReason() {
  return C.SELECTION_REASON_ADAPTIVE;
}
 
Example 8
Source File: AdaptiveTrackSelection.java    From MediaSDK with Apache License 2.0 4 votes vote down vote up
@Override
public void updateSelectedTrack(
    long playbackPositionUs,
    long bufferedDurationUs,
    long availableDurationUs,
    List<? extends MediaChunk> queue,
    MediaChunkIterator[] mediaChunkIterators) {
  long nowMs = clock.elapsedRealtime();

  // Make initial selection
  if (reason == C.SELECTION_REASON_UNKNOWN) {
    reason = C.SELECTION_REASON_INITIAL;
    selectedIndex = determineIdealSelectedIndex(nowMs);
    return;
  }

  // Stash the current selection, then make a new one.
  int currentSelectedIndex = selectedIndex;
  selectedIndex = determineIdealSelectedIndex(nowMs);
  if (selectedIndex == currentSelectedIndex) {
    return;
  }

  if (!isBlacklisted(currentSelectedIndex, nowMs)) {
    // Revert back to the current selection if conditions are not suitable for switching.
    Format currentFormat = getFormat(currentSelectedIndex);
    Format selectedFormat = getFormat(selectedIndex);
    if (selectedFormat.bitrate > currentFormat.bitrate
        && bufferedDurationUs < minDurationForQualityIncreaseUs(availableDurationUs)) {
      // The selected track is a higher quality, but we have insufficient buffer to safely switch
      // up. Defer switching up for now.
      selectedIndex = currentSelectedIndex;
    } else if (selectedFormat.bitrate < currentFormat.bitrate
        && bufferedDurationUs >= maxDurationForQualityDecreaseUs) {
      // The selected track is a lower quality, but we have sufficient buffer to defer switching
      // down for now.
      selectedIndex = currentSelectedIndex;
    }
  }
  // If we adapted, update the trigger.
  if (selectedIndex != currentSelectedIndex) {
    reason = C.SELECTION_REASON_ADAPTIVE;
  }
}
 
Example 9
Source File: RandomTrackSelection.java    From TelePlus-Android with GNU General Public License v2.0 4 votes vote down vote up
@Override
public int getSelectionReason() {
  return C.SELECTION_REASON_ADAPTIVE;
}
 
Example 10
Source File: RandomTrackSelection.java    From TelePlus-Android with GNU General Public License v2.0 4 votes vote down vote up
@Override
public int getSelectionReason() {
  return C.SELECTION_REASON_ADAPTIVE;
}
 
Example 11
Source File: RandomTrackSelection.java    From K-Sonic with MIT License 4 votes vote down vote up
@Override
public int getSelectionReason() {
  return C.SELECTION_REASON_ADAPTIVE;
}
 
Example 12
Source File: RandomTrackSelection.java    From Telegram-FOSS with GNU General Public License v2.0 4 votes vote down vote up
@Override
public int getSelectionReason() {
  return C.SELECTION_REASON_ADAPTIVE;
}
 
Example 13
Source File: AdaptiveTrackSelection.java    From Telegram-FOSS with GNU General Public License v2.0 4 votes vote down vote up
@Override
public void updateSelectedTrack(
    long playbackPositionUs,
    long bufferedDurationUs,
    long availableDurationUs,
    List<? extends MediaChunk> queue,
    MediaChunkIterator[] mediaChunkIterators) {
  long nowMs = clock.elapsedRealtime();

  // Update the estimated track bitrates.
  trackBitrateEstimator.getBitrates(formats, queue, mediaChunkIterators, trackBitrates);

  // Make initial selection
  if (reason == C.SELECTION_REASON_UNKNOWN) {
    reason = C.SELECTION_REASON_INITIAL;
    selectedIndex = determineIdealSelectedIndex(nowMs, trackBitrates);
    return;
  }

  // Stash the current selection, then make a new one.
  int currentSelectedIndex = selectedIndex;
  selectedIndex = determineIdealSelectedIndex(nowMs, trackBitrates);
  if (selectedIndex == currentSelectedIndex) {
    return;
  }

  if (!isBlacklisted(currentSelectedIndex, nowMs)) {
    // Revert back to the current selection if conditions are not suitable for switching.
    Format currentFormat = getFormat(currentSelectedIndex);
    Format selectedFormat = getFormat(selectedIndex);
    if (selectedFormat.bitrate > currentFormat.bitrate
        && bufferedDurationUs < minDurationForQualityIncreaseUs(availableDurationUs)) {
      // The selected track is a higher quality, but we have insufficient buffer to safely switch
      // up. Defer switching up for now.
      selectedIndex = currentSelectedIndex;
    } else if (selectedFormat.bitrate < currentFormat.bitrate
        && bufferedDurationUs >= maxDurationForQualityDecreaseUs) {
      // The selected track is a lower quality, but we have sufficient buffer to defer switching
      // down for now.
      selectedIndex = currentSelectedIndex;
    }
  }
  // If we adapted, update the trigger.
  if (selectedIndex != currentSelectedIndex) {
    reason = C.SELECTION_REASON_ADAPTIVE;
  }
}
 
Example 14
Source File: RandomTrackSelection.java    From Telegram with GNU General Public License v2.0 4 votes vote down vote up
@Override
public int getSelectionReason() {
  return C.SELECTION_REASON_ADAPTIVE;
}
 
Example 15
Source File: AdaptiveTrackSelection.java    From Telegram with GNU General Public License v2.0 4 votes vote down vote up
@Override
public void updateSelectedTrack(
    long playbackPositionUs,
    long bufferedDurationUs,
    long availableDurationUs,
    List<? extends MediaChunk> queue,
    MediaChunkIterator[] mediaChunkIterators) {
  long nowMs = clock.elapsedRealtime();

  // Update the estimated track bitrates.
  trackBitrateEstimator.getBitrates(formats, queue, mediaChunkIterators, trackBitrates);

  // Make initial selection
  if (reason == C.SELECTION_REASON_UNKNOWN) {
    reason = C.SELECTION_REASON_INITIAL;
    selectedIndex = determineIdealSelectedIndex(nowMs, trackBitrates);
    return;
  }

  // Stash the current selection, then make a new one.
  int currentSelectedIndex = selectedIndex;
  selectedIndex = determineIdealSelectedIndex(nowMs, trackBitrates);
  if (selectedIndex == currentSelectedIndex) {
    return;
  }

  if (!isBlacklisted(currentSelectedIndex, nowMs)) {
    // Revert back to the current selection if conditions are not suitable for switching.
    Format currentFormat = getFormat(currentSelectedIndex);
    Format selectedFormat = getFormat(selectedIndex);
    if (selectedFormat.bitrate > currentFormat.bitrate
        && bufferedDurationUs < minDurationForQualityIncreaseUs(availableDurationUs)) {
      // The selected track is a higher quality, but we have insufficient buffer to safely switch
      // up. Defer switching up for now.
      selectedIndex = currentSelectedIndex;
    } else if (selectedFormat.bitrate < currentFormat.bitrate
        && bufferedDurationUs >= maxDurationForQualityDecreaseUs) {
      // The selected track is a lower quality, but we have sufficient buffer to defer switching
      // down for now.
      selectedIndex = currentSelectedIndex;
    }
  }
  // If we adapted, update the trigger.
  if (selectedIndex != currentSelectedIndex) {
    reason = C.SELECTION_REASON_ADAPTIVE;
  }
}