CrackMe.apk
Download file
package com.google.android.exoplayer2.source.hls;
import android.net.Uri;
import android.os.SystemClock;
import android.util.Pair;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.SeekParameters;
import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.source.BehindLiveWindowException;
import com.google.android.exoplayer2.source.TrackGroup;
import com.google.android.exoplayer2.source.chunk.BaseMediaChunkIterator;
import com.google.android.exoplayer2.source.chunk.Chunk;
import com.google.android.exoplayer2.source.chunk.DataChunk;
import com.google.android.exoplayer2.source.chunk.MediaChunk;
import com.google.android.exoplayer2.source.chunk.MediaChunkIterator;
import com.google.android.exoplayer2.source.hls.playlist.HlsMediaPlaylist;
import com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker;
import com.google.android.exoplayer2.trackselection.BaseTrackSelection;
import com.google.android.exoplayer2.trackselection.ExoTrackSelection;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DataSpec;
import com.google.android.exoplayer2.upstream.TransferListener;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.UriUtil;
import com.google.android.exoplayer2.util.Util;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.primitives.Ints;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
class HlsChunkSource {
public static final int CHUNK_PUBLICATION_STATE_PRELOAD = 0;
public static final int CHUNK_PUBLICATION_STATE_PUBLISHED = 1;
public static final int CHUNK_PUBLICATION_STATE_REMOVED = 2;
private static final int KEY_CACHE_SIZE = 4;
private final DataSource encryptionDataSource;
private Uri expectedPlaylistUrl;
private final HlsExtractorFactory extractorFactory;
private IOException fatalError;
private boolean independentSegments;
private boolean isTimestampMaster;
private final FullSegmentEncryptionKeyCache keyCache = new FullSegmentEncryptionKeyCache(4);
private long liveEdgeInPeriodTimeUs = C.TIME_UNSET;
private final DataSource mediaDataSource;
private final List<Format> muxedCaptionFormats;
private final PlayerId playerId;
private final Format[] playlistFormats;
private final HlsPlaylistTracker playlistTracker;
private final Uri[] playlistUrls;
private byte[] scratchSpace = Util.EMPTY_BYTE_ARRAY;
private boolean seenExpectedPlaylistError;
private final TimestampAdjusterProvider timestampAdjusterProvider;
private final TrackGroup trackGroup;
private ExoTrackSelection trackSelection;
public static final class HlsChunkHolder {
public Chunk chunk;
public boolean endOfStream;
public Uri playlistUrl;
public HlsChunkHolder() {
clear();
}
public void clear() {
this.chunk = null;
this.endOfStream = false;
this.playlistUrl = null;
}
}
public HlsChunkSource(HlsExtractorFactory hlsExtractorFactory, HlsPlaylistTracker hlsPlaylistTracker, Uri[] uriArr, Format[] formatArr, HlsDataSourceFactory hlsDataSourceFactory, TransferListener transferListener, TimestampAdjusterProvider timestampAdjusterProvider2, List<Format> list, PlayerId playerId2) {
this.extractorFactory = hlsExtractorFactory;
this.playlistTracker = hlsPlaylistTracker;
this.playlistUrls = uriArr;
this.playlistFormats = formatArr;
this.timestampAdjusterProvider = timestampAdjusterProvider2;
this.muxedCaptionFormats = list;
this.playerId = playerId2;
DataSource createDataSource = hlsDataSourceFactory.createDataSource(1);
this.mediaDataSource = createDataSource;
if (transferListener != null) {
createDataSource.addTransferListener(transferListener);
}
this.encryptionDataSource = hlsDataSourceFactory.createDataSource(3);
this.trackGroup = new TrackGroup(formatArr);
ArrayList arrayList = new ArrayList();
for (int i = 0; i < uriArr.length; i++) {
if ((formatArr[i].roleFlags & 16384) == 0) {
arrayList.add(Integer.valueOf(i));
}
}
this.trackSelection = new InitializationTrackSelection(this.trackGroup, Ints.toArray(arrayList));
}
public void maybeThrowError() throws IOException {
IOException iOException = this.fatalError;
if (iOException == null) {
Uri uri = this.expectedPlaylistUrl;
if (uri != null && this.seenExpectedPlaylistError) {
this.playlistTracker.maybeThrowPlaylistRefreshError(uri);
return;
}
return;
}
throw iOException;
}
public TrackGroup getTrackGroup() {
return this.trackGroup;
}
public void setTrackSelection(ExoTrackSelection exoTrackSelection) {
this.trackSelection = exoTrackSelection;
}
public ExoTrackSelection getTrackSelection() {
return this.trackSelection;
}
public void reset() {
this.fatalError = null;
}
public void setIsTimestampMaster(boolean z) {
this.isTimestampMaster = z;
}
public long getAdjustedSeekPositionUs(long j, SeekParameters seekParameters) {
int selectedIndex = this.trackSelection.getSelectedIndex();
Uri[] uriArr = this.playlistUrls;
HlsMediaPlaylist playlistSnapshot = (selectedIndex >= uriArr.length || selectedIndex == -1) ? null : this.playlistTracker.getPlaylistSnapshot(uriArr[this.trackSelection.getSelectedIndexInTrackGroup()], true);
if (playlistSnapshot == null || playlistSnapshot.segments.isEmpty() || !playlistSnapshot.hasIndependentSegments) {
return j;
}
long initialStartTimeUs = playlistSnapshot.startTimeUs - this.playlistTracker.getInitialStartTimeUs();
long j2 = j - initialStartTimeUs;
int binarySearchFloor = Util.binarySearchFloor(playlistSnapshot.segments, Long.valueOf(j2), true, true);
long j3 = playlistSnapshot.segments.get(binarySearchFloor).relativeStartTimeUs;
return seekParameters.resolveSeekPositionUs(j2, j3, binarySearchFloor != playlistSnapshot.segments.size() - 1 ? playlistSnapshot.segments.get(binarySearchFloor + 1).relativeStartTimeUs : j3) + initialStartTimeUs;
}
public int getChunkPublicationState(HlsMediaChunk hlsMediaChunk) {
List<HlsMediaPlaylist.Part> list;
if (hlsMediaChunk.partIndex == -1) {
return 1;
}
HlsMediaPlaylist hlsMediaPlaylist = (HlsMediaPlaylist) Assertions.checkNotNull(this.playlistTracker.getPlaylistSnapshot(this.playlistUrls[this.trackGroup.indexOf(hlsMediaChunk.trackFormat)], false));
int i = (int) (hlsMediaChunk.chunkIndex - hlsMediaPlaylist.mediaSequence);
if (i < 0) {
return 1;
}
if (i < hlsMediaPlaylist.segments.size()) {
list = hlsMediaPlaylist.segments.get(i).parts;
} else {
list = hlsMediaPlaylist.trailingParts;
}
if (hlsMediaChunk.partIndex >= list.size()) {
return 2;
}
HlsMediaPlaylist.Part part = list.get(hlsMediaChunk.partIndex);
if (part.isPreload) {
return 0;
}
if (Util.areEqual(Uri.parse(UriUtil.resolve(hlsMediaPlaylist.baseUri, part.url)), hlsMediaChunk.dataSpec.uri)) {
return 1;
}
return 2;
}
public void getNextChunk(long j, long j2, List<HlsMediaChunk> list, boolean z, HlsChunkHolder hlsChunkHolder) {
int i;
long j3;
Uri uri;
HlsMediaPlaylist hlsMediaPlaylist;
int i2;
long j4 = j2;
HlsChunkHolder hlsChunkHolder2 = hlsChunkHolder;
HlsMediaChunk hlsMediaChunk = list.isEmpty() ? null : (HlsMediaChunk) Iterables.getLast(list);
if (hlsMediaChunk == null) {
i = -1;
} else {
i = this.trackGroup.indexOf(hlsMediaChunk.trackFormat);
}
long j5 = j4 - j;
long resolveTimeToLiveEdgeUs = resolveTimeToLiveEdgeUs(j);
if (hlsMediaChunk != null && !this.independentSegments) {
long durationUs = hlsMediaChunk.getDurationUs();
j5 = Math.max(0, j5 - durationUs);
if (resolveTimeToLiveEdgeUs != C.TIME_UNSET) {
resolveTimeToLiveEdgeUs = Math.max(0, resolveTimeToLiveEdgeUs - durationUs);
}
}
this.trackSelection.updateSelectedTrack(j, j5, resolveTimeToLiveEdgeUs, list, createMediaChunkIterators(hlsMediaChunk, j4));
int selectedIndexInTrackGroup = this.trackSelection.getSelectedIndexInTrackGroup();
boolean z2 = i != selectedIndexInTrackGroup;
Uri uri2 = this.playlistUrls[selectedIndexInTrackGroup];
if (!this.playlistTracker.isSnapshotValid(uri2)) {
hlsChunkHolder2.playlistUrl = uri2;
this.seenExpectedPlaylistError &= uri2.equals(this.expectedPlaylistUrl);
this.expectedPlaylistUrl = uri2;
return;
}
HlsMediaPlaylist playlistSnapshot = this.playlistTracker.getPlaylistSnapshot(uri2, true);
Assertions.checkNotNull(playlistSnapshot);
this.independentSegments = playlistSnapshot.hasIndependentSegments;
updateLiveEdgeTimeUs(playlistSnapshot);
long initialStartTimeUs = playlistSnapshot.startTimeUs - this.playlistTracker.getInitialStartTimeUs();
HlsMediaPlaylist hlsMediaPlaylist2 = playlistSnapshot;
Uri uri3 = uri2;
int i3 = selectedIndexInTrackGroup;
Pair<Long, Integer> nextMediaSequenceAndPartIndex = getNextMediaSequenceAndPartIndex(hlsMediaChunk, z2, playlistSnapshot, initialStartTimeUs, j2);
long longValue = ((Long) nextMediaSequenceAndPartIndex.first).longValue();
int intValue = ((Integer) nextMediaSequenceAndPartIndex.second).intValue();
if (longValue >= playlistSnapshot.mediaSequence || hlsMediaChunk == null || !z2) {
hlsMediaPlaylist = playlistSnapshot;
j3 = initialStartTimeUs;
uri = uri3;
i2 = i3;
} else {
Uri uri4 = this.playlistUrls[i];
HlsMediaPlaylist playlistSnapshot2 = this.playlistTracker.getPlaylistSnapshot(uri4, true);
Assertions.checkNotNull(playlistSnapshot2);
j3 = playlistSnapshot2.startTimeUs - this.playlistTracker.getInitialStartTimeUs();
Pair<Long, Integer> nextMediaSequenceAndPartIndex2 = getNextMediaSequenceAndPartIndex(hlsMediaChunk, false, playlistSnapshot2, j3, j2);
longValue = ((Long) nextMediaSequenceAndPartIndex2.first).longValue();
intValue = ((Integer) nextMediaSequenceAndPartIndex2.second).intValue();
i2 = i;
uri = uri4;
hlsMediaPlaylist = playlistSnapshot2;
}
if (longValue < hlsMediaPlaylist.mediaSequence) {
this.fatalError = new BehindLiveWindowException();
return;
}
SegmentBaseHolder nextSegmentHolder = getNextSegmentHolder(hlsMediaPlaylist, longValue, intValue);
if (nextSegmentHolder == null) {
if (!hlsMediaPlaylist.hasEndTag) {
hlsChunkHolder2.playlistUrl = uri;
this.seenExpectedPlaylistError &= uri.equals(this.expectedPlaylistUrl);
this.expectedPlaylistUrl = uri;
return;
} else if (z || hlsMediaPlaylist.segments.isEmpty()) {
hlsChunkHolder2.endOfStream = true;
return;
} else {
nextSegmentHolder = new SegmentBaseHolder((HlsMediaPlaylist.SegmentBase) Iterables.getLast(hlsMediaPlaylist.segments), (hlsMediaPlaylist.mediaSequence + ((long) hlsMediaPlaylist.segments.size())) - 1, -1);
}
}
this.seenExpectedPlaylistError = false;
this.expectedPlaylistUrl = null;
Uri fullEncryptionKeyUri = getFullEncryptionKeyUri(hlsMediaPlaylist, nextSegmentHolder.segmentBase.initializationSegment);
hlsChunkHolder2.chunk = maybeCreateEncryptionChunkFor(fullEncryptionKeyUri, i2);
if (hlsChunkHolder2.chunk == null) {
Uri fullEncryptionKeyUri2 = getFullEncryptionKeyUri(hlsMediaPlaylist, nextSegmentHolder.segmentBase);
hlsChunkHolder2.chunk = maybeCreateEncryptionChunkFor(fullEncryptionKeyUri2, i2);
if (hlsChunkHolder2.chunk == null) {
boolean shouldSpliceIn = HlsMediaChunk.shouldSpliceIn(hlsMediaChunk, uri, hlsMediaPlaylist, nextSegmentHolder, j3);
if (!shouldSpliceIn || !nextSegmentHolder.isPreload) {
hlsChunkHolder2.chunk = HlsMediaChunk.createInstance(this.extractorFactory, this.mediaDataSource, this.playlistFormats[i2], j3, hlsMediaPlaylist, nextSegmentHolder, uri, this.muxedCaptionFormats, this.trackSelection.getSelectionReason(), this.trackSelection.getSelectionData(), this.isTimestampMaster, this.timestampAdjusterProvider, hlsMediaChunk, this.keyCache.get(fullEncryptionKeyUri2), this.keyCache.get(fullEncryptionKeyUri), shouldSpliceIn, this.playerId);
}
}
}
}
private static SegmentBaseHolder getNextSegmentHolder(HlsMediaPlaylist hlsMediaPlaylist, long j, int i) {
int i2 = (int) (j - hlsMediaPlaylist.mediaSequence);
if (i2 == hlsMediaPlaylist.segments.size()) {
if (i == -1) {
i = 0;
}
if (i < hlsMediaPlaylist.trailingParts.size()) {
return new SegmentBaseHolder(hlsMediaPlaylist.trailingParts.get(i), j, i);
}
return null;
}
HlsMediaPlaylist.Segment segment = hlsMediaPlaylist.segments.get(i2);
if (i == -1) {
return new SegmentBaseHolder(segment, j, -1);
}
if (i < segment.parts.size()) {
return new SegmentBaseHolder(segment.parts.get(i), j, i);
}
int i3 = i2 + 1;
if (i3 < hlsMediaPlaylist.segments.size()) {
return new SegmentBaseHolder(hlsMediaPlaylist.segments.get(i3), j + 1, -1);
}
if (!hlsMediaPlaylist.trailingParts.isEmpty()) {
return new SegmentBaseHolder(hlsMediaPlaylist.trailingParts.get(0), j + 1, 0);
}
return null;
}
public void onChunkLoadCompleted(Chunk chunk) {
if (chunk instanceof EncryptionKeyChunk) {
EncryptionKeyChunk encryptionKeyChunk = (EncryptionKeyChunk) chunk;
this.scratchSpace = encryptionKeyChunk.getDataHolder();
this.keyCache.put(encryptionKeyChunk.dataSpec.uri, (byte[]) Assertions.checkNotNull(encryptionKeyChunk.getResult()));
}
}
public boolean maybeExcludeTrack(Chunk chunk, long j) {
ExoTrackSelection exoTrackSelection = this.trackSelection;
return exoTrackSelection.blacklist(exoTrackSelection.indexOf(this.trackGroup.indexOf(chunk.trackFormat)), j);
}
public boolean onPlaylistError(Uri uri, long j) {
int indexOf;
int i = 0;
while (true) {
Uri[] uriArr = this.playlistUrls;
if (i >= uriArr.length) {
i = -1;
break;
} else if (uriArr[i].equals(uri)) {
break;
} else {
i++;
}
}
if (i == -1 || (indexOf = this.trackSelection.indexOf(i)) == -1) {
return true;
}
this.seenExpectedPlaylistError |= uri.equals(this.expectedPlaylistUrl);
if (j == C.TIME_UNSET || (this.trackSelection.blacklist(indexOf, j) && this.playlistTracker.excludeMediaPlaylist(uri, j))) {
return true;
}
return false;
}
public MediaChunkIterator[] createMediaChunkIterators(HlsMediaChunk hlsMediaChunk, long j) {
int i;
HlsMediaChunk hlsMediaChunk2 = hlsMediaChunk;
int indexOf = hlsMediaChunk2 == null ? -1 : this.trackGroup.indexOf(hlsMediaChunk2.trackFormat);
int length = this.trackSelection.length();
MediaChunkIterator[] mediaChunkIteratorArr = new MediaChunkIterator[length];
boolean z = false;
int i2 = 0;
while (i2 < length) {
int indexInTrackGroup = this.trackSelection.getIndexInTrackGroup(i2);
Uri uri = this.playlistUrls[indexInTrackGroup];
if (!this.playlistTracker.isSnapshotValid(uri)) {
mediaChunkIteratorArr[i2] = MediaChunkIterator.EMPTY;
i = i2;
} else {
HlsMediaPlaylist playlistSnapshot = this.playlistTracker.getPlaylistSnapshot(uri, z);
Assertions.checkNotNull(playlistSnapshot);
long initialStartTimeUs = playlistSnapshot.startTimeUs - this.playlistTracker.getInitialStartTimeUs();
i = i2;
Pair<Long, Integer> nextMediaSequenceAndPartIndex = getNextMediaSequenceAndPartIndex(hlsMediaChunk, indexInTrackGroup != indexOf, playlistSnapshot, initialStartTimeUs, j);
mediaChunkIteratorArr[i] = new HlsMediaPlaylistSegmentIterator(playlistSnapshot.baseUri, initialStartTimeUs, getSegmentBaseList(playlistSnapshot, ((Long) nextMediaSequenceAndPartIndex.first).longValue(), ((Integer) nextMediaSequenceAndPartIndex.second).intValue()));
}
i2 = i + 1;
z = false;
}
return mediaChunkIteratorArr;
}
public int getPreferredQueueSize(long j, List<? extends MediaChunk> list) {
if (this.fatalError != null || this.trackSelection.length() < 2) {
return list.size();
}
return this.trackSelection.evaluateQueueSize(j, list);
}
public boolean shouldCancelLoad(long j, Chunk chunk, List<? extends MediaChunk> list) {
if (this.fatalError != null) {
return false;
}
return this.trackSelection.shouldCancelChunkLoad(j, chunk, list);
}
static List<HlsMediaPlaylist.SegmentBase> getSegmentBaseList(HlsMediaPlaylist hlsMediaPlaylist, long j, int i) {
int i2 = (int) (j - hlsMediaPlaylist.mediaSequence);
if (i2 < 0 || hlsMediaPlaylist.segments.size() < i2) {
return ImmutableList.of();
}
ArrayList arrayList = new ArrayList();
int i3 = 0;
if (i2 < hlsMediaPlaylist.segments.size()) {
if (i != -1) {
HlsMediaPlaylist.Segment segment = hlsMediaPlaylist.segments.get(i2);
if (i == 0) {
arrayList.add(segment);
} else if (i < segment.parts.size()) {
arrayList.addAll(segment.parts.subList(i, segment.parts.size()));
}
i2++;
}
arrayList.addAll(hlsMediaPlaylist.segments.subList(i2, hlsMediaPlaylist.segments.size()));
i = 0;
}
if (hlsMediaPlaylist.partTargetDurationUs != C.TIME_UNSET) {
if (i != -1) {
i3 = i;
}
if (i3 < hlsMediaPlaylist.trailingParts.size()) {
arrayList.addAll(hlsMediaPlaylist.trailingParts.subList(i3, hlsMediaPlaylist.trailingParts.size()));
}
}
return Collections.unmodifiableList(arrayList);
}
public boolean obtainsChunksForPlaylist(Uri uri) {
return Util.contains(this.playlistUrls, uri);
}
private Pair<Long, Integer> getNextMediaSequenceAndPartIndex(HlsMediaChunk hlsMediaChunk, boolean z, HlsMediaPlaylist hlsMediaPlaylist, long j, long j2) {
List<HlsMediaPlaylist.Part> list;
long j3;
int i = -1;
if (hlsMediaChunk == null || z) {
long j4 = hlsMediaPlaylist.durationUs + j;
if (hlsMediaChunk != null && !this.independentSegments) {
j2 = hlsMediaChunk.startTimeUs;
}
if (!hlsMediaPlaylist.hasEndTag && j2 >= j4) {
return new Pair<>(Long.valueOf(hlsMediaPlaylist.mediaSequence + ((long) hlsMediaPlaylist.segments.size())), -1);
}
long j5 = j2 - j;
int i2 = 0;
int binarySearchFloor = Util.binarySearchFloor(hlsMediaPlaylist.segments, Long.valueOf(j5), true, !this.playlistTracker.isLive() || hlsMediaChunk == null);
long j6 = ((long) binarySearchFloor) + hlsMediaPlaylist.mediaSequence;
if (binarySearchFloor >= 0) {
HlsMediaPlaylist.Segment segment = hlsMediaPlaylist.segments.get(binarySearchFloor);
if (j5 < segment.relativeStartTimeUs + segment.durationUs) {
list = segment.parts;
} else {
list = hlsMediaPlaylist.trailingParts;
}
while (true) {
if (i2 >= list.size()) {
break;
}
HlsMediaPlaylist.Part part = list.get(i2);
if (j5 >= part.relativeStartTimeUs + part.durationUs) {
i2++;
} else if (part.isIndependent) {
j6 += list == hlsMediaPlaylist.trailingParts ? 1 : 0;
i = i2;
}
}
}
return new Pair<>(Long.valueOf(j6), Integer.valueOf(i));
} else if (!hlsMediaChunk.isLoadCompleted()) {
return new Pair<>(Long.valueOf(hlsMediaChunk.chunkIndex), Integer.valueOf(hlsMediaChunk.partIndex));
} else {
if (hlsMediaChunk.partIndex == -1) {
j3 = hlsMediaChunk.getNextChunkIndex();
} else {
j3 = hlsMediaChunk.chunkIndex;
}
Long valueOf = Long.valueOf(j3);
if (hlsMediaChunk.partIndex != -1) {
i = hlsMediaChunk.partIndex + 1;
}
return new Pair<>(valueOf, Integer.valueOf(i));
}
}
private long resolveTimeToLiveEdgeUs(long j) {
long j2 = this.liveEdgeInPeriodTimeUs;
return (j2 > C.TIME_UNSET ? 1 : (j2 == C.TIME_UNSET ? 0 : -1)) != 0 ? j2 - j : C.TIME_UNSET;
}
private void updateLiveEdgeTimeUs(HlsMediaPlaylist hlsMediaPlaylist) {
long j;
if (hlsMediaPlaylist.hasEndTag) {
j = C.TIME_UNSET;
} else {
j = hlsMediaPlaylist.getEndTimeUs() - this.playlistTracker.getInitialStartTimeUs();
}
this.liveEdgeInPeriodTimeUs = j;
}
private Chunk maybeCreateEncryptionChunkFor(Uri uri, int i) {
if (uri == null) {
return null;
}
byte[] remove = this.keyCache.remove(uri);
if (remove != null) {
this.keyCache.put(uri, remove);
return null;
}
return new EncryptionKeyChunk(this.encryptionDataSource, new DataSpec.Builder().setUri(uri).setFlags(1).build(), this.playlistFormats[i], this.trackSelection.getSelectionReason(), this.trackSelection.getSelectionData(), this.scratchSpace);
}
private static Uri getFullEncryptionKeyUri(HlsMediaPlaylist hlsMediaPlaylist, HlsMediaPlaylist.SegmentBase segmentBase) {
if (segmentBase == null || segmentBase.fullSegmentEncryptionKeyUri == null) {
return null;
}
return UriUtil.resolveToUri(hlsMediaPlaylist.baseUri, segmentBase.fullSegmentEncryptionKeyUri);
}
static final class SegmentBaseHolder {
public final boolean isPreload;
public final long mediaSequence;
public final int partIndex;
public final HlsMediaPlaylist.SegmentBase segmentBase;
public SegmentBaseHolder(HlsMediaPlaylist.SegmentBase segmentBase2, long j, int i) {
this.segmentBase = segmentBase2;
this.mediaSequence = j;
this.partIndex = i;
this.isPreload = (segmentBase2 instanceof HlsMediaPlaylist.Part) && ((HlsMediaPlaylist.Part) segmentBase2).isPreload;
}
}
private static final class InitializationTrackSelection extends BaseTrackSelection {
private int selectedIndex;
public Object getSelectionData() {
return null;
}
public int getSelectionReason() {
return 0;
}
public InitializationTrackSelection(TrackGroup trackGroup, int[] iArr) {
super(trackGroup, iArr);
this.selectedIndex = indexOf(trackGroup.getFormat(iArr[0]));
}
public void updateSelectedTrack(long j, long j2, long j3, List<? extends MediaChunk> list, MediaChunkIterator[] mediaChunkIteratorArr) {
long elapsedRealtime = SystemClock.elapsedRealtime();
if (isBlacklisted(this.selectedIndex, elapsedRealtime)) {
for (int i = this.length - 1; i >= 0; i--) {
if (!isBlacklisted(i, elapsedRealtime)) {
this.selectedIndex = i;
return;
}
}
throw new IllegalStateException();
}
}
public int getSelectedIndex() {
return this.selectedIndex;
}
}
private static final class EncryptionKeyChunk extends DataChunk {
private byte[] result;
public EncryptionKeyChunk(DataSource dataSource, DataSpec dataSpec, Format format, int i, Object obj, byte[] bArr) {
super(dataSource, dataSpec, 3, format, i, obj, bArr);
}
/* access modifiers changed from: protected */
public void consume(byte[] bArr, int i) {
this.result = Arrays.copyOf(bArr, i);
}
public byte[] getResult() {
return this.result;
}
}
static final class HlsMediaPlaylistSegmentIterator extends BaseMediaChunkIterator {
private final String playlistBaseUri;
private final List<HlsMediaPlaylist.SegmentBase> segmentBases;
private final long startOfPlaylistInPeriodUs;
public HlsMediaPlaylistSegmentIterator(String str, long j, List<HlsMediaPlaylist.SegmentBase> list) {
super(0, (long) (list.size() - 1));
this.playlistBaseUri = str;
this.startOfPlaylistInPeriodUs = j;
this.segmentBases = list;
}
public DataSpec getDataSpec() {
checkInBounds();
HlsMediaPlaylist.SegmentBase segmentBase = this.segmentBases.get((int) getCurrentIndex());
return new DataSpec(UriUtil.resolveToUri(this.playlistBaseUri, segmentBase.url), segmentBase.byteRangeOffset, segmentBase.byteRangeLength);
}
public long getChunkStartTimeUs() {
checkInBounds();
return this.startOfPlaylistInPeriodUs + this.segmentBases.get((int) getCurrentIndex()).relativeStartTimeUs;
}
public long getChunkEndTimeUs() {
checkInBounds();
HlsMediaPlaylist.SegmentBase segmentBase = this.segmentBases.get((int) getCurrentIndex());
return this.startOfPlaylistInPeriodUs + segmentBase.relativeStartTimeUs + segmentBase.durationUs;
}
}
}
Download file