欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Java TimeRange 类用法示例

最编程 2024-04-29 15:50:21
...

实例1: enable

import com.google.android.exoplayer.TimeRange; //导入依赖的package包/类
@Override
public void enable() {
  fatalError = null;
  formatEvaluator.enable();
  if (manifestFetcher != null) {
    manifestFetcher.enable();
  }
  DashSegmentIndex segmentIndex =
      representationHolders.get(formats[0].id).representation.getIndex();
  if (segmentIndex == null) {
    seekRange = new TimeRange(TimeRange.TYPE_SNAPSHOT, 0, currentManifest.duration * 1000);
    notifySeekRangeChanged(seekRange);
  } else {
    long nowUs = getNowUs();
    updateAvailableSegmentBounds(segmentIndex, nowUs);
    updateSeekRange(segmentIndex, nowUs);
  }
}
 

实例2: getAvailableRange

import com.google.android.exoplayer.TimeRange; //导入依赖的package包/类
private TimeRange getAvailableRange(long nowUnixTimeUs) {
  PeriodHolder firstPeriod = periodHolders.valueAt(0);
  PeriodHolder lastPeriod = periodHolders.valueAt(periodHolders.size() - 1);

  if (!currentManifest.dynamic || lastPeriod.isIndexExplicit()) {
    return new StaticTimeRange(firstPeriod.getAvailableStartTimeUs(),
        lastPeriod.getAvailableEndTimeUs());
  }

  long minStartPositionUs = firstPeriod.getAvailableStartTimeUs();
  long maxEndPositionUs = lastPeriod.isIndexUnbounded() ? Long.MAX_VALUE
      : lastPeriod.getAvailableEndTimeUs();
  long elapsedRealtimeAtZeroUs = (systemClock.elapsedRealtime() * 1000)
      - (nowUnixTimeUs - (currentManifest.availabilityStartTime * 1000));
  long timeShiftBufferDepthUs = currentManifest.timeShiftBufferDepth == -1 ? -1
      : currentManifest.timeShiftBufferDepth * 1000;
  return new DynamicTimeRange(minStartPositionUs, maxEndPositionUs, elapsedRealtimeAtZeroUs,
      timeShiftBufferDepthUs, systemClock);
}
 

实例3: updateSeekRange

import com.google.android.exoplayer.TimeRange; //导入依赖的package包/类
private void updateSeekRange(DashSegmentIndex segmentIndex, long nowUs) {
  long earliestSeekPosition = segmentIndex.getTimeUs(firstAvailableSegmentNum);
  long latestSeekPosition = segmentIndex.getTimeUs(lastAvailableSegmentNum)
      + segmentIndex.getDurationUs(lastAvailableSegmentNum);
  if (currentManifest.dynamic) {
    long liveEdgeTimestampUs;
    if (segmentIndex.getLastSegmentNum() == DashSegmentIndex.INDEX_UNBOUNDED) {
      liveEdgeTimestampUs = nowUs - currentManifest.availabilityStartTime * 1000;
    } else {
      liveEdgeTimestampUs = segmentIndex.getTimeUs(segmentIndex.getLastSegmentNum())
          + segmentIndex.getDurationUs(segmentIndex.getLastSegmentNum());
      if (!segmentIndex.isExplicit()) {
        // Some segments defined by the index may not be available yet. Bound the calculated live
        // edge based on the elapsed time since the manifest became available.
        liveEdgeTimestampUs = Math.min(liveEdgeTimestampUs,
            nowUs - currentManifest.availabilityStartTime * 1000);
      }
    }

    // it's possible that the live edge latency actually puts our latest position before
    // the earliest position in the case of a DVR-like stream that's just starting up, so
    // in that case just return the earliest position instead
    latestSeekPosition = Math.max(earliestSeekPosition, liveEdgeTimestampUs - liveEdgeLatencyUs);
  }

  TimeRange newSeekRange = new TimeRange(TimeRange.TYPE_SNAPSHOT, earliestSeekPosition,
      latestSeekPosition);
  if (seekRange == null || !seekRange.equals(newSeekRange)) {
    seekRange = newSeekRange;
    notifySeekRangeChanged(seekRange);
  }
}
 

推荐阅读