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 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 Browser compatibility.
-
Para reproduzir o fluxo HLS criptografado, adicione um campo obrigatório fixo ao endereço original do fluxo criptografado:
aliyunols = on.Exemplo de URL de reprodução:
https://yourdomain/live/StreamName_ID.m3u8?auth_key=xxxxx&aliyunols=on.
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 a descriptografia autorizada, o que impede 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 ingere uma transmissão ao vivo, o ApsaraVideo Live executa as seguintes ações:
Solicita um par de chaves (chave em texto simples e chave em texto cifrado) ao KMS.
Utiliza a chave em texto simples para criptografar simetricamente a transmissão ao vivo durante a transcodificação.
Incorpora a chave em texto cifrado correspondente na saída de vídeo transcodificado.
Descriptografia e reprodução (etapas 4-11)
Quando um cliente reproduz o fluxo criptografado, ocorrem as seguintes etapas:
O cliente solicita uma URL de streaming ao seu AppServer.
Com essa URL, o cliente solicita a transmissão ao vivo ao ApsaraVideo Live, que retorna o vídeo criptografado contendo a chave em texto cifrado incorporada.
O cliente extrai a chave em texto cifrado e a envia ao ApsaraVideo Live para solicitar a chave de descriptografia.
O ApsaraVideo Live usa a chave em texto cifrado 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 usando o console ou uma API.
É necessário ter uma chave do KMS na mesma região do seu domínio de streaming. Caso ainda não possua uma, crie-a no KMS consultando Key management quickstart.
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 como criar um modelo de transcodificação, consulte Use cases.
Método 2: Chamar uma operação de API
Chame AddLiveStreamTranscode para criar um modelo de transcodificação padrão ou AddCustomLiveStreamTranscode para criar um modelo de transcodificação 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 placeholders:
|
Placeholder |
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, reingere o fluxo para que as alterações entrem em vigor.
Para mais informações sobre o SDK de servidor Java, consulte Use the server SDK for 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 service
AliyunServiceRoleForLiveKes, que concede ao ApsaraVideo Live acesso ao KMS. Gerencie service-linked role for video encryption.Para uma abordagem alternativa de criptografia compatível com protocolos DRM padrão, consulte DRM encryption.