FrameworkMediaDrm
public final class FrameworkMediaDrm implements ExoMediaDrm
An ExoMediaDrm implementation that wraps the framework MediaDrm.
Summary
Constants |
|
|---|---|
static final ExoMediaDrm.Provider |
|
Public methods |
|
|---|---|
synchronized void |
Increments the reference count. |
void |
@UnstableApiCloses a DRM session. |
FrameworkCryptoConfig |
@UnstableApiCreates a |
int |
Returns the |
ExoMediaDrm.KeyRequest |
@UnstableApiGenerates a key request. |
@Nullable PersistableBundle |
Returns metrics data for this ExoMediaDrm instance, or |
List<byte[]> |
@UnstableApiReturns a list of the |
byte[] |
@UnstableApiReturns the value of a byte array property. |
String |
@UnstableApiReturns the value of a string property. |
ExoMediaDrm.ProvisionRequest |
Generates a provisioning request. |
static boolean |
isCryptoSchemeSupported(UUID uuid)Returns whether the DRM scheme with the given UUID is supported on this device. |
static FrameworkMediaDrm |
@UnstableApiCreates an instance with an initial reference count of 1. |
byte[] |
Opens a new DRM session. |
@Nullable byte[] |
@UnstableApiProvides a key response for the last request to be generated using |
void |
@UnstableApiProvides a provisioning response for the last request to be generated using |
Map<String, String> |
@UnstableApiReturns the key status for a given session, as {name, value} pairs. |
synchronized void |
Decrements the reference count. |
void |
@UnstableApiRemoves an offline license. |
boolean |
@UnstableApiReturns whether the given session requires use of a secure decoder for the given MIME type. |
void |
@UnstableApiRestores persisted offline keys into a session. |
void |
Sets the listener for DRM events. |
void |
@UnstableApiSets the listener for session expiration events. |
void |
Sets the listener for key status change events. |
void |
@UnstableApiSets the |
void |
@UnstableApiSets the value of a byte array property. |
void |
@UnstableApiSets the value of a string property. |
Inherited Constants |
||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Constants
DEFAULT_PROVIDER
@UnstableApi
public static final ExoMediaDrm.Provider DEFAULT_PROVIDER
ExoMediaDrm.Provider that returns a new FrameworkMediaDrm for the requested UUID. Returns a DummyExoMediaDrm if the protection scheme identified by the given UUID is not supported by the device.
Public methods
acquire
@UnstableApi
synchronized 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
@UnstableApi
public void closeSession(byte[] sessionId)
Closes a DRM session.
| Parameters | |
|---|---|
byte[] sessionId |
The ID of the session to close. |
createCryptoConfig
@UnstableApi
public FrameworkCryptoConfig 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 | |
|---|---|
FrameworkCryptoConfig |
A |
| Throws | |
|---|---|
android.media.MediaCryptoException |
If a |
getCryptoType
@UnstableApi
@C.CryptoType
public int getCryptoType()
Returns the type of CryptoConfig instances returned by createCryptoConfig.
getKeyRequest
@UnstableApi
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
@UnstableApi
public @Nullable PersistableBundle getMetrics()
Returns metrics data for this ExoMediaDrm instance, or null if metrics are unavailable.
getOfflineLicenseKeySetIds
@UnstableApi
@RequiresApi(value = 29)
public List<byte[]> getOfflineLicenseKeySetIds()
Returns a list of the keySetIds for all offline licenses.
This is an optional method, and some implementations may only support it on certain Android API levels.
See getOfflineLicenseKeySetIds for more details.
| Returns | |
|---|---|
List<byte[]> |
The list of |
| Throws | |
|---|---|
java.lang.UnsupportedOperationException |
if the implementation doesn't support this method. |
getPropertyByteArray
@UnstableApi
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
@UnstableApi
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
@UnstableApi
public ExoMediaDrm.ProvisionRequest getProvisionRequest()
Generates a provisioning request.
| Returns | |
|---|---|
ExoMediaDrm.ProvisionRequest |
The generated provisioning request. |
isCryptoSchemeSupported
public static boolean isCryptoSchemeSupported(UUID uuid)
Returns whether the DRM scheme with the given UUID is supported on this device.
| See also | |
|---|---|
isCryptoSchemeSupported |
newInstance
@UnstableApi
public static FrameworkMediaDrm newInstance(UUID uuid)
Creates an instance with an initial reference count of 1. release must be called on the instance when it's no longer required.
| Parameters | |
|---|---|
UUID uuid |
The scheme uuid. |
| Returns | |
|---|---|
FrameworkMediaDrm |
The created instance. |
| Throws | |
|---|---|
androidx.media3.exoplayer.drm.UnsupportedDrmException |
If the DRM scheme is unsupported or cannot be instantiated. |
openSession
@UnstableApi
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
@UnstableApi
public @Nullable 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 | |
|---|---|
@Nullable 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
@UnstableApi
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
@UnstableApi
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
@UnstableApi
synchronized 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.
removeOfflineLicense
@UnstableApi
@RequiresApi(value = 29)
public void removeOfflineLicense(byte[] keySetId)
Removes an offline license.
This method is generally not needed, and should only be used if the preferred approach of generating a license release request by passing KEY_TYPE_RELEASE to getKeyRequest is not possible.
This is an optional method, and some implementations may only support it on certain Android API levels.
See removeOfflineLicense for more details.
| Parameters | |
|---|---|
byte[] keySetId |
The |
| Throws | |
|---|---|
java.lang.UnsupportedOperationException |
if the implementation doesn't support this method. |
requiresSecureDecoder
@UnstableApi
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. |
restoreKeys
@UnstableApi
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
@UnstableApi
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
@UnstableApi
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
@UnstableApi
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 |
setPlayerIdForSession
@UnstableApi
public void setPlayerIdForSession(byte[] sessionId, PlayerId playerId)
Sets the PlayerId of the player using a session.
setPropertyByteArray
@UnstableApi
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
@UnstableApi
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. |