FakeExoMediaDrm
@RequiresApi(value = 29)
@UnstableApi
public final class FakeExoMediaDrm implements ExoMediaDrm
A fake implementation of ExoMediaDrm for use in tests.
LicenseServer can be used to respond to interactions stemming from getKeyRequest and provideKeyResponse.
Currently only supports streaming key requests.
Summary
Nested types |
|---|
public class FakeExoMediaDrm.BuilderBuilder for |
public class FakeExoMediaDrm.LicenseServer implements MediaDrmCallbackAn license server implementation to interact with |
public final class FakeExoMediaDrm.LicenseServer.BuilderBuilder for |
Constants |
|
|---|---|
static final ExoMediaDrm.ProvisionRequest |
|
static final String |
KEY_STATUS_AVAILABLE = "AVAILABLE"Value for use with the Map returned from |
static final String |
KEY_STATUS_KEY = "KEY_STATUS"Key for use with the Map returned from |
static final String |
KEY_STATUS_UNAVAILABLE = "UNAVAILABLE"Value for use with the Map returned from |
static final Uri |
The license server URL used in the return value from |
static final ImmutableList<Byte> |
Public fields |
|
|---|---|
int |
Public constructors |
|---|
|
This method is deprecated. Use |
This method is deprecated. Use |
Public methods |
|
|---|---|
void |
acquire()Increments the reference count. |
void |
closeSession(byte[] sessionId)Closes a DRM session. |
CryptoConfig |
createCryptoConfig(byte[] sessionId)Creates a |
int |
Returns the |
ExoMediaDrm.KeyRequest |
getKeyRequest(Generates a key request. |
@Nullable PersistableBundle |
Returns metrics data for this ExoMediaDrm instance, or |
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 |
Generates a provisioning request. |
int |
|
byte[] |
Opens a new DRM session. |
byte[] |
provideKeyResponse(byte[] scope, byte[] response)Provides a key response for the last request to be generated using |
void |
provideProvisionResponse(byte[] response)Provides a provisioning response for the last request to be generated using |
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 |
Resets the provisioning state of this instance, so it requires |
void |
restoreKeys(byte[] sessionId, byte[] keySetId)Restores persisted offline keys into a session. |
void |
Sets the listener for DRM events. |
void |
Sets the listener for session expiration events. |
void |
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(Calls |
Inherited Constants |
||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Inherited methods |
||||||
|---|---|---|---|---|---|---|
|
Constants
KEY_STATUS_AVAILABLE
public static final String KEY_STATUS_AVAILABLE = "AVAILABLE"
Value for use with the Map returned from queryKeyStatus.
KEY_STATUS_KEY
public static final String KEY_STATUS_KEY = "KEY_STATUS"
Key for use with the Map returned from queryKeyStatus.
KEY_STATUS_UNAVAILABLE
public static final String KEY_STATUS_UNAVAILABLE = "UNAVAILABLE"
Value for use with the Map returned from queryKeyStatus.
LICENSE_SERVER_URI
public static final Uri LICENSE_SERVER_URI
The license server URL used in the return value from getKeyRequest.
Public fields
Public constructors
Public methods
acquire
public void acquire()
Increments the reference count. When the caller no longer needs to use the instance, it must call 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.
closeSession
public void closeSession(byte[] sessionId)
Closes a DRM session.
| Parameters | |
|---|---|
byte[] sessionId |
The ID of the session to close. |
createCryptoConfig
public CryptoConfig createCryptoConfig(byte[] sessionId)
Creates a CryptoConfig that can be passed to a compatible decoder to allow decryption of protected content using the specified session.
| Parameters | |
|---|---|
byte[] sessionId |
The ID of the session. |
| Returns | |
|---|---|
CryptoConfig |
A |
| Throws | |
|---|---|
android.media.MediaCryptoException |
If a |
getCryptoType
@C.CryptoType
public int getCryptoType()
Returns the type of CryptoConfig instances returned by createCryptoConfig.
getKeyRequest
public ExoMediaDrm.KeyRequest getKeyRequest(
byte[] scope,
@Nullable List<DrmInitData.SchemeData> schemeDatas,
int keyType,
@Nullable HashMap<String, String> optionalParameters
)
Generates a key request.
| Parameters | |
|---|---|
byte[] scope |
If |
@Nullable List<DrmInitData.SchemeData> schemeDatas |
If key type is |
int keyType |
The type of the request. Either |
@Nullable HashMap<String, String> optionalParameters |
Are included in the key request message to allow a client application to provide additional message parameters to the server. This may be |
| Returns | |
|---|---|
ExoMediaDrm.KeyRequest |
The generated key request. |
| See also | |
|---|---|
getKeyRequest |
getMetrics
public @Nullable PersistableBundle getMetrics()
Returns metrics data for this ExoMediaDrm instance, or null if metrics are unavailable.
getPropertyByteArray
public byte[] getPropertyByteArray(String propertyName)
Returns the value of a byte array property. For standard property names, see getPropertyByteArray.
| Parameters | |
|---|---|
String propertyName |
The property name. |
| Returns | |
|---|---|
byte[] |
The property value. |
| Throws | |
|---|---|
java.lang.IllegalArgumentException |
If the underlying DRM plugin does not support the property. |
getPropertyString
public String getPropertyString(String propertyName)
Returns the value of a string property. For standard property names, see getPropertyString.
| Parameters | |
|---|---|
String propertyName |
The property name. |
| Returns | |
|---|---|
String |
The property value. |
| Throws | |
|---|---|
java.lang.IllegalArgumentException |
If the underlying DRM plugin does not support the property. |
getProvisionRequest
public ExoMediaDrm.ProvisionRequest getProvisionRequest()
Generates a provisioning request.
| Returns | |
|---|---|
ExoMediaDrm.ProvisionRequest |
The generated provisioning request. |
openSession
public byte[] openSession()
Opens a new DRM session. A session ID is returned.
| Returns | |
|---|---|
byte[] |
The session ID. |
| Throws | |
|---|---|
android.media.NotProvisionedException |
If provisioning is needed. |
android.media.ResourceBusyException |
If required resources are in use. |
android.media.MediaDrmException |
If the session could not be opened. |
provideKeyResponse
public byte[] provideKeyResponse(byte[] scope, byte[] response)
Provides a key response for the last request to be generated using getKeyRequest.
| Parameters | |
|---|---|
byte[] scope |
If the request had type |
byte[] response |
The response data from the server. |
| Returns | |
|---|---|
byte[] |
If the request had type |
| Throws | |
|---|---|
android.media.NotProvisionedException |
If the response indicates that provisioning is needed. |
android.media.DeniedByServerException |
If the response indicates that the server rejected the request. |
provideProvisionResponse
public void provideProvisionResponse(byte[] response)
Provides a provisioning response for the last request to be generated using getProvisionRequest.
| Parameters | |
|---|---|
byte[] response |
The response data from the server. |
| Throws | |
|---|---|
android.media.DeniedByServerException |
If the response indicates that the server rejected the request. |
queryKeyStatus
public Map<String, String> queryKeyStatus(byte[] sessionId)
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.
| Parameters | |
|---|---|
byte[] sessionId |
The ID of the session being queried. |
release
public void release()
Decrements the reference count. If the reference count drops to 0 underlying resources are released, and the instance cannot be re-used.
requiresSecureDecoder
public boolean requiresSecureDecoder(byte[] sessionId, String mimeType)
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.
| Parameters | |
|---|---|
byte[] sessionId |
The ID of the session. |
String mimeType |
The content MIME type to query. |
resetProvisioning
public void resetProvisioning()
Resets the provisioning state of this instance, so it requires provisionsRequired (possibly zero) provision operations before it's operational again.
restoreKeys
public void restoreKeys(byte[] sessionId, byte[] keySetId)
Restores persisted offline keys into a session.
| Parameters | |
|---|---|
byte[] sessionId |
The ID of the session into which the keys will be restored. |
byte[] keySetId |
The |
setOnEventListener
public void setOnEventListener(@Nullable ExoMediaDrm.OnEventListener listener)
Sets the listener for DRM events.
This is an optional method, and some implementations may only support it on certain Android API levels.
| Parameters | |
|---|---|
@Nullable ExoMediaDrm.OnEventListener listener |
The listener to receive events, or |
| Throws | |
|---|---|
java.lang.UnsupportedOperationException |
if the implementation doesn't support this method. |
| See also | |
|---|---|
setOnEventListener |
setOnExpirationUpdateListener
public void setOnExpirationUpdateListener(
@Nullable ExoMediaDrm.OnExpirationUpdateListener listener
)
Sets the listener for session expiration events.
This is an optional method, and some implementations may only support it on certain Android API levels.
| Parameters | |
|---|---|
@Nullable ExoMediaDrm.OnExpirationUpdateListener listener |
The listener to receive events, or |
| Throws | |
|---|---|
java.lang.UnsupportedOperationException |
if the implementation doesn't support this method. |
| See also | |
|---|---|
setOnExpirationUpdateListener |
setOnKeyStatusChangeListener
public void setOnKeyStatusChangeListener(
@Nullable ExoMediaDrm.OnKeyStatusChangeListener listener
)
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.
| Parameters | |
|---|---|
@Nullable ExoMediaDrm.OnKeyStatusChangeListener listener |
The listener to receive events, or |
| Throws | |
|---|---|
java.lang.UnsupportedOperationException |
if the implementation doesn't support this method. |
| See also | |
|---|---|
setOnKeyStatusChangeListener |
setPropertyByteArray
public void setPropertyByteArray(String propertyName, byte[] value)
Sets the value of a byte array property.
| Parameters | |
|---|---|
String propertyName |
The property name. |
byte[] value |
The value. |
| Throws | |
|---|---|
java.lang.IllegalArgumentException |
If the underlying DRM plugin does not support the property. |
setPropertyString
public void setPropertyString(String propertyName, String value)
Sets the value of a string property.
| Throws | |
|---|---|
java.lang.IllegalArgumentException |
If the underlying DRM plugin does not support the property. |
triggerEvent
public void triggerEvent(
Predicate<byte[]> sessionIdPredicate,
int event,
int extra,
@Nullable byte[] data
)
Calls onEvent on the attached listener (if present) once for each open session ID which passes sessionIdPredicate, passing the provided values for event, extra and data.