Java 类com.google.android.exoplayer.dash.DashSegmentIndex 实例源码

项目:miku    文件:SegmentBase.java   
/**
 * @see DashSegmentIndex#getSegmentNum(long)
 */
public int getSegmentNum(long timeUs) {
  final int firstSegmentNum = getFirstSegmentNum();
  int lowIndex = firstSegmentNum;
  int highIndex = getLastSegmentNum();
  if (segmentTimeline == null) {
    // All segments are of equal duration (with the possible exception of the last one).
    long durationUs = (duration * C.MICROS_PER_SECOND) / timescale;
    int segmentNum = startNumber + (int) (timeUs / durationUs);
    // Ensure we stay within bounds.
    return segmentNum < lowIndex ? lowIndex
        : highIndex != DashSegmentIndex.INDEX_UNBOUNDED && segmentNum > highIndex ? highIndex
        : segmentNum;
  } else {
    // The high index cannot be unbounded. Identify the segment using binary search.
    while (lowIndex <= highIndex) {
      int midIndex = (lowIndex + highIndex) / 2;
      long midTimeUs = getSegmentTimeUs(midIndex);
      if (midTimeUs < timeUs) {
        lowIndex = midIndex + 1;
      } else if (midTimeUs > timeUs) {
        highIndex = midIndex - 1;
      } else {
        return midIndex;
      }
    }
    return lowIndex == firstSegmentNum ? lowIndex : highIndex;
  }
}
项目:miku    文件:SegmentBase.java   
@Override
public int getLastSegmentNum() {
  if (segmentTimeline != null) {
    return segmentTimeline.size() + startNumber - 1;
  } else if (periodDurationMs == -1) {
    return DashSegmentIndex.INDEX_UNBOUNDED;
  } else {
    long durationMs = (duration * 1000) / timescale;
    return startNumber + (int) Util.ceilDivide(periodDurationMs, durationMs) - 1;
  }
}
项目:ExoPlayer-Demo    文件:SegmentBase.java   
/**
 * @see DashSegmentIndex#getSegmentNum(long, long)
 */
public int getSegmentNum(long timeUs, long periodDurationUs) {
  final int firstSegmentNum = getFirstSegmentNum();
  int lowIndex = firstSegmentNum;
  int highIndex = getLastSegmentNum(periodDurationUs);
  if (segmentTimeline == null) {
    // All segments are of equal duration (with the possible exception of the last one).
    long durationUs = (duration * C.MICROS_PER_SECOND) / timescale;
    int segmentNum = startNumber + (int) (timeUs / durationUs);
    // Ensure we stay within bounds.
    return segmentNum < lowIndex ? lowIndex
        : highIndex != DashSegmentIndex.INDEX_UNBOUNDED && segmentNum > highIndex ? highIndex
        : segmentNum;
  } else {
    // The high index cannot be unbounded. Identify the segment using binary search.
    while (lowIndex <= highIndex) {
      int midIndex = (lowIndex + highIndex) / 2;
      long midTimeUs = getSegmentTimeUs(midIndex);
      if (midTimeUs < timeUs) {
        lowIndex = midIndex + 1;
      } else if (midTimeUs > timeUs) {
        highIndex = midIndex - 1;
      } else {
        return midIndex;
      }
    }
    return lowIndex == firstSegmentNum ? lowIndex : highIndex;
  }
}
项目:ExoPlayer-Demo    文件:SegmentBase.java   
@Override
public int getLastSegmentNum(long periodDurationUs) {
  if (segmentTimeline != null) {
    return segmentTimeline.size() + startNumber - 1;
  } else if (periodDurationUs == C.UNKNOWN_TIME_US) {
    return DashSegmentIndex.INDEX_UNBOUNDED;
  } else {
    long durationUs = (duration * C.MICROS_PER_SECOND) / timescale;
    return startNumber + (int) Util.ceilDivide(periodDurationUs, durationUs) - 1;
  }
}
项目:Exoplayer_VLC    文件:SegmentBase.java   
/**
 * @see DashSegmentIndex#getSegmentNum(long)
 */
