Class CastlabsMediaDrm

java.lang.Object
com.castlabs.android.drm.CastlabsMediaDrm

public class CastlabsMediaDrm extends Object
A wrapper around FrameworkMediaDrm that provides asynchronous session management capabilities. This class handles DRM session operations with proper resource management and thread safety.
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    Exception thrown when operations on the MediaDrm instance fail.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    closeSession(byte[] sessionId)
    Asynchronously closes the specified DRM session.
    void
    closeSessionSync(byte[] sessionId)
    Synchronously closes the specified DRM session.
    com.google.android.exoplayer2.drm.FrameworkMediaCrypto
    createMediaCrypto(byte[] initData)
    Creates a MediaCrypto instance for the specified initialization data.
    com.google.android.exoplayer2.drm.ExoMediaDrm.KeyRequest
    getKeyRequest(byte[] scope, List<com.google.android.exoplayer2.drm.DrmInitData.SchemeData> schemeDatas, int keyType, HashMap<String,String> optionalParameters)
    Gets a key request for the specified session and key type.
    byte[]
    Gets a byte array property from the MediaDrm instance.
    getPropertyString(String propertyName)
    Gets a string property from the MediaDrm instance.
    com.google.android.exoplayer2.drm.ExoMediaDrm.ProvisionRequest
    Gets a provision request for the device.
    Creates a new instance of CastlabsMediaDrm for the specified DRM scheme UUID.
    byte[]
    Opens a new DRM session.
    byte[]
    provideKeyResponse(byte[] scope, byte[] response)
    Provides a key response for the specified session.
    void
    provideProvisionResponse(byte[] response)
    Provides a provision response for the device.
    queryKeyStatus(byte[] sessionId)
    Queries the key status for the specified session.
    void
    Releases all resources associated with this MediaDrm instance.
    void
    Asynchronously releases all resources associated with this MediaDrm instance.
    void
    restoreKeys(byte[] sessionId, byte[] keySetId)
    Restores keys for the specified session.
    void
    setOnEventListener(com.google.android.exoplayer2.drm.ExoMediaDrm.OnEventListener<? super com.google.android.exoplayer2.drm.FrameworkMediaCrypto> listener)
    Sets the event listener for DRM events.
    void
    setOnKeyStatusChangeListener(com.google.android.exoplayer2.drm.ExoMediaDrm.OnKeyStatusChangeListener<? super com.google.android.exoplayer2.drm.FrameworkMediaCrypto> listener)
    Sets the key status change listener for DRM events.
    void
    setPropertyByteArray(String propertyName, byte[] value)
    Sets a byte array property on the MediaDrm instance.
    void
    setPropertyString(String propertyName, String value)
    Sets a string property on the MediaDrm instance.

    Methods inherited from class java.lang.Object

    equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • newInstance

      public static CastlabsMediaDrm newInstance(UUID uuid) throws com.google.android.exoplayer2.drm.UnsupportedDrmException
      Creates a new instance of CastlabsMediaDrm for the specified DRM scheme UUID.
      Parameters:
      uuid - The UUID of the DRM scheme to use
      Returns:
      A new CastlabsMediaDrm instance
      Throws:
      com.google.android.exoplayer2.drm.UnsupportedDrmException - If the DRM scheme is not supported
    • setOnEventListener

      public void setOnEventListener(com.google.android.exoplayer2.drm.ExoMediaDrm.OnEventListener<? super com.google.android.exoplayer2.drm.FrameworkMediaCrypto> listener)
      Sets the event listener for DRM events.
      Parameters:
      listener - The listener to be notified of DRM events
    • setOnKeyStatusChangeListener

      public void setOnKeyStatusChangeListener(com.google.android.exoplayer2.drm.ExoMediaDrm.OnKeyStatusChangeListener<? super com.google.android.exoplayer2.drm.FrameworkMediaCrypto> listener)
      Sets the key status change listener for DRM events.
      Parameters:
      listener - The listener to be notified of key status changes
    • openSession

      public byte[] openSession() throws NotProvisionedException, ResourceBusyException, MediaDrmException
      Opens a new DRM session.
      Returns:
      The session ID for the newly opened session
      Throws:
      NotProvisionedException - If the device is not provisioned
      ResourceBusyException - If the DRM system is busy
      MediaDrmException - If there was an error opening the session
    • closeSession

      public void closeSession(byte[] sessionId)
      Asynchronously closes the specified DRM session.
      Parameters:
      sessionId - The ID of the session to close
    • closeSessionSync

      public void closeSessionSync(byte[] sessionId)
      Synchronously closes the specified DRM session.
      Parameters:
      sessionId - The ID of the session to close
    • getKeyRequest

      public com.google.android.exoplayer2.drm.ExoMediaDrm.KeyRequest getKeyRequest(byte[] scope, @Nullable List<com.google.android.exoplayer2.drm.DrmInitData.SchemeData> schemeDatas, int keyType, HashMap<String,String> optionalParameters) throws NotProvisionedException
      Gets a key request for the specified session and key type.
      Parameters:
      scope - The session ID
      schemeDatas - The scheme data for the key request
      keyType - The type of key request
      optionalParameters - Optional parameters for the key request
      Returns:
      The key request
      Throws:
      NotProvisionedException - If the device is not provisioned
    • provideKeyResponse

      public byte[] provideKeyResponse(byte[] scope, byte[] response) throws NotProvisionedException, DeniedByServerException
      Provides a key response for the specified session.
      Parameters:
      scope - The session ID
      response - The key response
      Returns:
      The key response data
      Throws:
      NotProvisionedException - If the device is not provisioned
      DeniedByServerException - If the server denied the request
    • getProvisionRequest

      public com.google.android.exoplayer2.drm.ExoMediaDrm.ProvisionRequest getProvisionRequest()
      Gets a provision request for the device.
      Returns:
      The provision request
    • provideProvisionResponse

      public void provideProvisionResponse(byte[] response) throws DeniedByServerException
      Provides a provision response for the device.
      Parameters:
      response - The provision response
      Throws:
      DeniedByServerException - If the server denied the request
    • queryKeyStatus

      public Map<String,String> queryKeyStatus(byte[] sessionId)
      Queries the key status for the specified session.
      Parameters:
      sessionId - The session ID
      Returns:
      A map containing the key status information
    • release

      public void release()
      Releases all resources associated with this MediaDrm instance.
    • releaseAsync

      public void releaseAsync()
      Asynchronously releases all resources associated with this MediaDrm instance.
    • restoreKeys

      public void restoreKeys(byte[] sessionId, byte[] keySetId)
      Restores keys for the specified session.
      Parameters:
      sessionId - The session ID
      keySetId - The key set ID to restore
    • getPropertyString

      public String getPropertyString(String propertyName)
      Gets a string property from the MediaDrm instance.
      Parameters:
      propertyName - The name of the property
      Returns:
      The property value
    • getPropertyByteArray

      public byte[] getPropertyByteArray(String propertyName)
      Gets a byte array property from the MediaDrm instance.
      Parameters:
      propertyName - The name of the property
      Returns:
      The property value
    • setPropertyString

      public void setPropertyString(String propertyName, String value)
      Sets a string property on the MediaDrm instance.
      Parameters:
      propertyName - The name of the property
      value - The property value
    • setPropertyByteArray

      public void setPropertyByteArray(String propertyName, byte[] value)
      Sets a byte array property on the MediaDrm instance.
      Parameters:
      propertyName - The name of the property
      value - The property value
    • createMediaCrypto

      public com.google.android.exoplayer2.drm.FrameworkMediaCrypto createMediaCrypto(byte[] initData) throws MediaCryptoException
      Creates a MediaCrypto instance for the specified initialization data.
      Parameters:
      initData - The initialization data
      Returns:
      A new MediaCrypto instance
      Throws:
      MediaCryptoException - If there was an error creating the MediaCrypto instance