Class FakeExoMediaDrm
- java.lang.Object
-
- com.google.android.exoplayer2.testutil.FakeExoMediaDrm
-
- All Implemented Interfaces:
ExoMediaDrm
@RequiresApi(29) public final class FakeExoMediaDrm extends Object implements ExoMediaDrm
A fake implementation ofExoMediaDrm
for use in tests.FakeExoMediaDrm.LicenseServer
can be used to respond to interactions stemming fromgetKeyRequest(byte[], List, int, HashMap)
andprovideKeyResponse(byte[], byte[])
.Currently only supports streaming key requests.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FakeExoMediaDrm.Builder
Builder forFakeExoMediaDrm
instances.static class
FakeExoMediaDrm.LicenseServer
An license server implementation to interact withFakeExoMediaDrm
.-
Nested classes/interfaces inherited from interface com.google.android.exoplayer2.drm.ExoMediaDrm
ExoMediaDrm.AppManagedProvider, ExoMediaDrm.KeyRequest, ExoMediaDrm.KeyStatus, ExoMediaDrm.OnEventListener, ExoMediaDrm.OnExpirationUpdateListener, ExoMediaDrm.OnKeyStatusChangeListener, ExoMediaDrm.Provider, ExoMediaDrm.ProvisionRequest
-
-
Field Summary
Fields Modifier and Type Field Description static ExoMediaDrm.ProvisionRequest
FAKE_PROVISION_REQUEST
static String
KEY_STATUS_AVAILABLE
Value for use with the Map returned fromqueryKeyStatus(byte[])
.static String
KEY_STATUS_KEY
Key for use with the Map returned fromqueryKeyStatus(byte[])
.static String
KEY_STATUS_UNAVAILABLE
Value for use with the Map returned fromqueryKeyStatus(byte[])
.static ImmutableList<Byte>
VALID_PROVISION_RESPONSE
-
Fields inherited from interface com.google.android.exoplayer2.drm.ExoMediaDrm
EVENT_KEY_EXPIRED, EVENT_KEY_REQUIRED, EVENT_PROVISION_REQUIRED, KEY_TYPE_OFFLINE, KEY_TYPE_RELEASE, KEY_TYPE_STREAMING
-
-
Constructor Summary
Constructors Constructor Description FakeExoMediaDrm()
Deprecated.UseFakeExoMediaDrm.Builder
instead.FakeExoMediaDrm(int maxConcurrentSessions)
Deprecated.UseFakeExoMediaDrm.Builder
instead.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
acquire()
Increments the reference count.void
closeSession(byte[] sessionId)
Closes a DRM session.CryptoConfig
createCryptoConfig(byte[] sessionId)
Creates aCryptoConfig
that can be passed to a compatible decoder to allow decryption of protected content using the specified session.@com.google.android.exoplayer2.C.CryptoType int
getCryptoType()
ExoMediaDrm.KeyRequest
getKeyRequest(byte[] scope, List<DrmInitData.SchemeData> schemeDatas, int keyType, HashMap<String,String> optionalParameters)
Generates a key request.PersistableBundle
getMetrics()
Returns metrics data for this ExoMediaDrm instance, ornull
if metrics are unavailable.byte[]
getPropertyByteArray(String propertyName)
Returns the value of a byte array property.String
getPropertyString(String propertyName)
Returns the value of a string property.ExoMediaDrm.ProvisionRequest
getProvisionRequest()
Generates a provisioning request.int
getReferenceCount()
byte[]
openSession()
Opens a new DRM session.byte[]
provideKeyResponse(byte[] scope, byte[] response)
Provides a key response for the last request to be generated usingExoMediaDrm.getKeyRequest(byte[], java.util.List<com.google.android.exoplayer2.drm.DrmInitData.SchemeData>, int, java.util.HashMap<java.lang.String, java.lang.String>)
.void
provideProvisionResponse(byte[] response)
Provides a provisioning response for the last request to be generated usingExoMediaDrm.getProvisionRequest()
.Map<String,String>
queryKeyStatus(byte[] sessionId)
Returns the key status for a given session, as {name, value} pairs.void
release()
Decrements the reference count.boolean
requiresSecureDecoder(byte[] sessionId, String mimeType)
Returns whether the given session requires use of a secure decoder for the given MIME type.void
resetProvisioning()
Resets the provisioning state of this instance, so it requiresprovisionsRequired
(possibly zero) provision operations before it's operational again.void
restoreKeys(byte[] sessionId, byte[] keySetId)
Restores persisted offline keys into a session.void
setOnEventListener(ExoMediaDrm.OnEventListener listener)
Sets the listener for DRM events.void
setOnExpirationUpdateListener(ExoMediaDrm.OnExpirationUpdateListener listener)
Sets the listener for session expiration events.void
setOnKeyStatusChangeListener(ExoMediaDrm.OnKeyStatusChangeListener listener)
Sets the listener for key status change events.void
setPropertyByteArray(String propertyName, byte[] value)
Sets the value of a byte array property.void
setPropertyString(String propertyName, String value)
Sets the value of a string property.void
triggerEvent(Predicate<byte[]> sessionIdPredicate, int event, int extra, byte[] data)
CallsExoMediaDrm.OnEventListener.onEvent(ExoMediaDrm, byte[], int, int, byte[])
on the attached listener (if present) once for each open session ID which passessessionIdPredicate
, passing the provided values forevent
,extra
anddata
.
-
-
-
Field Detail
-
FAKE_PROVISION_REQUEST
public static final ExoMediaDrm.ProvisionRequest FAKE_PROVISION_REQUEST
-
VALID_PROVISION_RESPONSE
public static final ImmutableList<Byte> VALID_PROVISION_RESPONSE
-
KEY_STATUS_KEY
public static final String KEY_STATUS_KEY
Key for use with the Map returned fromqueryKeyStatus(byte[])
.- See Also:
- Constant Field Values
-
KEY_STATUS_AVAILABLE
public static final String KEY_STATUS_AVAILABLE
Value for use with the Map returned fromqueryKeyStatus(byte[])
.- See Also:
- Constant Field Values
-
KEY_STATUS_UNAVAILABLE
public static final String KEY_STATUS_UNAVAILABLE
Value for use with the Map returned fromqueryKeyStatus(byte[])
.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
FakeExoMediaDrm
@Deprecated public FakeExoMediaDrm()
Deprecated.UseFakeExoMediaDrm.Builder
instead.
-
FakeExoMediaDrm
@Deprecated public FakeExoMediaDrm(int maxConcurrentSessions)
Deprecated.UseFakeExoMediaDrm.Builder
instead.
-
-
Method Detail
-
setOnEventListener
public void setOnEventListener(@Nullable ExoMediaDrm.OnEventListener listener)
Description copied from interface:ExoMediaDrm
Sets the listener for DRM events.This is an optional method, and some implementations may only support it on certain Android API levels.
- Specified by:
setOnEventListener
in interfaceExoMediaDrm
- Parameters:
listener
- The listener to receive events, ornull
to stop receiving events.- See Also:
MediaDrm.setOnEventListener(MediaDrm.OnEventListener)
-
setOnKeyStatusChangeListener
public void setOnKeyStatusChangeListener(@Nullable ExoMediaDrm.OnKeyStatusChangeListener listener)
Description copied from interface:ExoMediaDrm
Sets the listener for key status change events.This is an optional method, and some implementations may only support it on certain Android API levels.
- Specified by:
setOnKeyStatusChangeListener
in interfaceExoMediaDrm
- Parameters:
listener
- The listener to receive events, ornull
to stop receiving events.- See Also:
MediaDrm.setOnKeyStatusChangeListener(MediaDrm.OnKeyStatusChangeListener, Handler)
-
setOnExpirationUpdateListener
public void setOnExpirationUpdateListener(@Nullable ExoMediaDrm.OnExpirationUpdateListener listener)
Description copied from interface:ExoMediaDrm
Sets the listener for session expiration events.This is an optional method, and some implementations may only support it on certain Android API levels.
- Specified by:
setOnExpirationUpdateListener
in interfaceExoMediaDrm
- Parameters:
listener
- The listener to receive events, ornull
to stop receiving events.- See Also:
MediaDrm.setOnExpirationUpdateListener(MediaDrm.OnExpirationUpdateListener, Handler)
-
openSession
public byte[] openSession() throws MediaDrmException
Description copied from interface:ExoMediaDrm
Opens a new DRM session. A session ID is returned.- Specified by:
openSession
in interfaceExoMediaDrm
- Returns:
- The session ID.
- Throws:
NotProvisionedException
- If provisioning is needed.ResourceBusyException
- If required resources are in use.MediaDrmException
- If the session could not be opened.
-
closeSession
public void closeSession(byte[] sessionId)
Description copied from interface:ExoMediaDrm
Closes a DRM session.- Specified by:
closeSession
in interfaceExoMediaDrm
- Parameters:
sessionId
- The ID of the session to close.
-
getKeyRequest
public ExoMediaDrm.KeyRequest getKeyRequest(byte[] scope, @Nullable List<DrmInitData.SchemeData> schemeDatas, int keyType, @Nullable HashMap<String,String> optionalParameters) throws NotProvisionedException
Description copied from interface:ExoMediaDrm
Generates a key request.- Specified by:
getKeyRequest
in interfaceExoMediaDrm
- Parameters:
scope
- IfkeyType
isExoMediaDrm.KEY_TYPE_STREAMING
orExoMediaDrm.KEY_TYPE_OFFLINE
, the ID of the session that the keys will be provided to. IfkeyType
isExoMediaDrm.KEY_TYPE_RELEASE
, thekeySetId
of the keys to release.schemeDatas
- If key type isExoMediaDrm.KEY_TYPE_STREAMING
orExoMediaDrm.KEY_TYPE_OFFLINE
, a list ofDrmInitData.SchemeData
instances extracted from the media. Null otherwise.keyType
- The type of the request. EitherExoMediaDrm.KEY_TYPE_STREAMING
to acquire keys for streaming,ExoMediaDrm.KEY_TYPE_OFFLINE
to acquire keys for offline usage, orExoMediaDrm.KEY_TYPE_RELEASE
to release acquired keys. Releasing keys invalidates them for all sessions.optionalParameters
- Are included in the key request message to allow a client application to provide additional message parameters to the server. This may benull
if no additional parameters are to be sent.- Returns:
- The generated key request.
- Throws:
NotProvisionedException
- See Also:
MediaDrm.getKeyRequest(byte[], byte[], String, int, HashMap)
-
provideKeyResponse
public byte[] provideKeyResponse(byte[] scope, byte[] response) throws NotProvisionedException, DeniedByServerException
Description copied from interface:ExoMediaDrm
Provides a key response for the last request to be generated usingExoMediaDrm.getKeyRequest(byte[], java.util.List<com.google.android.exoplayer2.drm.DrmInitData.SchemeData>, int, java.util.HashMap<java.lang.String, java.lang.String>)
.- Specified by:
provideKeyResponse
in interfaceExoMediaDrm
- Parameters:
scope
- If the request had typeExoMediaDrm.KEY_TYPE_STREAMING
orExoMediaDrm.KEY_TYPE_OFFLINE
, the ID of the session to provide the keys to. IfkeyType
isExoMediaDrm.KEY_TYPE_RELEASE
, thekeySetId
of the keys being released.response
- The response data from the server.- Returns:
- If the request had type
ExoMediaDrm.KEY_TYPE_OFFLINE
, thekeySetId
for the offline keys. An empty byte array ornull
may be returned for other cases. - Throws:
NotProvisionedException
- If the response indicates that provisioning is needed.DeniedByServerException
- If the response indicates that the server rejected the request.
-
getProvisionRequest
public ExoMediaDrm.ProvisionRequest getProvisionRequest()
Description copied from interface:ExoMediaDrm
Generates a provisioning request.- Specified by:
getProvisionRequest
in interfaceExoMediaDrm
- Returns:
- The generated provisioning request.
-
provideProvisionResponse
public void provideProvisionResponse(byte[] response) throws DeniedByServerException
Description copied from interface:ExoMediaDrm
Provides a provisioning response for the last request to be generated usingExoMediaDrm.getProvisionRequest()
.- Specified by:
provideProvisionResponse
in interfaceExoMediaDrm
- Parameters:
response
- The response data from the server.- Throws:
DeniedByServerException
- If the response indicates that the server rejected the request.
-
queryKeyStatus
public Map<String,String> queryKeyStatus(byte[] sessionId)
Description copied from interface:ExoMediaDrm
Returns the key status for a given session, as {name, value} pairs. Since DRM license policies vary by vendor, the returned entries depend on the DRM plugin being used. Refer to your DRM provider's documentation for more information.- Specified by:
queryKeyStatus
in interfaceExoMediaDrm
- Parameters:
sessionId
- The ID of the session being queried.- Returns:
- The key status for the session.
-
requiresSecureDecoder
public boolean requiresSecureDecoder(byte[] sessionId, String mimeType)
Description copied from interface:ExoMediaDrm
Returns whether the given session requires use of a secure decoder for the given MIME type. Assumes a license policy that requires the highest level of security supported by the session.- Specified by:
requiresSecureDecoder
in interfaceExoMediaDrm
- Parameters:
sessionId
- The ID of the session.mimeType
- The content MIME type to query.
-
acquire
public void acquire()
Description copied from interface:ExoMediaDrm
Increments the reference count. When the caller no longer needs to use the instance, it must callExoMediaDrm.release()
to decrement the reference count.A new instance will have an initial reference count of 1, and therefore it is not normally necessary for application code to call this method.
- Specified by:
acquire
in interfaceExoMediaDrm
-
release
public void release()
Description copied from interface:ExoMediaDrm
Decrements the reference count. If the reference count drops to 0 underlying resources are released, and the instance cannot be re-used.- Specified by:
release
in interfaceExoMediaDrm
-
restoreKeys
public void restoreKeys(byte[] sessionId, byte[] keySetId)
Description copied from interface:ExoMediaDrm
Restores persisted offline keys into a session.- Specified by:
restoreKeys
in interfaceExoMediaDrm
- Parameters:
sessionId
- The ID of the session into which the keys will be restored.keySetId
- ThekeySetId
of the keys to restore, as provided by the call toExoMediaDrm.provideKeyResponse(byte[], byte[])
that persisted them.
-
getMetrics
@Nullable public PersistableBundle getMetrics()
Description copied from interface:ExoMediaDrm
Returns metrics data for this ExoMediaDrm instance, ornull
if metrics are unavailable.- Specified by:
getMetrics
in interfaceExoMediaDrm
-
getPropertyString
public String getPropertyString(String propertyName)
Description copied from interface:ExoMediaDrm
Returns the value of a string property. For standard property names, seeMediaDrm.getPropertyString(java.lang.String)
.- Specified by:
getPropertyString
in interfaceExoMediaDrm
- Parameters:
propertyName
- The property name.- Returns:
- The property value.
-
getPropertyByteArray
public byte[] getPropertyByteArray(String propertyName)
Description copied from interface:ExoMediaDrm
Returns the value of a byte array property. For standard property names, seeMediaDrm.getPropertyByteArray(java.lang.String)
.- Specified by:
getPropertyByteArray
in interfaceExoMediaDrm
- Parameters:
propertyName
- The property name.- Returns:
- The property value.
-
setPropertyString
public void setPropertyString(String propertyName, String value)
Description copied from interface:ExoMediaDrm
Sets the value of a string property.- Specified by:
setPropertyString
in interfaceExoMediaDrm
- Parameters:
propertyName
- The property name.value
- The value.
-
setPropertyByteArray
public void setPropertyByteArray(String propertyName, byte[] value)
Description copied from interface:ExoMediaDrm
Sets the value of a byte array property.- Specified by:
setPropertyByteArray
in interfaceExoMediaDrm
- Parameters:
propertyName
- The property name.value
- The value.
-
createCryptoConfig
public CryptoConfig createCryptoConfig(byte[] sessionId) throws MediaCryptoException
Description copied from interface:ExoMediaDrm
Creates aCryptoConfig
that can be passed to a compatible decoder to allow decryption of protected content using the specified session.- Specified by:
createCryptoConfig
in interfaceExoMediaDrm
- Parameters:
sessionId
- The ID of the session.- Returns:
- A
CryptoConfig
for the given session. - Throws:
MediaCryptoException
- If aCryptoConfig
could not be created.
-
getCryptoType
public @com.google.android.exoplayer2.C.CryptoType int getCryptoType()
Description copied from interface:ExoMediaDrm
- Specified by:
getCryptoType
in interfaceExoMediaDrm
-
getReferenceCount
public int getReferenceCount()
-
triggerEvent
public void triggerEvent(Predicate<byte[]> sessionIdPredicate, int event, int extra, @Nullable byte[] data)
CallsExoMediaDrm.OnEventListener.onEvent(ExoMediaDrm, byte[], int, int, byte[])
on the attached listener (if present) once for each open session ID which passessessionIdPredicate
, passing the provided values forevent
,extra
anddata
.
-
resetProvisioning
public void resetProvisioning()
Resets the provisioning state of this instance, so it requiresprovisionsRequired
(possibly zero) provision operations before it's operational again.
-
-