public int getSegmentNum(long timeUs) {
  int lowIndex = getFirstSegmentNum();
  int highIndex = getLastSegmentNum();
  if (segmentTimeline == null) {
    // All segments are of equal duration (with the possible exception of the last one).
    long durationUs = (duration * C.MICROS_PER_SECOND) / timescale;
    int segmentNum = startNumber + (int) (timeUs / durationUs);
    // Ensure we stay within bounds.
    return segmentNum < lowIndex ? lowIndex
        : highIndex != DashSegmentIndex.INDEX_UNBOUNDED && segmentNum > highIndex ? highIndex
        : segmentNum;
  } else {
    // The high index cannot be unbounded. Identify the segment using binary search.
    while (lowIndex <= highIndex) {
      int midIndex = (lowIndex + highIndex) / 2;
      long midTimeUs = getSegmentTimeUs(midIndex);
      if (midTimeUs < timeUs) {
        lowIndex = midIndex + 1;
      } else if (midTimeUs > timeUs) {
        highIndex = midIndex - 1;
      } else {
        return midIndex;
      }
    }
    return lowIndex - 1;
  }
}
项目:Exoplayer_VLC    文件:SegmentBase.java   
@Override
public int getLastSegmentNum() {
  if (segmentTimeline != null) {
    return segmentTimeline.size() + startNumber - 1;
  } else if (periodDurationMs == -1) {
    return DashSegmentIndex.INDEX_UNBOUNDED;
  } else {
    long durationMs = (duration * 1000) / timescale;
    return startNumber + (int) ((periodDurationMs + durationMs - 1) / durationMs) - 1;
  }
}
项目:ExoPlayer    文件:SegmentBase.java   
/**
 * @see DashSegmentIndex#getSegmentNum(long)
 */
public int getSegmentNum(long timeUs) {
  final int firstSegmentNum = getFirstSegmentNum();
  int lowIndex = firstSegmentNum;
  int highIndex = getLastSegmentNum();
  if (segmentTimeline == null) {
    // All segments are of equal duration (with the possible exception of the last one).
    long durationUs = (duration * C.MICROS_PER_SECOND) / timescale;
    int segmentNum = startNumber + (int) (timeUs / durationUs);
    // Ensure we stay within bounds.
    return segmentNum < lowIndex ? lowIndex
        : highIndex != DashSegmentIndex.INDEX_UNBOUNDED && segmentNum > highIndex ? highIndex
        : segmentNum;
  } else {
    // The high index cannot be unbounded. Identify the segment using binary search.
    while (lowIndex <= highIndex) {
      int midIndex = (lowIndex + highIndex) / 2;
      long midTimeUs = getSegmentTimeUs(midIndex);
      if (midTimeUs < timeUs) {
        lowIndex = midIndex + 1;
      } else if (midTimeUs > timeUs) {
        highIndex = midIndex - 1;
      } else {
        return midIndex;
      }
    }
    return lowIndex == firstSegmentNum ? lowIndex : highIndex;
  }
}
项目:ExoPlayer    文件:SegmentBase.java   
@Override
public int getLastSegmentNum() {
  if (segmentTimeline != null) {
    return segmentTimeline.size() + startNumber - 1;
  } else if (periodDurationMs == -1) {
    return DashSegmentIndex.INDEX_UNBOUNDED;
  } else {
    long durationMs = (duration * 1000) / timescale;
    return startNumber + (int) Util.ceilDivide(periodDurationMs, durationMs) - 1;
  }
}
项目:miku    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return segmentIndex;
}
项目:miku    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return this;
}
项目:ExoPlayer-Demo    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return segmentIndex;
}
项目:ExoPlayer-Demo    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return this;
}
项目:android-exoplayer    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return null;
}
项目:android-exoplayer    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return this;
}
项目:Exoplayer_VLC    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return segmentIndex;
}
项目:Exoplayer_VLC    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return this;
}
项目:edx-app-android    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return null;
}
项目:edx-app-android    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return this;
}
项目:ExoPlayer    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return segmentIndex;
}
项目:ExoPlayer    文件:Representation.java   
@Override
public DashSegmentIndex getIndex() {
  return this;
}
项目:miku    文件:Representation.java   
/**
 * Gets a segment index, if the representation is able to provide one directly. Null if the
 * segment index is defined externally.
 *
 * @return The segment index, or null.
 */
public abstract DashSegmentIndex getIndex();
项目:ExoPlayer-Demo    文件:Representation.java   
/**
 * Gets a segment index, if the representation is able to provide one directly. Null if the
 * segment index is defined externally.
 *
 * @return The segment index, or null.
 */
public abstract DashSegmentIndex getIndex();
项目:android-exoplayer    文件:Representation.java   
/**
 * Gets a segment index, if the representation is able to provide one directly. Null if the
 * segment index is defined externally.
 *
 * @return The segment index, or null.
 */
public abstract DashSegmentIndex getIndex();
项目:Exoplayer_VLC    文件:Representation.java   
/**
 * Gets a segment index, if the representation is able to provide one directly. Null if the
 * segment index is defined externally.
 *
 * @return The segment index, or null.
 */
public abstract DashSegmentIndex getIndex();
项目:edx-app-android    文件:Representation.java   
/**
 * Gets a segment index, if the representation is able to provide one directly. Null if the
 * segment index is defined externally.
 *
 * @return The segment index, or null.
 */
public abstract DashSegmentIndex getIndex();
项目:ExoPlayer    文件:Representation.java   
/**
 * Gets a segment index, if the representation is able to provide one directly. Null if the
 * segment index is defined externally.
 *
 * @return The segment index, or null.
 */
public abstract DashSegmentIndex getIndex();