package androidx.media3.exoplayer.drm; import android.media.DeniedByServerException; import android.media.MediaCrypto; import android.media.MediaCryptoException; import android.media.MediaDrm; import android.media.MediaDrmException; import android.media.NotProvisionedException; import android.media.UnsupportedSchemeException; import android.media.metrics.LogSessionId; import android.os.Handler; import android.os.PersistableBundle; import android.text.TextUtils; import androidx.media3.common.C; import androidx.media3.common.DrmInitData; import androidx.media3.common.util.Assertions; import androidx.media3.common.util.Log; import androidx.media3.common.util.ParsableByteArray; import androidx.media3.common.util.Util; import androidx.media3.exoplayer.analytics.PlayerId; import androidx.media3.exoplayer.drm.ExoMediaDrm; import androidx.media3.extractor.mp4.PsshAtomUtil; import com.google.common.base.Charsets; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.UUID; /* loaded from: classes2.dex */ public final class FrameworkMediaDrm implements ExoMediaDrm { private static final String CENC_SCHEME_MIME_TYPE = "cenc"; public static final ExoMediaDrm.Provider DEFAULT_PROVIDER = new ExoMediaDrm.Provider() { // from class: androidx.media3.exoplayer.drm.FrameworkMediaDrm$$ExternalSyntheticLambda1 @Override // androidx.media3.exoplayer.drm.ExoMediaDrm.Provider public final ExoMediaDrm acquireExoMediaDrm(UUID uuid) { return FrameworkMediaDrm.lambda$static$0(uuid); } }; private static final String MOCK_LA_URL = "https://x"; private static final String MOCK_LA_URL_VALUE = "https://x"; private static final String TAG = "FrameworkMediaDrm"; private static final int UTF_16_BYTES_PER_CHARACTER = 2; private final MediaDrm mediaDrm; private int referenceCount; private final UUID uuid; @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public int getCryptoType() { return 2; } /* JADX INFO: Access modifiers changed from: package-private */ public static /* synthetic */ ExoMediaDrm lambda$static$0(UUID uuid) { try { return newInstance(uuid); } catch (UnsupportedDrmException unused) { Log.e(TAG, "Failed to instantiate a FrameworkMediaDrm for uuid: " + uuid + "."); return new DummyExoMediaDrm(); } } public static boolean isCryptoSchemeSupported(UUID uuid) { return MediaDrm.isCryptoSchemeSupported(adjustUuid(uuid)); } public static FrameworkMediaDrm newInstance(UUID uuid) throws UnsupportedDrmException { try { return new FrameworkMediaDrm(uuid); } catch (UnsupportedSchemeException e) { throw new UnsupportedDrmException(1, e); } catch (Exception e2) { throw new UnsupportedDrmException(2, e2); } } private FrameworkMediaDrm(UUID uuid) throws UnsupportedSchemeException { Assertions.checkNotNull(uuid); Assertions.checkArgument(!C.COMMON_PSSH_UUID.equals(uuid), "Use C.CLEARKEY_UUID instead"); this.uuid = uuid; MediaDrm mediaDrm = new MediaDrm(adjustUuid(uuid)); this.mediaDrm = mediaDrm; this.referenceCount = 1; if (C.WIDEVINE_UUID.equals(uuid) && needsForceWidevineL3Workaround()) { forceWidevineL3(mediaDrm); } } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public void setOnEventListener(final ExoMediaDrm.OnEventListener onEventListener) { this.mediaDrm.setOnEventListener(onEventListener == null ? null : new MediaDrm.OnEventListener() { // from class: androidx.media3.exoplayer.drm.FrameworkMediaDrm$$ExternalSyntheticLambda2 @Override // android.media.MediaDrm.OnEventListener public final void onEvent(MediaDrm mediaDrm, byte[] bArr, int i, int i2, byte[] bArr2) { FrameworkMediaDrm.this.m5240x5e84e274(onEventListener, mediaDrm, bArr, i, i2, bArr2); } }); } /* JADX INFO: Access modifiers changed from: package-private */ /* renamed from: lambda$setOnEventListener$1$androidx-media3-exoplayer-drm-FrameworkMediaDrm, reason: not valid java name */ public /* synthetic */ void m5240x5e84e274(ExoMediaDrm.OnEventListener onEventListener, MediaDrm mediaDrm, byte[] bArr, int i, int i2, byte[] bArr2) { onEventListener.onEvent(this, bArr, i, i2, bArr2); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public void setOnKeyStatusChangeListener(final ExoMediaDrm.OnKeyStatusChangeListener onKeyStatusChangeListener) { if (Util.SDK_INT < 23) { throw new UnsupportedOperationException(); } this.mediaDrm.setOnKeyStatusChangeListener(onKeyStatusChangeListener == null ? null : new MediaDrm.OnKeyStatusChangeListener() { // from class: androidx.media3.exoplayer.drm.FrameworkMediaDrm$$ExternalSyntheticLambda3 @Override // android.media.MediaDrm.OnKeyStatusChangeListener public final void onKeyStatusChange(MediaDrm mediaDrm, byte[] bArr, List list, boolean z) { FrameworkMediaDrm.this.m5242xc78bb65c(onKeyStatusChangeListener, mediaDrm, bArr, list, z); } }, (Handler) null); } /* JADX INFO: Access modifiers changed from: package-private */ /* renamed from: lambda$setOnKeyStatusChangeListener$2$androidx-media3-exoplayer-drm-FrameworkMediaDrm, reason: not valid java name */ public /* synthetic */ void m5242xc78bb65c(ExoMediaDrm.OnKeyStatusChangeListener onKeyStatusChangeListener, MediaDrm mediaDrm, byte[] bArr, List list, boolean z) { ArrayList arrayList = new ArrayList(); Iterator it = list.iterator(); while (it.hasNext()) { MediaDrm.KeyStatus keyStatus = (MediaDrm.KeyStatus) it.next(); arrayList.add(new ExoMediaDrm.KeyStatus(keyStatus.getStatusCode(), keyStatus.getKeyId())); } onKeyStatusChangeListener.onKeyStatusChange(this, bArr, arrayList, z); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public void setOnExpirationUpdateListener(final ExoMediaDrm.OnExpirationUpdateListener onExpirationUpdateListener) { if (Util.SDK_INT < 23) { throw new UnsupportedOperationException(); } this.mediaDrm.setOnExpirationUpdateListener(onExpirationUpdateListener == null ? null : new MediaDrm.OnExpirationUpdateListener() { // from class: androidx.media3.exoplayer.drm.FrameworkMediaDrm$$ExternalSyntheticLambda0 @Override // android.media.MediaDrm.OnExpirationUpdateListener public final void onExpirationUpdate(MediaDrm mediaDrm, byte[] bArr, long j) { FrameworkMediaDrm.this.m5241x3bcdcffc(onExpirationUpdateListener, mediaDrm, bArr, j); } }, (Handler) null); } /* JADX INFO: Access modifiers changed from: package-private */ /* renamed from: lambda$setOnExpirationUpdateListener$3$androidx-media3-exoplayer-drm-FrameworkMediaDrm, reason: not valid java name */ public /* synthetic */ void m5241x3bcdcffc(ExoMediaDrm.OnExpirationUpdateListener onExpirationUpdateListener, MediaDrm mediaDrm, byte[] bArr, long j) { onExpirationUpdateListener.onExpirationUpdate(this, bArr, j); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public byte[] openSession() throws MediaDrmException { return this.mediaDrm.openSession(); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public void closeSession(byte[] bArr) { this.mediaDrm.closeSession(bArr); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public void setPlayerIdForSession(byte[] bArr, PlayerId playerId) { if (Util.SDK_INT >= 31) { try { Api31.setLogSessionIdOnMediaDrmSession(this.mediaDrm, bArr, playerId); } catch (UnsupportedOperationException unused) { Log.w(TAG, "setLogSessionId failed."); } } } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public ExoMediaDrm.KeyRequest getKeyRequest(byte[] bArr, List list, int i, HashMap hashMap) throws NotProvisionedException { DrmInitData.SchemeData schemeData; byte[] bArr2; String str; if (list != null) { schemeData = getSchemeData(this.uuid, list); bArr2 = adjustRequestInitData(this.uuid, (byte[]) Assertions.checkNotNull(schemeData.data)); str = adjustRequestMimeType(this.uuid, schemeData.mimeType); } else { schemeData = null; bArr2 = null; str = null; } MediaDrm.KeyRequest keyRequest = this.mediaDrm.getKeyRequest(bArr, bArr2, str, i, hashMap); byte[] adjustRequestData = adjustRequestData(this.uuid, keyRequest.getData()); String adjustLicenseServerUrl = adjustLicenseServerUrl(keyRequest.getDefaultUrl()); if (TextUtils.isEmpty(adjustLicenseServerUrl) && schemeData != null && !TextUtils.isEmpty(schemeData.licenseServerUrl)) { adjustLicenseServerUrl = schemeData.licenseServerUrl; } return new ExoMediaDrm.KeyRequest(adjustRequestData, adjustLicenseServerUrl, Util.SDK_INT >= 23 ? keyRequest.getRequestType() : Integer.MIN_VALUE); } private static String adjustLicenseServerUrl(String str) { return MOCK_LA_URL.equals(str) ? "" : (Util.SDK_INT == 33 && "https://default.url".equals(str)) ? "" : str; } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public byte[] provideKeyResponse(byte[] bArr, byte[] bArr2) throws NotProvisionedException, DeniedByServerException { if (C.CLEARKEY_UUID.equals(this.uuid)) { bArr2 = ClearKeyUtil.adjustResponseData(bArr2); } return this.mediaDrm.provideKeyResponse(bArr, bArr2); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public ExoMediaDrm.ProvisionRequest getProvisionRequest() { MediaDrm.ProvisionRequest provisionRequest = this.mediaDrm.getProvisionRequest(); return new ExoMediaDrm.ProvisionRequest(provisionRequest.getData(), provisionRequest.getDefaultUrl()); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public void provideProvisionResponse(byte[] bArr) throws DeniedByServerException { this.mediaDrm.provideProvisionResponse(bArr); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public Map queryKeyStatus(byte[] bArr) { return this.mediaDrm.queryKeyStatus(bArr); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public boolean requiresSecureDecoder(byte[] bArr, String str) { if (Util.SDK_INT >= 31) { return Api31.requiresSecureDecoder(this.mediaDrm, str); } try { MediaCrypto mediaCrypto = new MediaCrypto(this.uuid, bArr); try { return mediaCrypto.requiresSecureDecoderComponent(str); } finally { mediaCrypto.release(); } } catch (MediaCryptoException unused) { return true; } } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public synchronized void acquire() { Assertions.checkState(this.referenceCount > 0); this.referenceCount++; } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public synchronized void release() { int i = this.referenceCount - 1; this.referenceCount = i; if (i == 0) { this.mediaDrm.release(); } } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public void restoreKeys(byte[] bArr, byte[] bArr2) { this.mediaDrm.restoreKeys(bArr, bArr2); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public PersistableBundle getMetrics() { if (Util.SDK_INT < 28) { return null; } return this.mediaDrm.getMetrics(); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public String getPropertyString(String str) { return this.mediaDrm.getPropertyString(str); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public byte[] getPropertyByteArray(String str) { return this.mediaDrm.getPropertyByteArray(str); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public void setPropertyString(String str, String str2) { this.mediaDrm.setPropertyString(str, str2); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public void setPropertyByteArray(String str, byte[] bArr) { this.mediaDrm.setPropertyByteArray(str, bArr); } @Override // androidx.media3.exoplayer.drm.ExoMediaDrm public FrameworkCryptoConfig createCryptoConfig(byte[] bArr) throws MediaCryptoException { return new FrameworkCryptoConfig(adjustUuid(this.uuid), bArr, Util.SDK_INT < 21 && C.WIDEVINE_UUID.equals(this.uuid) && "L3".equals(getPropertyString("securityLevel"))); } private static DrmInitData.SchemeData getSchemeData(UUID uuid, List list) { if (!C.WIDEVINE_UUID.equals(uuid)) { return list.get(0); } if (Util.SDK_INT >= 28 && list.size() > 1) { DrmInitData.SchemeData schemeData = list.get(0); int i = 0; for (int i2 = 0; i2 < list.size(); i2++) { DrmInitData.SchemeData schemeData2 = list.get(i2); byte[] bArr = (byte[]) Assertions.checkNotNull(schemeData2.data); if (Util.areEqual(schemeData2.mimeType, schemeData.mimeType) && Util.areEqual(schemeData2.licenseServerUrl, schemeData.licenseServerUrl) && PsshAtomUtil.isPsshAtom(bArr)) { i += bArr.length; } } byte[] bArr2 = new byte[i]; int i3 = 0; for (int i4 = 0; i4 < list.size(); i4++) { byte[] bArr3 = (byte[]) Assertions.checkNotNull(list.get(i4).data); int length = bArr3.length; System.arraycopy(bArr3, 0, bArr2, i3, length); i3 += length; } return schemeData.copyWithData(bArr2); } for (int i5 = 0; i5 < list.size(); i5++) { DrmInitData.SchemeData schemeData3 = list.get(i5); int parseVersion = PsshAtomUtil.parseVersion((byte[]) Assertions.checkNotNull(schemeData3.data)); if (Util.SDK_INT < 23 && parseVersion == 0) { return schemeData3; } if (Util.SDK_INT >= 23 && parseVersion == 1) { return schemeData3; } } return list.get(0); } private static UUID adjustUuid(UUID uuid) { return (Util.SDK_INT >= 27 || !C.CLEARKEY_UUID.equals(uuid)) ? uuid : C.COMMON_PSSH_UUID; } private static byte[] adjustRequestInitData(UUID uuid, byte[] bArr) { byte[] parseSchemeSpecificData; if (C.PLAYREADY_UUID.equals(uuid)) { byte[] parseSchemeSpecificData2 = PsshAtomUtil.parseSchemeSpecificData(bArr, uuid); if (parseSchemeSpecificData2 != null) { bArr = parseSchemeSpecificData2; } bArr = PsshAtomUtil.buildPsshAtom(C.PLAYREADY_UUID, addLaUrlAttributeIfMissing(bArr)); } return (((Util.SDK_INT >= 23 || !C.WIDEVINE_UUID.equals(uuid)) && !(C.PLAYREADY_UUID.equals(uuid) && "Amazon".equals(Util.MANUFACTURER) && ("AFTB".equals(Util.MODEL) || "AFTS".equals(Util.MODEL) || "AFTM".equals(Util.MODEL) || "AFTT".equals(Util.MODEL)))) || (parseSchemeSpecificData = PsshAtomUtil.parseSchemeSpecificData(bArr, uuid)) == null) ? bArr : parseSchemeSpecificData; } private static String adjustRequestMimeType(UUID uuid, String str) { return (Util.SDK_INT < 26 && C.CLEARKEY_UUID.equals(uuid) && ("video/mp4".equals(str) || "audio/mp4".equals(str))) ? "cenc" : str; } private static byte[] adjustRequestData(UUID uuid, byte[] bArr) { return C.CLEARKEY_UUID.equals(uuid) ? ClearKeyUtil.adjustRequestData(bArr) : bArr; } private static void forceWidevineL3(MediaDrm mediaDrm) { mediaDrm.setPropertyString("securityLevel", "L3"); } private static boolean needsForceWidevineL3Workaround() { return "ASUS_Z00AD".equals(Util.MODEL); } private static byte[] addLaUrlAttributeIfMissing(byte[] bArr) { ParsableByteArray parsableByteArray = new ParsableByteArray(bArr); int readLittleEndianInt = parsableByteArray.readLittleEndianInt(); short readLittleEndianShort = parsableByteArray.readLittleEndianShort(); short readLittleEndianShort2 = parsableByteArray.readLittleEndianShort(); if (readLittleEndianShort != 1 || readLittleEndianShort2 != 1) { Log.i(TAG, "Unexpected record count or type. Skipping LA_URL workaround."); return bArr; } String readString = parsableByteArray.readString(parsableByteArray.readLittleEndianShort(), Charsets.UTF_16LE); if (readString.contains("")) { return bArr; } int indexOf = readString.indexOf(""); if (indexOf == -1) { Log.w(TAG, "Could not find the tag. Skipping LA_URL workaround."); } String str = readString.substring(0, indexOf) + MOCK_LA_URL + readString.substring(indexOf); int i = readLittleEndianInt + 52; ByteBuffer allocate = ByteBuffer.allocate(i); allocate.order(ByteOrder.LITTLE_ENDIAN); allocate.putInt(i); allocate.putShort(readLittleEndianShort); allocate.putShort(readLittleEndianShort2); allocate.putShort((short) (str.length() * 2)); allocate.put(str.getBytes(Charsets.UTF_16LE)); return allocate.array(); } /* loaded from: classes2.dex */ private static class Api31 { private Api31() { } public static boolean requiresSecureDecoder(MediaDrm mediaDrm, String str) { return mediaDrm.requiresSecureDecoder(str); } public static void setLogSessionIdOnMediaDrmSession(MediaDrm mediaDrm, byte[] bArr, PlayerId playerId) { LogSessionId logSessionId = playerId.getLogSessionId(); if (logSessionId.equals(LogSessionId.LOG_SESSION_ID_NONE)) { return; } ((MediaDrm.PlaybackComponent) Assertions.checkNotNull(mediaDrm.getPlaybackComponent(bArr))).setLogSessionId(logSessionId); } } }