Interface ContentProtectionIntegration

This ContentProtectionIntegration defines some methods to alter license and certificate requests and responses.

interface ContentProtectionIntegration {
    extractFairplayContentId?(skdUrl): MaybeAsync<string>;
    onCertificateRequest?(request): MaybeAsync<BufferSource | Partial<ContentProtectionRequest>>;
    onCertificateResponse?(response): MaybeAsync<BufferSource>;
    onLicenseRequest?(request): MaybeAsync<BufferSource | Partial<LicenseRequest>>;
    onLicenseResponse?(response): MaybeAsync<BufferSource>;
}

Methods

  • A function to extract the Fairplay content ID from the key URI, as given by the URI attribute of the #EXT-X-KEY tag in the HLS playlist (m3u8).

    Parameters

    • skdUrl: string

      The key URI.

    Returns MaybeAsync<string>

    Remarks

    In order to start a Fairplay license request, the player must provide the initialization data, the content ID and the certificate to the CDM. The content ID is usually contained in the key URI in some vendor-specific way, for example in the host name (e.g. skd://123456789) or in the URL query (e.g. skd://vendor?123456789). This function should extract this content ID from the key URI. This method is required only for Fairplay integrations. It is ignored for other key systems.

  • Handler which will be called when a HTTP request for a new certificate is about to be sent.

    Parameters

    Returns MaybeAsync<BufferSource | Partial<ContentProtectionRequest>>

    Remarks

    If a valid certificate was provided as part of the KeySystemConfiguration.certificate, this handler will not be called. The handler must return either a request or a raw certificate. When a (possibly modified) request is returned, the player will send that request instead of the original request. When a raw certificate is returned, the request is skipped entirely and the certificate is used directly. If no handler is provided, the player sends the original request.

    For example, an integration may want to “wrap” the request body in a different format (e.g. JSON or XML) for certain DRM vendors, or add additional authentication tokens to the request. Alternatively, an integration may want to send the HTTP request using its own network stack, and return the final certificate response to the player.

  • Handler which will be called when a HTTP request for a certificate returns a response.

    Parameters

    Returns MaybeAsync<BufferSource>

    Remarks

    The handler will be called regardless of the HTTP status code on the response (i.e. also for unsuccessful statuses outside of the 200-299 range). The handler must return the raw certificate, in a manner suitable for further processing by the CDM. If no handler is provided, the player uses the response body as raw certificate, but only if the response’s status indicates success.

    For example, an integration may want to “unwrap” a wrapped JSON or XML response body, turning it into a raw certificate.

  • Handler which will be called when a HTTP request for a new license is about to be sent.

    Parameters

    Returns MaybeAsync<BufferSource | Partial<LicenseRequest>>

    Remarks

    The handler must return either a request or a raw license. When a (possibly modified) request is returned, the player will send that request instead of the original request. When a raw license is returned, the request is skipped entirely and the license is used directly. If no handler is provided, the player sends the original request.

    For example, an integration may want to “wrap” the request body in a different format (e.g. JSON or XML) for certain DRM vendors, or add additional authentication tokens to the request. Alternatively, an integration may want to send the HTTP request using its own network stack, and return the final license response to the player.

  • Handler which will be called when a HTTP request for a license returns an response.

    Parameters

    Returns MaybeAsync<BufferSource>

    Remarks

    The handler will be called regardless of the HTTP status code on the response (i.e. also for unsuccessful statuses outside of the 200-299 range). The handler must return the raw license, in a manner suitable for further processing by the CDM. If no handler is provided, the player uses the response body as raw license, but only if the response’s status indicates success.

    For example, an integration may want to “unwrap” a wrapped JSON or XML response body, turning it into a raw license.