Pré-requisitos
Antes de implementar o DRM offline para FairPlay num dispositivo iOS 10+
- Ler os requisitos de licença e configuração do Apple FairPlay
- Obtenha o SDK FPS a partir da Apple Developer Network. O SDK FPS contém dois componentes:
- O SDK do Servidor FPS, que contém o Key Security Module (KSM), exemplos de cliente, uma especificação e um conjunto de vetores de teste.
- O Pacote de Implementação FPS, que contém a especificação da função D, juntamente com instruções sobre como gerar a chave privada específica do cliente do Certificado FPS e a Chave Secreta da Aplicação. A Apple emite o Pacote de Implementação FPS apenas para fornecedores de conteúdos licenciados.
- Os ficheiros de certificado .der/.cer que recebe como parte da geração do certificado FPS contêm uma chave pública e podem ser disponibilizados ao cliente. A chave privada (.pfx) deve ser protegida no Azure Key Vault ou noutra localização segura.
Armazenar uma Chave Privada do FairPlay (.pfx) no Azure Key Vault
A chave privada (.pfx) que recebe da Apple deve ser tratada como um certificado seguro e pode ser armazenada no Azure Key Vault.
- O ficheiro de certificado .pfx deve ser convertido em ficheiro de texto base 64 pelo administrador
- Uma vez convertido, este ficheiro pode ser armazenado nos Serviços de DevOps do Azure como um ficheiro de texto seguro.
- Em seguida, a cadeia pode ser armazenada no Azure KeyVault manualmente como um "objeto secreto" ou como parte de um script de implementação/compilação para a sua solução. Pode ver um exemplo de armazenamento do certificado privado FairPlay no Azure KeyVault no código de exemplo do projeto Gridwich
- Opcionalmente, armazene a palavra-passe do ficheiro .pfx como um segredo no cofre de chaves.
Script da CLI de exemplo
Para copiar o ficheiro de chave privada codificada base64 para o KeyVault do Azure:
set -eu
echo key vault : $SHARED_KV_NAME
echo "Copying FairPlay certificate to key vault as secret"
az keyvault secret set --vault-name $SHARED_KV_NAME -n ams-fairPlay-certificate-b64 -f $(FairPlayCertificate.secureFilePath) --output none
Clonar o exemplo
Clone os exemplos de .Net dos Serviços de Multimédia.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
Modificar o código
Modifique o código em Encriptar com DRM com .NET para adicionar configurações do FairPlay.
Nota
O Widevine não está disponível na região govCloud.
Pré-requisitos
Antes de implementar o DRM offline para Widevine em dispositivos Android, deve primeiro:
Ativar o modo offline
Para ativar o modo offline para licenças widevine, configure o modelo de licença widevine. No objeto policy_overrides , defina a propriedade can_persist como verdadeiro, conforme mostrado em ConfigurarWidevineLicenseTemplate.
A forma mais fácil de desenvolver uma aplicação de leitor nativo para dispositivos Android é utilizar o SDK Do Google ExoPlayer, um SDK de leitor de vídeo open source. O ExoPlayer suporta funcionalidades não suportadas atualmente pela API MediaPlayer nativa do Android, incluindo protocolos de entrega MPEG-DASH e Microsoft Smooth Streaming.
A versão 2.6 e superior do ExoPlayer inclui muitas classes que suportam a reprodução offline do Widevine DRM. Em particular, a OfflineLicenseHelper
classe fornece funções utilitárias para facilitar a utilização do DefaultDrmSessionManager para transferir, renovar e libertar licenças offline. As classes fornecidas na pasta library/core/src/main/java/com/google/android/exoplayer2/offline/
SDK suportam a transferência de conteúdos de vídeo offline.
A seguinte lista de classes facilita o modo offline no SDK ExoPlayer para Android:
library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ErrorStateDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java
library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloaderConstructorHelper.java
library/core/src/main/java/com/google/android/exoplayer2/offline/Downloader.java
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/offline/DashDownloader.java
Os programadores devem referenciar o Guia do Programador do ExoPlayer e o Blogue do Programador correspondente durante o desenvolvimento de uma aplicação.
Trabalhar com dispositivos Android mais antigos
Para alguns dispositivos Android mais antigos, tem de definir valores para as seguintes propriedades de policy_overrides (definidas no modelo de licença Widevine: rental_duration_seconds, playback_duration_seconds e license_duration_seconds. Em alternativa, pode defini-los como 0
, o que significa que não existe restrição de tempo.
Aviso
Os valores têm de ser definidos para evitar um erro de excesso de número inteiro. Para obter mais explicações sobre o problema, consulte https://github.com/google/ExoPlayer/issues/3150 e https://github.com/google/ExoPlayer/issues/3112.
Se não definir explicitamente os valores, serão atribuídos valores muito grandes para PlaybackDurationRemaining e LicenseDurationRemaining (por exemplo, 9223372036854775807, que é o valor positivo máximo para um número inteiro de 64 bits). Como resultado, a licença Widevine aparece expirada e, por conseguinte, a desencriptação não acontecerá.
Este problema não ocorre no Android 5.0 Lollipop ou posterior, uma vez que o Android 5.0 é a primeira versão do Android, que foi concebida para suportar totalmente o ARMv8 (Advanced RISC Machine) e plataformas de 64 bits, enquanto o Android 4.4 KitKat foi originalmente concebido para suportar plataformas ARMv7 e de 32 bits como noutras versões mais antigas do Android.
Utilizar o Xamarin para criar uma aplicação de reprodução android
Pode encontrar enlaces Xamarin para ExoPlayer com as seguintes ligações:
Além disso, veja o seguinte tópico: enlace Xamarin.
Aplicações de leitor do Chrome para Android
A partir do lançamento do Chrome para Android v. 62, é suportada uma licença persistente no EME.
O Widevine L1 também é agora suportado no Chrome para Android. Isto permite-lhe criar aplicações de reprodução offline no Chrome se os utilizadores finais tiverem esta (ou superior) versão do Chrome.
Além disso, a Google produziu um exemplo de Aplicação Web Progressiva (PWA):
Se atualizar o browser Chrome para dispositivos móveis para v62 (ou superior) num telemóvel Android e testar a aplicação de exemplo alojada acima, verá que a transmissão em fluxo online e a reprodução offline funcionam.
A aplicação PWA open source acima é criada em Node.js. Se quiser alojar a sua própria versão num servidor Ubuntu, tenha em atenção os seguintes problemas comuns que podem impedir a reprodução:
- Problema CORS: o vídeo de exemplo na aplicação de exemplo está alojado no https://storage.googleapis.com/biograf-video-files/videos/. A Google configurou o CORS para todos os seus exemplos de teste alojados no registo do Google Cloud Storage. São servidos com cabeçalhos CORS, especificando explicitamente a entrada CORS:
https://biograf-155113.appspot.com
(o domínio no qual a Google aloja o respetivo exemplo) impedindo o acesso por qualquer outro site. Se tentar, verá o seguinte erro HTTP: Failed to load https://storage.googleapis.com/biograf-video-files/videos/poly-sizzle-2015/mp4/dash.mpd: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https:\//13.85.80.81:8080' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
- Problema de certificado: a partir do Chrome v58, o EME para Widevine necessita de HTTPS. Por conseguinte, tem de alojar a aplicação de exemplo através de HTTPS com um certificado X509. Um certificado de teste habitual não funciona devido aos seguintes requisitos: tem de obter um certificado que cumpra os seguintes requisitos mínimos:
- O Chrome e o Firefox exigem que SAN-Subject definição nome alternativo exista no certificado
- O certificado tem de ter uma AC fidedigna e um certificado de desenvolvimento autoassinado não funciona
- O certificado tem de ter um CN que corresponda ao nome DNS do servidor Web ou gateway
O formato de ficheiro de transmissão em fluxo suave (PIFF) com H264/AAC tem um enlace com PlayReady (AES-128 CTR). O ficheiro .ismv de transmissão em fluxo suave, assumindo que o áudio é muxed em vídeo, é em si um fMP4 e pode ser utilizado para reprodução. Se o conteúdo de transmissão em fluxo suave passar pela encriptação PlayReady, cada ficheiro .ismv torna-se um fragmento MP4 protegido por PlayReady. Pode escolher um ficheiro .ismv com a velocidade de transmissão preferencial e mudar o nome como .mp4 para transferência.
Existem duas opções para alojar o MP4 protegido pelo PlayReady para transferência progressiva:
- Pode colocar o MP4 no mesmo recurso de serviço de contentor/multimédia e utilizar o ponto final de transmissão em fluxo dos Serviços de Multimédia do Azure para transferência progressiva.
- Pode utilizar o URL de SAS para transferência progressiva diretamente a partir do Armazenamento do Azure.
Pode utilizar dois tipos de entrega de licenças do PlayReady:
- Serviço de entrega de licenças PlayReady nos Serviços de Multimédia do Azure
- Servidores de licenças PlayReady alojados em qualquer lugar.
Para obter uma licença PlayReady com o serviço de entrega AMS, veja o modelo de licença Serviços de Multimédia v3 com PlayReady.
Para testes de reprodução, pode utilizar uma Aplicação Universal do Windows no Windows 10. No Windows 10 Exemplos universais, existe um exemplo de leitor básico denominado Exemplo de Transmissão em Fluxo Adaptável. Adicione o código para escolher o vídeo transferido e utilize-o como origem, em vez da origem de transmissão em fluxo adaptável.