Todos os produtos
Search
Central de documentação

ApsaraVideo Live:Criptografia de vídeo do Alibaba Cloud

Última atualização: Jun 30, 2026

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.

Nota
  • 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:

  1. Solicita um par de chaves (chave em texto simples e chave cifrada) ao KMS.

  2. Utiliza a chave em texto simples para criptografar simetricamente a transmissão ao vivo durante a transcodificação.

  3. 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:

  1. O cliente solicita uma URL de streaming ao seu AppServer.

  2. 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.

  3. O cliente extrai a chave cifrada e a envia ao ApsaraVideo Live para solicitar a chave de descriptografia.

  4. 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.

  5. 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.

    image

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.

Importante

É 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

  1. Faça login no console do ApsaraVideo Live.

  2. 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

<your-region-id>

Região onde reside o seu domínio de streaming

cn-shanghai

<your-streaming-domain>

Nome do seu domínio de streaming

live.example.com

<your-app-name>

AppName da transmissão ao vivo

liveApp

<your-template-name>

Nome do modelo de transcodificação

lld

<your-kms-key-id>

ID da chave do KMS (deve estar na mesma região)

1234abcd-12ab-34cd-56ef-1234567890ab

Nota

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

UpdateLiveStreamTranscode

Atualiza uma configuração de transcodificação padrão.

UpdateCustomLiveStreamTranscode

Atualiza uma configuração de transcodificação personalizada.

DescribeLiveStreamTranscodeInfo

Recupera as configurações de transcodificação de um domínio de streaming.

DeleteLiveStreamTranscode

Exclui uma configuração de transcodificação.

Referências