Autenticación DRM antes de la reproducción

Cuando los metadatos DRM de un vídeo están separados del flujo de medios, realice la autenticación antes de comenzar la reproducción.

Un recurso de vídeo puede tener asociado un archivo de metadatos DRM. Por ejemplo:

  • "url": "https://www.domain.com/asset.m3u8"
  • "drmMetadata": "https://www.domain.com/asset.metadata"

En este caso, utilice los métodos DRMHelper para descargar el contenido del archivo de metadatos DRM, analizarlo y comprobar si es necesaria la autenticación DRM.

  1. Utilice loadDRMMetadata para cargar el contenido de la URL de metadatos y analizar los bytes descargados en DRMMetadata.

    Como cualquier otra operación de red, este método es asincrónico, creando su propio subproceso.

    public static void loadDRMMetadata( 
        final DRMManager drmManager, 
        final String drmMetadataUrl,  
        final DRMLoadMetadataListener loadMetadataListener); 
    

    Por ejemplo:

    DRMHelper.loadDRMMetadata(drmManager, metadataURL, new DRMLoadMetadataListener());
    
  2. Como la operación es asincrónica, es aconsejable que el usuario lo sepa. De lo contrario, se preguntará por qué su reproducción no comienza. Por ejemplo, mostrar una rueda giratoria mientras se descargan y analizan los metadatos DRM.

  3. Implemente las llamadas de retorno en DRMLoadMetadataListener. El loadDRMMetadata llama a estos controladores de eventos (envía estos eventos).

    public interface  
     <b>DRMLoadMetadataListener</b> { 
     public void  
     <b>onLoadMetadataUrlStart</b>(); 
     /** 
      * @param authNeeded 
      * whether DRM authentication is needed. 
      * @param drmMetadata 
      * the parsed DRMMetadata obtained.    */ 
     public void  
     <b>onLoadMetadataUrlComplete</b>(boolean authNeeded, DRMMetadata drmMetadata); 
     public void  
     <b>onLoadMetadataUrlError</b>(); 
    }
    
    • onLoadMetadataUrlStart detecta cuándo se ha iniciado la carga de la URL de metadatos.
    • onLoadMetadataUrlComplete detecta cuándo ha finalizado la carga de la URL de metadatos.
    • onLoadMetadataUrlError indica que los metadatos no se han cargado.
  4. Cuando la carga finalice, inspeccione el objeto DRMMetadata para ver si se necesita autenticación DRM.

    public static boolean <b>isAuthNeeded</b>(DRMMetadata drmMetadata);
    

    Por ejemplo:

    @Override 
    public void onLoadMetadataUrlComplete(boolean authNeeded, DRMMetadata drmMetadata) {  
      Log.i(LOG_TAG + "#onLoadMetadataUrlComplete",  
                      "Loaded metadata URL contents. Auth needed:" + authNeeded + "."); 
      if (!authNeeded) { 
          // Auth is not required. Start player activity.     
          showLoadingSpinner(false);     
          startPlayerActivity(ASSET_URL); 
          return; 
      }
    
  5. Si no se necesita autenticación, comience la reproducción.

  6. Si se necesita autenticación, realice la autenticación adquiriendo la licencia.

    /** 
    * Helper method to perform DRM authentication. 
    * 
    * @param drmManager 
    * the DRMManager, used to perform the authentication. 
    * @param drmMetadata 
    * the DRMMetadata, containing the DRM specific information. 
    * @param authenticationListener 
    * the listener, on which the user can be notified about the 
    * authentication process status. 
    */ 
    public static void performDrmAuthentication( 
         final DRMManager drmManager,  
         final DRMMetadata drmMetadata, 
         final String authUser,  
         final String authPass,  
         final DRMAuthenticationListener authenticationListener);
    

    En este ejemplo, para simplificar, se codifica explícitamente el nombre y la contraseña del usuario.

    DRMHelper.performDrmAuthentication(drmManager, drmMetadata, DRM_USERNAME, DRM_PASSWORD,  
      new DRMAuthenticationListener() { 
        @Override 
        public void onAuthenticationStart() { 
            Log.i(LOG_TAG + "#onAuthenticationStart", "DRM authentication started."); 
            // Spinner is already showing. 
        } 
        @Override 
        public void onAuthenticationError(int major, int minor, String errorString, String serverErrorURL) {  
            Log.e(LOG_TAG + "#onAuthenticationError", "DRM authentication failed. " +  
              major + " 0x" + Long.toHexString(minor)); 
            showToast(getString(R.string.drmAuthenticationError));   
            showLoadingSpinner(false); 
        } 
        @Override 
        public void onAuthenticationComplete(byte[] authenticationToken) { 
            Log.i(LOG_TAG + "#onAuthenticationComplete", "Auth successful. Launching content."); 
            showLoadingSpinner(false); 
            startPlayerActivity(ASSET_URL); 
        } 
    }); 
    
  7. Esto también implica comunicación de red, por lo que también es una operación asincrónica. Utilice un detector de eventos para comprobar el estado de autenticación.

    public interface DRMAuthenticationListener { 
        /** 
        * Called to indicate that DRM authentication has started. 
        */ 
        public void onAuthenticationStart(); 
        /** 
        * Called to indicate that DRM authentication has been successful. 
        * 
        * @param authenticationToken 
        * the obtained token, which can be stored locally. 
        */ 
        public void onAuthenticationComplete(byte[] authenticationToken); 
        /** 
        * Called to indicate that an error occurred while performing the DRM 
        * authentication. 
        * 
        * @param major 
        * the major code. 
        * @param minorC 
        * the minor code. 
        * @param errorString 
        * the exception thrown. 
        * @param serverErrorURL 
        * the URL of the server  
        * on which the error occurred 
        */ 
        public void onAuthenticationError(int major, int minor,  
          String errorString, String serverErrorURL); 
    } 
    
  8. Si la autenticación se realiza correctamente, inicie la reproducción.

  9. Si la autenticación no se realiza correctamente, notifique al usuario y no inicie la reproducción.

La aplicación debe gestionar los errores de autenticación. Al no autenticarse correctamente antes de reproducir, TVSDK pasa a un estado de error. Es decir, cambia su estado a ERROR, se genera un error que contiene el código de error de la biblioteca DRM y la reproducción se detiene. La aplicación debe resolver el problema, restablecer el reproductor y volver a cargar el recurso.

En esta página

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now