CrackMe.apk
Download file
package com.google.android.exoplayer2.source.dash;
import android.os.Handler;
import android.os.Message;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.FormatHolder;
import com.google.android.exoplayer2.ParserException;
import com.google.android.exoplayer2.extractor.TrackOutput;
import com.google.android.exoplayer2.metadata.Metadata;
import com.google.android.exoplayer2.metadata.MetadataInputBuffer;
import com.google.android.exoplayer2.metadata.emsg.EventMessage;
import com.google.android.exoplayer2.metadata.emsg.EventMessageDecoder;
import com.google.android.exoplayer2.metadata.icy.IcyHeaders;
import com.google.android.exoplayer2.source.SampleQueue;
import com.google.android.exoplayer2.source.chunk.Chunk;
import com.google.android.exoplayer2.source.dash.manifest.DashManifest;
import com.google.android.exoplayer2.upstream.Allocator;
import com.google.android.exoplayer2.upstream.DataReader;
import com.google.android.exoplayer2.util.ParsableByteArray;
import com.google.android.exoplayer2.util.Util;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
public final class PlayerEmsgHandler implements Handler.Callback {
private static final int EMSG_MANIFEST_EXPIRED = 1;
private final Allocator allocator;
private boolean chunkLoadedCompletedSinceLastManifestRefreshRequest;
/* access modifiers changed from: private */
public final EventMessageDecoder decoder = new EventMessageDecoder();
private long expiredManifestPublishTimeUs;
/* access modifiers changed from: private */
public final Handler handler = Util.createHandlerForCurrentLooper(this);
private boolean isWaitingForManifestRefresh;
private DashManifest manifest;
private final TreeMap<Long, Long> manifestPublishTimeToExpiryTimeUs = new TreeMap<>();
private final PlayerEmsgCallback playerEmsgCallback;
private boolean released;
public interface PlayerEmsgCallback {
void onDashManifestPublishTimeExpired(long j);
void onDashManifestRefreshRequested();
}
public PlayerEmsgHandler(DashManifest dashManifest, PlayerEmsgCallback playerEmsgCallback2, Allocator allocator2) {
this.manifest = dashManifest;
this.playerEmsgCallback = playerEmsgCallback2;
this.allocator = allocator2;
}
public void updateManifest(DashManifest dashManifest) {
this.isWaitingForManifestRefresh = false;
this.expiredManifestPublishTimeUs = C.TIME_UNSET;
this.manifest = dashManifest;
removePreviouslyExpiredManifestPublishTimeValues();
}
public PlayerTrackEmsgHandler newPlayerTrackEmsgHandler() {
return new PlayerTrackEmsgHandler(this.allocator);
}
public void release() {
this.released = true;
this.handler.removeCallbacksAndMessages((Object) null);
}
public boolean handleMessage(Message message) {
if (this.released) {
return true;
}
if (message.what != 1) {
return false;
}
ManifestExpiryEventInfo manifestExpiryEventInfo = (ManifestExpiryEventInfo) message.obj;
handleManifestExpiredMessage(manifestExpiryEventInfo.eventTimeUs, manifestExpiryEventInfo.manifestPublishTimeMsInEmsg);
return true;
}
/* access modifiers changed from: package-private */
public boolean maybeRefreshManifestBeforeLoadingNextChunk(long j) {
boolean z = false;
if (!this.manifest.dynamic) {
return false;
}
if (this.isWaitingForManifestRefresh) {
return true;
}
Map.Entry<Long, Long> ceilingExpiryEntryForPublishTime = ceilingExpiryEntryForPublishTime(this.manifest.publishTimeMs);
if (ceilingExpiryEntryForPublishTime != null && ceilingExpiryEntryForPublishTime.getValue().longValue() < j) {
this.expiredManifestPublishTimeUs = ceilingExpiryEntryForPublishTime.getKey().longValue();
notifyManifestPublishTimeExpired();
z = true;
}
if (z) {
maybeNotifyDashManifestRefreshNeeded();
}
return z;
}
/* access modifiers changed from: package-private */
public void onChunkLoadCompleted(Chunk chunk) {
this.chunkLoadedCompletedSinceLastManifestRefreshRequest = true;
}
/* access modifiers changed from: package-private */
public boolean onChunkLoadError(boolean z) {
if (!this.manifest.dynamic) {
return false;
}
if (this.isWaitingForManifestRefresh) {
return true;
}
if (!z) {
return false;
}
maybeNotifyDashManifestRefreshNeeded();
return true;
}
private void handleManifestExpiredMessage(long j, long j2) {
Long l = this.manifestPublishTimeToExpiryTimeUs.get(Long.valueOf(j2));
if (l == null) {
this.manifestPublishTimeToExpiryTimeUs.put(Long.valueOf(j2), Long.valueOf(j));
} else if (l.longValue() > j) {
this.manifestPublishTimeToExpiryTimeUs.put(Long.valueOf(j2), Long.valueOf(j));
}
}
private Map.Entry<Long, Long> ceilingExpiryEntryForPublishTime(long j) {
return this.manifestPublishTimeToExpiryTimeUs.ceilingEntry(Long.valueOf(j));
}
private void removePreviouslyExpiredManifestPublishTimeValues() {
Iterator<Map.Entry<Long, Long>> it = this.manifestPublishTimeToExpiryTimeUs.entrySet().iterator();
while (it.hasNext()) {
if (((Long) it.next().getKey()).longValue() < this.manifest.publishTimeMs) {
it.remove();
}
}
}
private void notifyManifestPublishTimeExpired() {
this.playerEmsgCallback.onDashManifestPublishTimeExpired(this.expiredManifestPublishTimeUs);
}
private void maybeNotifyDashManifestRefreshNeeded() {
if (this.chunkLoadedCompletedSinceLastManifestRefreshRequest) {
this.isWaitingForManifestRefresh = true;
this.chunkLoadedCompletedSinceLastManifestRefreshRequest = false;
this.playerEmsgCallback.onDashManifestRefreshRequested();
}
}
/* access modifiers changed from: private */
public static long getManifestPublishTimeMsInEmsg(EventMessage eventMessage) {
try {
return Util.parseXsDateTime(Util.fromUtf8Bytes(eventMessage.messageData));
} catch (ParserException unused) {
return C.TIME_UNSET;
}
}
/* access modifiers changed from: private */
public static boolean isPlayerEmsgEvent(String str, String str2) {
return "urn:mpeg:dash:event:2012".equals(str) && (IcyHeaders.REQUEST_HEADER_ENABLE_METADATA_VALUE.equals(str2) || "2".equals(str2) || "3".equals(str2));
}
public final class PlayerTrackEmsgHandler implements TrackOutput {
private final MetadataInputBuffer buffer = new MetadataInputBuffer();
private final FormatHolder formatHolder = new FormatHolder();
private long maxLoadedChunkEndTimeUs = C.TIME_UNSET;
private final SampleQueue sampleQueue;
public /* synthetic */ int sampleData(DataReader dataReader, int i, boolean z) {
return TrackOutput.CC.$default$sampleData(this, dataReader, i, z);
}
public /* synthetic */ void sampleData(ParsableByteArray parsableByteArray, int i) {
TrackOutput.CC.$default$sampleData(this, parsableByteArray, i);
}
PlayerTrackEmsgHandler(Allocator allocator) {
this.sampleQueue = SampleQueue.createWithoutDrm(allocator);
}
public void format(Format format) {
this.sampleQueue.format(format);
}
public int sampleData(DataReader dataReader, int i, boolean z, int i2) throws IOException {
return this.sampleQueue.sampleData(dataReader, i, z);
}
public void sampleData(ParsableByteArray parsableByteArray, int i, int i2) {
this.sampleQueue.sampleData(parsableByteArray, i);
}
public void sampleMetadata(long j, int i, int i2, int i3, TrackOutput.CryptoData cryptoData) {
this.sampleQueue.sampleMetadata(j, i, i2, i3, cryptoData);
parseAndDiscardSamples();
}
public boolean maybeRefreshManifestBeforeLoadingNextChunk(long j) {
return PlayerEmsgHandler.this.maybeRefreshManifestBeforeLoadingNextChunk(j);
}
public void onChunkLoadCompleted(Chunk chunk) {
if (this.maxLoadedChunkEndTimeUs == C.TIME_UNSET || chunk.endTimeUs > this.maxLoadedChunkEndTimeUs) {
this.maxLoadedChunkEndTimeUs = chunk.endTimeUs;
}
PlayerEmsgHandler.this.onChunkLoadCompleted(chunk);
}
public boolean onChunkLoadError(Chunk chunk) {
long j = this.maxLoadedChunkEndTimeUs;
return PlayerEmsgHandler.this.onChunkLoadError(j != C.TIME_UNSET && j < chunk.startTimeUs);
}
public void release() {
this.sampleQueue.release();
}
private void parseAndDiscardSamples() {
while (this.sampleQueue.isReady(false)) {
MetadataInputBuffer dequeueSample = dequeueSample();
if (dequeueSample != null) {
long j = dequeueSample.timeUs;
Metadata decode = PlayerEmsgHandler.this.decoder.decode(dequeueSample);
if (decode != null) {
EventMessage eventMessage = (EventMessage) decode.get(0);
if (PlayerEmsgHandler.isPlayerEmsgEvent(eventMessage.schemeIdUri, eventMessage.value)) {
parsePlayerEmsgEvent(j, eventMessage);
}
}
}
}
this.sampleQueue.discardToRead();
}
private MetadataInputBuffer dequeueSample() {
this.buffer.clear();
if (this.sampleQueue.read(this.formatHolder, this.buffer, 0, false) != -4) {
return null;
}
this.buffer.flip();
return this.buffer;
}
private void parsePlayerEmsgEvent(long j, EventMessage eventMessage) {
long access$200 = PlayerEmsgHandler.getManifestPublishTimeMsInEmsg(eventMessage);
if (access$200 != C.TIME_UNSET) {
onManifestExpiredMessageEncountered(j, access$200);
}
}
private void onManifestExpiredMessageEncountered(long j, long j2) {
PlayerEmsgHandler.this.handler.sendMessage(PlayerEmsgHandler.this.handler.obtainMessage(1, new ManifestExpiryEventInfo(j, j2)));
}
}
private static final class ManifestExpiryEventInfo {
public final long eventTimeUs;
public final long manifestPublishTimeMsInEmsg;
public ManifestExpiryEventInfo(long j, long j2) {
this.eventTimeUs = j;
this.manifestPublishTimeMsInEmsg = j2;
}
}
}
Download file