Este documento fornece uma visão geral da integração de filas e DRM suporte.
Melhorias de DRM
A demonstração do Cast do ExoPlayer
foi atualizada para utilizar uma forma estruturada de transmitir a configuração de DRM usando
MediaInfo
do ExoPlayer para um aplicativo receptor. Exemplo do Google Cast
também usa um receptor de demonstração que inclui o mesmo código nesta visão geral, permitindo
para testar o suporte ao DRM. No entanto, se você quiser transmitir conteúdo protegido por DRM
conteúdo, crie e hospede seu próprio
Receptor da Web.
Antes de começar, recomendamos que você se familiarize documentação sobre o suporte ao DRM em Google Cast e o ExoPlayer. Essa visão geral mostra como para conectar a configuração DRM do ExoPlayer a um receptor da Web. Para informações sobre como utilizar o DRM no ExoPlayer, consulte o Site do ExoPlayer (em inglês).
Fornecer a configuração de DRM
O app de demonstração do ExoPlayer contém um exemplo de código que mostra como fornecer DRM. como parte de um MediaItem. As quatro opções que você pode configurar são:
- Cabeçalhos: um dicionário de cabeçalhos aplicado à solicitação HTTPS para recuperar a licença de DRM.
- URL da licença: o URL usado para adquirir a licença.
- Sistema de proteção: o esquema de proteção DRM usado para proteger o conteúdo, por exemplo, Widevine.
A configuração de DRM fornecida ao ExoPlayer é enviada ao receptor
aplicativo como uma propriedade em customData
no MediaInformation
como parte de uma solicitação de carregamento. Por padrão, essa propriedade é chamada
exoPlayerConfig
, que corresponde à definição a seguir.
/**
* Extended configuration settings for ExoPlayer.
*/
ExoPlayerConfig class {
constructor() {
/**
* Dictionary of headers to apply to the license request.
* @type {!Object|undefined}
*/
this.headers;
/**
* The URL for your DRM server.
* @type {string|undefined}
*/
this.licenseUrl;
/**
* Preferred protection system to use for decrypting content.
* @type {!cast.framework.ContentProtection|undefined}
*/
this.protectionSystem;
/**
* Indicates whether CORS Access-Control requests should be made using
* credentials such as cookies or authorization headers.
*
* If withCredentials is set to true then Access-Control-Allow-Origin cannot
* be set to '*'.
* @type {boolean|undefined}
*/
this.withCredentials;
}
}
Configuração inicial
Dependendo da solução de DRM usada, talvez seja necessário configurar um licenseRequestHandler
.
e um mediaPlaybackInfoHandler
. O licenseRequestHandler
permite personalizar
como o CAF solicita uma licença do seu servidor de chave de licença. A
O mediaPlaybackInfoHandler
permite modificar o
PlaybackConfig
em cada item de mídia se, por exemplo, cada conteúdo precisar usar uma tag
um URL de servidor de licenças diferente.
Para capturar uma cópia do ExoPlayerConfig
de cada objeto de solicitação de carregamento, crie
um interceptador de solicitação de carregamento no aplicativo do SDK do receptor da Web.
A primeira etapa é registrar seus gerenciadores antes de iniciar a transmissão para o aplicativo.
const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.licenseRequestHandler =
licenseRequestHandler;
context.getPlayerManager().setMediaPlaybackInfoHandler(
mediaPlaybackInfoHandler);
context.getPlayerManager().setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
loadInterceptor);
// starts the Cast application
context.start({playbackConfig: playbackConfig});
Interceptador de solicitação de carregamento
O interceptador da solicitação de carregamento é um callback que permite visualizar e modificar um Solicitação de carregamento de transmissão antes que o CAF tente carregar um item de mídia. Importante, é chamado antes do manipulador de solicitação de licença e do gerenciador de informações de reprodução de mídia.
O interceptador da solicitação de carregamento recebe um LoadRequestData
.
que contém a configuração do Exo Player que foi enviada pelo seu app. Você pode
salve este objeto como uma variável global para usar em seu manipulador de solicitação de licença
e gerenciador de informações de reprodução de mídia.
loadInterceptor(loadRequestData) {
// not every load request will have a customData object
if (loadRequestData.media && loadRequestData.media.customData &&
loadRequestData.media.customData['exoPlayerConfig']) {
// exoPlayerConfig is a global variable here
exoPlayerConfig =
loadRequestData.media.customData['exoPlayerConfig'];
}
// you must return the loadRequestData object
return loadRequestData;
}
Gerenciador de solicitações de licença
O gerenciador de solicitações de licença permite personalizar a solicitação HTTPS da Web
O receptor faz para seu servidor de licenças. O gerenciador recebe um NetworkRequestInfo
, que pode ser usado para adicionar cabeçalhos HTTP, incluir cookies ou até mesmo
modifique o URL. O manipulador deve retornar esse objeto.
Por exemplo, se precisar adicionar cabeçalhos personalizados à solicitação de licença, poderia criar um gerenciador de solicitações de licença semelhante a este:
licenseRequestHandler(networkRequestInfo) {
if (!exoPlayerConfig) {
return networkRequestInfo;
}
networkRequestInfo.headers =
exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;
return networkRequestInfo;
}
Gerenciador de informações de reprodução de mídia
Com o gerenciador de informações de reprodução de mídia, é possível fazer mudanças na reprodução
para cada item de mídia. O gerenciador recebe um LoadRequestData
e um PlaybackConfig
,
você deve retornar uma configuração de reprodução. O gerenciador de informações de reprodução de mídia será
chamado antes que cada item transmitido seja carregado. Se você tiver URLs de licença por conteúdo,
para mudá-los e o sistema de proteção antes da carga.
mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
if (!exoPlayerConfig) {
return;
}
playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
exoPlayerConfig.licenseUrl :
undefined;
playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
exoPlayerConfig.protectionSystem :
undefined;
return playbackConfig;
}
Outros recursos
Cada implementação de DRM é personalizada, e o código é fornecido como demonstração . Consulte o provedor de DRM para verificar se você implementou o DRM nos aplicativos ExoPlayer e Cast.
O site do ExoPlayer (em inglês) apresenta documentação atualizada. e comunicados. Problemas com o ExoPlayer e a integração dele com o Cast podem ser relatado no GitHub do ExoPlayer (em inglês) repositório de dados.