CrackMe.apk
Download file
package com.google.android.exoplayer2.source.hls;
import android.os.Looper;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.drm.DefaultDrmSessionManagerProvider;
import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.drm.DrmSessionManagerProvider;
import com.google.android.exoplayer2.offline.StreamKey;
import com.google.android.exoplayer2.source.BaseMediaSource;
import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.MediaSourceEventListener;
import com.google.android.exoplayer2.source.MediaSourceFactory;
import com.google.android.exoplayer2.source.SinglePeriodTimeline;
import com.google.android.exoplayer2.source.hls.playlist.DefaultHlsPlaylistParserFactory;
import com.google.android.exoplayer2.source.hls.playlist.DefaultHlsPlaylistTracker;
import com.google.android.exoplayer2.source.hls.playlist.FilteringHlsPlaylistParserFactory;
import com.google.android.exoplayer2.source.hls.playlist.HlsMediaPlaylist;
import com.google.android.exoplayer2.source.hls.playlist.HlsMultivariantPlaylist;
import com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParserFactory;
import com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker;
import com.google.android.exoplayer2.upstream.Allocator;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy;
import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy;
import com.google.android.exoplayer2.upstream.TransferListener;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Util;
import java.io.IOException;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.List;
public final class HlsMediaSource extends BaseMediaSource implements HlsPlaylistTracker.PrimaryPlaylistListener {
public static final int METADATA_TYPE_EMSG = 3;
public static final int METADATA_TYPE_ID3 = 1;
private final boolean allowChunklessPreparation;
private final CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory;
private final HlsDataSourceFactory dataSourceFactory;
private final DrmSessionManager drmSessionManager;
private final long elapsedRealTimeOffsetMs;
private final HlsExtractorFactory extractorFactory;
private MediaItem.LiveConfiguration liveConfiguration;
private final LoadErrorHandlingPolicy loadErrorHandlingPolicy;
private final MediaItem.LocalConfiguration localConfiguration;
private final MediaItem mediaItem;
private TransferListener mediaTransferListener;
private final int metadataType;
private final HlsPlaylistTracker playlistTracker;
private final boolean useSessionKeys;
@Documented
@Target({ElementType.TYPE_USE})
@Retention(RetentionPolicy.SOURCE)
public @interface MetadataType {
}
static {
ExoPlayerLibraryInfo.registerModule("goog.exo.hls");
}
public static final class Factory implements MediaSourceFactory {
private boolean allowChunklessPreparation;
private CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory;
private DrmSessionManagerProvider drmSessionManagerProvider;
private long elapsedRealTimeOffsetMs;
private HlsExtractorFactory extractorFactory;
private final HlsDataSourceFactory hlsDataSourceFactory;
private LoadErrorHandlingPolicy loadErrorHandlingPolicy;
private int metadataType;
private HlsPlaylistParserFactory playlistParserFactory;
private HlsPlaylistTracker.Factory playlistTrackerFactory;
private boolean useSessionKeys;
public int[] getSupportedTypes() {
return new int[]{2};
}
public Factory(DataSource.Factory factory) {
this((HlsDataSourceFactory) new DefaultHlsDataSourceFactory(factory));
}
public Factory(HlsDataSourceFactory hlsDataSourceFactory2) {
this.hlsDataSourceFactory = (HlsDataSourceFactory) Assertions.checkNotNull(hlsDataSourceFactory2);
this.drmSessionManagerProvider = new DefaultDrmSessionManagerProvider();
this.playlistParserFactory = new DefaultHlsPlaylistParserFactory();
this.playlistTrackerFactory = DefaultHlsPlaylistTracker.FACTORY;
this.extractorFactory = HlsExtractorFactory.DEFAULT;
this.loadErrorHandlingPolicy = new DefaultLoadErrorHandlingPolicy();
this.compositeSequenceableLoaderFactory = new DefaultCompositeSequenceableLoaderFactory();
this.metadataType = 1;
this.elapsedRealTimeOffsetMs = C.TIME_UNSET;
this.allowChunklessPreparation = true;
}
public Factory setExtractorFactory(HlsExtractorFactory hlsExtractorFactory) {
if (hlsExtractorFactory == null) {
hlsExtractorFactory = HlsExtractorFactory.DEFAULT;
}
this.extractorFactory = hlsExtractorFactory;
return this;
}
public Factory setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy loadErrorHandlingPolicy2) {
this.loadErrorHandlingPolicy = (LoadErrorHandlingPolicy) Assertions.checkNotNull(loadErrorHandlingPolicy2, "MediaSource.Factory#setLoadErrorHandlingPolicy no longer handles null by instantiating a new DefaultLoadErrorHandlingPolicy. Explicitly construct and pass an instance in order to retain the old behavior.");
return this;
}
public Factory setPlaylistParserFactory(HlsPlaylistParserFactory hlsPlaylistParserFactory) {
this.playlistParserFactory = (HlsPlaylistParserFactory) Assertions.checkNotNull(hlsPlaylistParserFactory, "HlsMediaSource.Factory#setPlaylistParserFactory no longer handles null by instantiating a new DefaultHlsPlaylistParserFactory. Explicitly construct and pass an instance in order to retain the old behavior.");
return this;
}
public Factory setPlaylistTrackerFactory(HlsPlaylistTracker.Factory factory) {
this.playlistTrackerFactory = (HlsPlaylistTracker.Factory) Assertions.checkNotNull(factory, "HlsMediaSource.Factory#setPlaylistTrackerFactory no longer handles null by defaulting to DefaultHlsPlaylistTracker.FACTORY. Explicitly pass a reference to this instance in order to retain the old behavior.");
return this;
}
public Factory setCompositeSequenceableLoaderFactory(CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory2) {
this.compositeSequenceableLoaderFactory = (CompositeSequenceableLoaderFactory) Assertions.checkNotNull(compositeSequenceableLoaderFactory2, "HlsMediaSource.Factory#setCompositeSequenceableLoaderFactory no longer handles null by instantiating a new DefaultCompositeSequenceableLoaderFactory. Explicitly construct and pass an instance in order to retain the old behavior.");
return this;
}
public Factory setAllowChunklessPreparation(boolean z) {
this.allowChunklessPreparation = z;
return this;
}
public Factory setMetadataType(int i) {
this.metadataType = i;
return this;
}
public Factory setUseSessionKeys(boolean z) {
this.useSessionKeys = z;
return this;
}
public Factory setDrmSessionManagerProvider(DrmSessionManagerProvider drmSessionManagerProvider2) {
this.drmSessionManagerProvider = (DrmSessionManagerProvider) Assertions.checkNotNull(drmSessionManagerProvider2, "MediaSource.Factory#setDrmSessionManagerProvider no longer handles null by instantiating a new DefaultDrmSessionManagerProvider. Explicitly construct and pass an instance in order to retain the old behavior.");
return this;
}
/* access modifiers changed from: package-private */
public Factory setElapsedRealTimeOffsetMs(long j) {
this.elapsedRealTimeOffsetMs = j;
return this;
}
public HlsMediaSource createMediaSource(MediaItem mediaItem) {
MediaItem mediaItem2 = mediaItem;
Assertions.checkNotNull(mediaItem2.localConfiguration);
HlsPlaylistParserFactory hlsPlaylistParserFactory = this.playlistParserFactory;
List<StreamKey> list = mediaItem2.localConfiguration.streamKeys;
if (!list.isEmpty()) {
hlsPlaylistParserFactory = new FilteringHlsPlaylistParserFactory(hlsPlaylistParserFactory, list);
}
HlsDataSourceFactory hlsDataSourceFactory2 = this.hlsDataSourceFactory;
HlsExtractorFactory hlsExtractorFactory = this.extractorFactory;
CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory2 = this.compositeSequenceableLoaderFactory;
DrmSessionManager drmSessionManager = this.drmSessionManagerProvider.get(mediaItem2);
LoadErrorHandlingPolicy loadErrorHandlingPolicy2 = this.loadErrorHandlingPolicy;
return new HlsMediaSource(mediaItem, hlsDataSourceFactory2, hlsExtractorFactory, compositeSequenceableLoaderFactory2, drmSessionManager, loadErrorHandlingPolicy2, this.playlistTrackerFactory.createTracker(this.hlsDataSourceFactory, loadErrorHandlingPolicy2, hlsPlaylistParserFactory), this.elapsedRealTimeOffsetMs, this.allowChunklessPreparation, this.metadataType, this.useSessionKeys);
}
}
private HlsMediaSource(MediaItem mediaItem2, HlsDataSourceFactory hlsDataSourceFactory, HlsExtractorFactory hlsExtractorFactory, CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory2, DrmSessionManager drmSessionManager2, LoadErrorHandlingPolicy loadErrorHandlingPolicy2, HlsPlaylistTracker hlsPlaylistTracker, long j, boolean z, int i, boolean z2) {
this.localConfiguration = (MediaItem.LocalConfiguration) Assertions.checkNotNull(mediaItem2.localConfiguration);
this.mediaItem = mediaItem2;
this.liveConfiguration = mediaItem2.liveConfiguration;
this.dataSourceFactory = hlsDataSourceFactory;
this.extractorFactory = hlsExtractorFactory;
this.compositeSequenceableLoaderFactory = compositeSequenceableLoaderFactory2;
this.drmSessionManager = drmSessionManager2;
this.loadErrorHandlingPolicy = loadErrorHandlingPolicy2;
this.playlistTracker = hlsPlaylistTracker;
this.elapsedRealTimeOffsetMs = j;
this.allowChunklessPreparation = z;
this.metadataType = i;
this.useSessionKeys = z2;
}
public MediaItem getMediaItem() {
return this.mediaItem;
}
/* access modifiers changed from: protected */
public void prepareSourceInternal(TransferListener transferListener) {
this.mediaTransferListener = transferListener;
this.drmSessionManager.prepare();
this.drmSessionManager.setPlayer((Looper) Assertions.checkNotNull(Looper.myLooper()), getPlayerId());
this.playlistTracker.start(this.localConfiguration.uri, createEventDispatcher((MediaSource.MediaPeriodId) null), this);
}
public void maybeThrowSourceInfoRefreshError() throws IOException {
this.playlistTracker.maybeThrowPrimaryPlaylistRefreshError();
}
public MediaPeriod createPeriod(MediaSource.MediaPeriodId mediaPeriodId, Allocator allocator, long j) {
MediaSourceEventListener.EventDispatcher createEventDispatcher = createEventDispatcher(mediaPeriodId);
return new HlsMediaPeriod(this.extractorFactory, this.playlistTracker, this.dataSourceFactory, this.mediaTransferListener, this.drmSessionManager, createDrmEventDispatcher(mediaPeriodId), this.loadErrorHandlingPolicy, createEventDispatcher, allocator, this.compositeSequenceableLoaderFactory, this.allowChunklessPreparation, this.metadataType, this.useSessionKeys, getPlayerId());
}
public void releasePeriod(MediaPeriod mediaPeriod) {
((HlsMediaPeriod) mediaPeriod).release();
}
/* access modifiers changed from: protected */
public void releaseSourceInternal() {
this.playlistTracker.stop();
this.drmSessionManager.release();
}
public void onPrimaryPlaylistRefreshed(HlsMediaPlaylist hlsMediaPlaylist) {
SinglePeriodTimeline singlePeriodTimeline;
long usToMs = hlsMediaPlaylist.hasProgramDateTime ? Util.usToMs(hlsMediaPlaylist.startTimeUs) : -9223372036854775807L;
long j = (hlsMediaPlaylist.playlistType == 2 || hlsMediaPlaylist.playlistType == 1) ? usToMs : -9223372036854775807L;
HlsManifest hlsManifest = new HlsManifest((HlsMultivariantPlaylist) Assertions.checkNotNull(this.playlistTracker.getMultivariantPlaylist()), hlsMediaPlaylist);
if (this.playlistTracker.isLive()) {
singlePeriodTimeline = createTimelineForLive(hlsMediaPlaylist, j, usToMs, hlsManifest);
} else {
singlePeriodTimeline = createTimelineForOnDemand(hlsMediaPlaylist, j, usToMs, hlsManifest);
}
refreshSourceInfo(singlePeriodTimeline);
}
private SinglePeriodTimeline createTimelineForLive(HlsMediaPlaylist hlsMediaPlaylist, long j, long j2, HlsManifest hlsManifest) {
long j3;
HlsMediaPlaylist hlsMediaPlaylist2 = hlsMediaPlaylist;
long initialStartTimeUs = hlsMediaPlaylist2.startTimeUs - this.playlistTracker.getInitialStartTimeUs();
long j4 = hlsMediaPlaylist2.hasEndTag ? initialStartTimeUs + hlsMediaPlaylist2.durationUs : -9223372036854775807L;
long liveEdgeOffsetUs = getLiveEdgeOffsetUs(hlsMediaPlaylist);
if (this.liveConfiguration.targetOffsetMs != C.TIME_UNSET) {
j3 = Util.msToUs(this.liveConfiguration.targetOffsetMs);
} else {
j3 = getTargetLiveOffsetUs(hlsMediaPlaylist2, liveEdgeOffsetUs);
}
updateLiveConfiguration(hlsMediaPlaylist2, Util.constrainValue(j3, liveEdgeOffsetUs, hlsMediaPlaylist2.durationUs + liveEdgeOffsetUs));
return new SinglePeriodTimeline(j, j2, C.TIME_UNSET, j4, hlsMediaPlaylist2.durationUs, initialStartTimeUs, getLiveWindowDefaultStartPositionUs(hlsMediaPlaylist2, liveEdgeOffsetUs), true, !hlsMediaPlaylist2.hasEndTag, hlsMediaPlaylist2.playlistType == 2 && hlsMediaPlaylist2.hasPositiveStartOffset, hlsManifest, this.mediaItem, this.liveConfiguration);
}
private SinglePeriodTimeline createTimelineForOnDemand(HlsMediaPlaylist hlsMediaPlaylist, long j, long j2, HlsManifest hlsManifest) {
HlsMediaPlaylist hlsMediaPlaylist2 = hlsMediaPlaylist;
return new SinglePeriodTimeline(j, j2, C.TIME_UNSET, hlsMediaPlaylist2.durationUs, hlsMediaPlaylist2.durationUs, 0, (hlsMediaPlaylist2.startOffsetUs == C.TIME_UNSET || hlsMediaPlaylist2.segments.isEmpty()) ? 0 : (hlsMediaPlaylist2.preciseStart || hlsMediaPlaylist2.startOffsetUs == hlsMediaPlaylist2.durationUs) ? hlsMediaPlaylist2.startOffsetUs : findClosestPrecedingSegment(hlsMediaPlaylist2.segments, hlsMediaPlaylist2.startOffsetUs).relativeStartTimeUs, true, false, true, hlsManifest, this.mediaItem, (MediaItem.LiveConfiguration) null);
}
private long getLiveEdgeOffsetUs(HlsMediaPlaylist hlsMediaPlaylist) {
if (hlsMediaPlaylist.hasProgramDateTime) {
return Util.msToUs(Util.getNowUnixTimeMs(this.elapsedRealTimeOffsetMs)) - hlsMediaPlaylist.getEndTimeUs();
}
return 0;
}
private long getLiveWindowDefaultStartPositionUs(HlsMediaPlaylist hlsMediaPlaylist, long j) {
long j2;
if (hlsMediaPlaylist.startOffsetUs != C.TIME_UNSET) {
j2 = hlsMediaPlaylist.startOffsetUs;
} else {
j2 = (hlsMediaPlaylist.durationUs + j) - Util.msToUs(this.liveConfiguration.targetOffsetMs);
}
if (hlsMediaPlaylist.preciseStart) {
return j2;
}
HlsMediaPlaylist.Part findClosestPrecedingIndependentPart = findClosestPrecedingIndependentPart(hlsMediaPlaylist.trailingParts, j2);
if (findClosestPrecedingIndependentPart != null) {
return findClosestPrecedingIndependentPart.relativeStartTimeUs;
}
if (hlsMediaPlaylist.segments.isEmpty()) {
return 0;
}
HlsMediaPlaylist.Segment findClosestPrecedingSegment = findClosestPrecedingSegment(hlsMediaPlaylist.segments, j2);
HlsMediaPlaylist.Part findClosestPrecedingIndependentPart2 = findClosestPrecedingIndependentPart(findClosestPrecedingSegment.parts, j2);
if (findClosestPrecedingIndependentPart2 != null) {
return findClosestPrecedingIndependentPart2.relativeStartTimeUs;
}
return findClosestPrecedingSegment.relativeStartTimeUs;
}
private void updateLiveConfiguration(HlsMediaPlaylist hlsMediaPlaylist, long j) {
float f;
boolean z = this.mediaItem.liveConfiguration.minPlaybackSpeed == -3.4028235E38f && this.mediaItem.liveConfiguration.maxPlaybackSpeed == -3.4028235E38f && hlsMediaPlaylist.serverControl.holdBackUs == C.TIME_UNSET && hlsMediaPlaylist.serverControl.partHoldBackUs == C.TIME_UNSET;
MediaItem.LiveConfiguration.Builder targetOffsetMs = new MediaItem.LiveConfiguration.Builder().setTargetOffsetMs(Util.usToMs(j));
float f2 = 1.0f;
if (z) {
f = 1.0f;
} else {
f = this.liveConfiguration.minPlaybackSpeed;
}
MediaItem.LiveConfiguration.Builder minPlaybackSpeed = targetOffsetMs.setMinPlaybackSpeed(f);
if (!z) {
f2 = this.liveConfiguration.maxPlaybackSpeed;
}
this.liveConfiguration = minPlaybackSpeed.setMaxPlaybackSpeed(f2).build();
}
private static long getTargetLiveOffsetUs(HlsMediaPlaylist hlsMediaPlaylist, long j) {
long j2;
HlsMediaPlaylist.ServerControl serverControl = hlsMediaPlaylist.serverControl;
if (hlsMediaPlaylist.startOffsetUs != C.TIME_UNSET) {
j2 = hlsMediaPlaylist.durationUs - hlsMediaPlaylist.startOffsetUs;
} else if (serverControl.partHoldBackUs != C.TIME_UNSET && hlsMediaPlaylist.partTargetDurationUs != C.TIME_UNSET) {
j2 = serverControl.partHoldBackUs;
} else if (serverControl.holdBackUs != C.TIME_UNSET) {
j2 = serverControl.holdBackUs;
} else {
j2 = 3 * hlsMediaPlaylist.targetDurationUs;
}
return j2 + j;
}
private static HlsMediaPlaylist.Part findClosestPrecedingIndependentPart(List<HlsMediaPlaylist.Part> list, long j) {
HlsMediaPlaylist.Part part = null;
for (int i = 0; i < list.size(); i++) {
HlsMediaPlaylist.Part part2 = list.get(i);
if (part2.relativeStartTimeUs <= j && part2.isIndependent) {
part = part2;
} else if (part2.relativeStartTimeUs > j) {
break;
}
}
return part;
}
private static HlsMediaPlaylist.Segment findClosestPrecedingSegment(List<HlsMediaPlaylist.Segment> list, long j) {
return list.get(Util.binarySearchFloor(list, Long.valueOf(j), true, true));
}
}
Download file