A criptografia de vídeo do Alibaba Cloud protege transmissões ao vivo durante a transcodificação para impedir a redistribuição não autorizada em cenários como educação online, treinamentos corporativos e eventos ao vivo premium.
A criptografia é compatível apenas com os formatos HTTP Live Streaming (HLS) e Flash Video (FLV).
Vídeos criptografados exigem os SDKs do ApsaraVideo Player para reprodução. Players de terceiros não conseguem descriptografar o conteúdo.
Para verificar a compatibilidade com navegadores HTML5, consulte Compatibilidade com navegadores.
Como funciona
A criptografia de vídeo do Alibaba Cloud utiliza criptografia de envelope com o KMS para proteger o conteúdo das transmissões ao vivo. Os arquivos baixados permanecem criptografados e não podem ser reproduzidos sem uma descriptografia autorizada, o que evita a redistribuição não autorizada e a pirataria. O processo ocorre em duas fases:
Criptografia e transcodificação (etapas 1-3)
Quando um host inicia a ingestão de uma transmissão ao vivo, o ApsaraVideo Live executa as seguintes ações:
Solicita um par de chaves (chave em texto simples e chave cifrada) ao KMS.
Utiliza a chave em texto simples para criptografar simetricamente a transmissão ao vivo durante a transcodificação.
Incorpora a chave cifrada correspondente na saída de vídeo transcodificada.
Descriptografia e reprodução (etapas 4-11)
Quando um cliente reproduz a transmissão criptografada:
O cliente solicita uma URL de streaming ao seu AppServer.
Com essa URL, o cliente solicita a transmissão ao vivo do ApsaraVideo Live, que retorna o vídeo criptografado contendo a chave cifrada incorporada.
O cliente extrai a chave cifrada e a envia ao ApsaraVideo Live para solicitar a chave de descriptografia.
O ApsaraVideo Live usa a chave cifrada para recuperar a chave em texto simples do KMS, criptografa-a novamente e retorna a chave encapsulada ao cliente.
-
O SDK do ApsaraVideo Player descriptografa a chave encapsulada para obter a chave em texto simples e, em seguida, descriptografa a transmissão ao vivo para reprodução.
Recursos de segurança da chave
|
Recurso |
Descrição |
|
Chaves de criptografia por arquivo |
Cada arquivo de mídia utiliza uma chave dedicada. O vazamento de uma única chave não compromete os demais arquivos. |
|
Criptografia de envelope |
As chaves em texto simples existem apenas na memória durante o processamento e nunca são armazenadas permanentemente. |
|
Gerenciamento de permissões |
Controle o acesso por meio de usuários do RAM e credenciais de reprodução. |
|
SDKs de player seguros |
O ApsaraVideo Live fornece SDKs de player no nível do kernel para garantir uma descriptografia segura. |
Configure criptografia
Configure a criptografia de vídeo por meio de um modelo de transcodificação utilizando o console ou uma API.
É obrigatório ter uma chave do KMS na mesma região do seu domínio de streaming. Caso não possua uma, crie-a no KMS consultando o Guia de início rápido de gerenciamento de chaves.
Método 1: Usar o console
Faça login no console do ApsaraVideo Live.
No painel de navegação à esquerda, escolha Feature Management > Transcoding. Crie ou edite um modelo de transcodificação com a criptografia ativada.
Para obter as etapas detalhadas sobre a criação de um modelo de transcodificação, consulte Casos de uso.
Método 2: Chamar uma operação de API
Chame a operação AddLiveStreamTranscode para criar um modelo de transcodificação padrão ou AddCustomLiveStreamTranscode para criar um modelo personalizado. Especifique o parâmetro EncryptParameters com EncryptType definido como aliyun.
Exemplo de SDK Java:
O exemplo abaixo adiciona uma configuração de transcodificação padrão com a criptografia ativada.
// This file is auto-generated, don't edit it. Thanks.
package demo;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.live20161101.models.*;
import com.aliyun.sdk.service.live20161101.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;
//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.io.*;
public class AddLiveStreamTranscode {
public static void main(String[] args) throws Exception {
// HttpClient Configuration
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
.responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
.maxConnections(128) // Set the connection pool size
.maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
// Configure the proxy
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001))
.setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>"))
// If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Configure Credentials authentication information, including ak, secret, token
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
.accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
//.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
.build());
// Configure the Client
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // Region ID
//.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // Service-level configuration
// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// The endpoint. Refer to https://api.alibabacloud.com/product/live
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Parameter settings for API request
AddLiveStreamTranscodeRequest addLiveStreamTranscodeRequest = AddLiveStreamTranscodeRequest.builder()
.regionId("<Your RegionId>")
.domain("<Your Domain>")
.app("<Your App Name>")
.template("<Your Template>")
.encryptParameters("<Your EncryptParameters>")
// Request-level configuration rewrite, can set Http request parameters, etc.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Asynchronously get the return value of the API request
CompletableFuture<AddLiveStreamTranscodeResponse> response = client.addLiveStreamTranscode(addLiveStreamTranscodeRequest);
// Synchronously get the return value of the API request
AddLiveStreamTranscodeResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Asynchronous processing of return values
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Handling exceptions
System.out.println(throwable.getMessage());
return null;
});*/
// Finally, close the client
client.close();
}
}
Substitua os seguintes espaços reservados:
|
Espaço reservado |
Descrição |
Exemplo |
|
|
Região onde reside o seu domínio de streaming |
|
|
|
Nome do seu domínio de streaming |
|
|
|
AppName da transmissão ao vivo |
|
|
|
Nome do modelo de transcodificação |
|
|
|
ID da chave do KMS (deve estar na mesma região) |
|
Após modificar uma configuração de transcodificação, ingira a transmissão novamente para que as alterações entrem em vigor.
Para mais informações sobre o SDK de servidor Java, consulte Usar o SDK de servidor para Java.
APIs relacionadas
|
API |
Descrição |
|
Atualiza uma configuração de transcodificação padrão. |
|
|
Atualiza uma configuração de transcodificação personalizada. |
|
|
Recupera as configurações de transcodificação de um domínio de streaming. |
|
|
Exclui uma configuração de transcodificação. |
Referências
Ativar a criptografia de vídeo cria automaticamente a função vinculada ao serviço
AliyunServiceRoleForLiveKes, que concede ao ApsaraVideo Live acesso ao KMS. Consulte Gerencie função vinculada ao serviço para criptografia de vídeo.Para uma abordagem alternativa de criptografia compatível com protocolos DRM padrão, consulte Criptografia DRM.