O ApsaraVideo Live permite sobrepor marcas d'água de imagem em transmissões ao vivo para proteção de direitos autorais ou publicidade.
Casos de uso
Proteção de direitos autorais: adicione marcas d'água aos seus vídeos ao vivo para desencorajar o uso não autorizado.
Publicidade: exiba rótulos promocionais ou detalhes de eventos na sua transmissão ao vivo.
Pré-requisitos
Para usar o recurso de marca d'água, você precisa de uma imagem de marca d'água. O sistema suporta apenas marcas d'água de imagem. Se precisar de uma marca d'água de texto, crie uma imagem PNG com o texto desejado. As imagens podem estar nos formatos JPG ou PNG.
Você deve ter uma URL para a imagem da marca d'água. O ApsaraVideo Live obtém as imagens a partir de URLs e não suporta uploads diretos. Certifique-se de que essa URL permaneça acessível.
Configuração do recurso
Para usar marcas d'água, configure um Watermark Templates e uma Watermark Rules.
Um modelo de marca d'água define a aparência da marca, incluindo posição, transparência e URL da imagem.
Uma regra de marca d'água associa um AppName e um StreamName a um modelo de marca d'água específico.
Configurar um modelo de marca d'água
Configure o modelo de marca d'água no console ou por chamada de API.
Configurar no console
Faça login no console do ApsaraVideo Live.
No painel de navegação à esquerda, escolha Feature Management > Watermarks. Na página Watermarks, clique na aba Watermark Templates.
Selecione o domínio de streaming que deseja configurar.
-
Clique em Add Watermark Template e configure o modelo.

Visualize o efeito da marca d'água na área de pré-visualização. Ajuste o tamanho da tela, o tamanho da marca d'água e a posição para obter uma prévia em tempo real. A tabela a seguir descreve os parâmetros do modelo.
Parâmetro
Descrição
Template Name
Nome do modelo de marca d'água. Pode ter até 30 caracteres e incluir caracteres chineses, letras, dígitos, hifens (-) e sublinhados (_).
Watermark Description
Descrição da marca d'água. Aceita até 128 caracteres, incluindo caracteres chineses, letras, dígitos e caracteres especiais.
Watermark Material
Insira a URL da imagem da marca d'água. A URL deve começar com
http://ouhttps://.Use uma URL permanente do Object Storage Service (OSS) ou de outra fonte com autenticação de longo prazo.
Coordinate Origin
Canto de ancoragem da marca d'água no vídeo de saída. A marca d'água é deslocada a partir deste canto. Valores válidos:
-
Superior direito (padrão)
-
Inferior direito
-
Superior esquerdo
-
Inferior esquerdo
Preview Screen Size (Width × Height)
Dimensões reais do seu vídeo, usadas para pré-visualizar a posição e a aparência da marca d'água. Unidade: pixels.
Watermark Size (Width × Height)
Tamanho da imagem da marca d'água. A largura é dimensionada automaticamente com base na altura.
-
Intervalo de valores: [0, 4096].
-
Unidade: pixels.
Horizontal Offset
Deslocamento horizontal da marca d'água em relação à origem das coordenadas no vídeo de saída.
-
Intervalo de valores: [0, 4096].
-
Unidade: pixels.
Vertical Offset
Deslocamento vertical da marca d'água em relação à origem das coordenadas no vídeo de saída.
-
Intervalo de valores: [0, 4096].
-
Unidade: pixels.
Transparency
Opacidade da marca d'água. 0 significa totalmente transparente e 100 significa totalmente opaco.
-
Intervalo de valores: [0, 100].
-
Unidade: porcentagem.
-
Clique em salve para concluir a configuração do modelo de marca d'água.
-
Após adicionar o modelo de marca d'água, uma caixa de diálogo solicitará a adição de uma regra de marca d'água. Clique em Add para criar uma regra de marca d'água para este modelo. Para mais informações sobre como configurar uma regra de marca d'água, consulte Configurar uma regra de marca d'água.
NotaApós criar um modelo de marca d'água, associe-o a uma regra de marca d'água. O AppName e o StreamName na regra devem corresponder aos da URL de ingestão. Para aplicar as alterações, reinicie a ingestão de stream.
Configurar por API
Os parâmetros do modelo de marca d'água são complexos. Recomendamos usar a interface visual do console para pré-visualizar a posição da marca d'água, mesmo ao configurar modelos programaticamente.
Primeiro, adicione um modelo de marca d'água no console do ApsaraVideo Live.
-
Após configurar os parâmetros, consulte a configuração do modelo.
// 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 DescribeLiveStreamWatermarks { public static void main(String[] args) throws Exception { // Configure the HttpClient. /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder() .connectionTimeout(Duration.ofSeconds(10)) // The timeout period for a connection. Default value: 10 seconds. .responseTimeout(Duration.ofSeconds(10)) // The timeout period for a response. Default value: 20 seconds. .maxConnections(128) // The connection pool size. .maxIdleTimeOut(Duration.ofSeconds(50)) // The timeout period for the connection pool. Default value: 30 seconds. // Configure the proxy. .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001)) .setCredentials("<your-proxy-username>", "<your-proxy-password>")) // For an HTTPS connection, you must configure a certificate or ignore the certificate by using .ignoreSSL(true). .x509TrustManagers(new X509TrustManager[]{}) .keyManagers(new KeyManager[]{}) .ignoreSSL(false) .build();*/ // Configure the credentials for authentication, including the AccessKey ID, AccessKey secret, and security token. StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder() // Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables 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 a Security Token Service (STS) token. .build()); // Configure the client. AsyncClient client = AsyncClient.builder() .region("<your-region-id>") // The region ID. //.httpClient(httpClient) // Use the configured HttpClient. Otherwise, the default Apache HttpClient is used. .credentialsProvider(provider) //.serviceConfiguration(Configuration.create()) // The service-level configuration. // The client-level configuration. You can overwrite the endpoint and HTTP request parameters. .overrideConfiguration( ClientOverrideConfiguration.create() // For more information about the endpoint, see https://api.aliyun.com/product/live. .setEndpointOverride("live.aliyuncs.com") //.setConnectTimeout(Duration.ofSeconds(30)) ) .build(); // Set the parameters for the API request. DescribeLiveStreamWatermarksRequest describeLiveStreamWatermarksRequest = DescribeLiveStreamWatermarksRequest.builder() .regionId("<your-region-id>") .domain("<your-domain>") .keyWord("<your-keyword>") // The request-level configuration. You can overwrite HTTP request parameters. // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders())) .build(); // Asynchronously obtain the return value of the API request. CompletableFuture<DescribeLiveStreamWatermarksResponse> response = client.describeLiveStreamWatermarks(describeLiveStreamWatermarksRequest); // Synchronously obtain the return value of the API request. DescribeLiveStreamWatermarksResponse resp = response.get(); System.out.println(new Gson().toJson(resp)); // Asynchronously process the return value. /*response.thenAccept(resp -> { System.out.println(new Gson().toJson(resp)); }).exceptionally(throwable -> { // Handle exceptions. System.out.println(throwable.getMessage()); return null; });*/ // Close the client. client.close(); } }NotaConsulte a lista de modelos de marca d'água por ID ou nome do modelo. Para mais informações, consulte a referência da API DescribeLiveStreamWatermarks.
Salve as informações consultadas do modelo de marca d'água como um modelo no seu sistema de negócios.
-
Adicione uma configuração de modelo de marca d'água.
// 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 AddLiveStreamWatermark { public static void main(String[] args) throws Exception { // Configure the HttpClient. /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder() .connectionTimeout(Duration.ofSeconds(10)) // The timeout period for a connection. Default value: 10 seconds. .responseTimeout(Duration.ofSeconds(10)) // The timeout period for a response. Default value: 20 seconds. .maxConnections(128) // The connection pool size. .maxIdleTimeOut(Duration.ofSeconds(50)) // The timeout period for the connection pool. Default value: 30 seconds. // Configure the proxy. .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001)) .setCredentials("<your-proxy-username>", "<your-proxy-password>")) // For an HTTPS connection, you must configure a certificate or ignore the certificate by using .ignoreSSL(true). .x509TrustManagers(new X509TrustManager[]{}) .keyManagers(new KeyManager[]{}) .ignoreSSL(false) .build();*/ // Configure the credentials for authentication, including the AccessKey ID, AccessKey secret, and security token. StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder() // Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables 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 a Security Token Service (STS) token. .build()); // Configure the client. AsyncClient client = AsyncClient.builder() .region("<your-region-id>") // The region ID. //.httpClient(httpClient) // Use the configured HttpClient. Otherwise, the default Apache HttpClient is used. .credentialsProvider(provider) //.serviceConfiguration(Configuration.create()) // The service-level configuration. // The client-level configuration. You can overwrite the endpoint and HTTP request parameters. .overrideConfiguration( ClientOverrideConfiguration.create() // For more information about the endpoint, see https://api.aliyun.com/product/live. .setEndpointOverride("live.aliyuncs.com") //.setConnectTimeout(Duration.ofSeconds(30)) ) .build(); // Set the parameters for the API request. AddLiveStreamWatermarkRequest addLiveStreamWatermarkRequest = AddLiveStreamWatermarkRequest.builder() .regionId("<your-region-id>") .type(1) .name("<your-name>") .refWidth(1920) .refHeight(1080) .xOffset(50F) .yOffset(100F) .height(200) .transparency(255) .offsetCorner("<your-offset-corner>") .pictureUrl("<your-picture-url>") // The request-level configuration. You can overwrite HTTP request parameters. // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders())) .build(); // Asynchronously obtain the return value of the API request. CompletableFuture<AddLiveStreamWatermarkResponse> response = client.addLiveStreamWatermark(addLiveStreamWatermarkRequest); // Synchronously obtain the return value of the API request. AddLiveStreamWatermarkResponse resp = response.get(); System.out.println(new Gson().toJson(resp)); // Asynchronously process the return value. /*response.thenAccept(resp -> { System.out.println(new Gson().toJson(resp)); }).exceptionally(throwable -> { // Handle exceptions. System.out.println(throwable.getMessage()); return null; });*/ // Close the client. client.close(); } }NotaPara mais informações sobre os parâmetros, consulte a referência da API AddLiveStreamWatermark.
Isso conclui a configuração do modelo de marca d'água. Em seguida, configure uma regra de marca d'água.
Marcas d'água e time shifting não podem ser usados simultaneamente.
Configurar uma regra de marca d'água
Após criar um modelo de marca d'água, crie uma regra de marca d'água para aplicá-lo.
Configure a regra de marca d'água no console ou por API.
Configurar no console
Faça login no console do ApsaraVideo Live.
No painel de navegação à esquerda, escolha Feature Management > Watermarks. Na página Watermarks, clique na aba Watermark Rules.
Selecione o domínio de streaming que deseja configurar.
-
Clique em Add Watermark Rule.

A tabela a seguir descreve os parâmetros da regra de marca d'água.
Parâmetro
Descrição
Rule Name
Nome da regra de marca d'água. Pode ter até 32 caracteres e incluir caracteres chineses, letras, dígitos e caracteres especiais.
Rule Description
Descrição da regra de marca d'água. Aceita até 128 caracteres, incluindo caracteres chineses, letras, dígitos e caracteres especiais.
AppName
Nome da aplicação à qual o stream pertence. O AppName deve ser idêntico ao AppName na URL de ingestão para que o modelo de marca d'água tenha efeito. O nome pode ter até 256 caracteres e conter dígitos, letras, hifens (-) e sublinhados (_).
Stream Name
Nome do stream ao vivo. Aplicam-se as seguintes regras:
-
Insira um nome de stream específico para corresponder apenas a esse stream. Exemplo:
liveStreamA. -
Use correspondência com curinga.
Para corresponder a todos os streams ao vivo, insira apenas um asterisco (*).
Também é possível realizar correspondência por prefixo ou sufixo. Os itens de correspondência devem estar entre parênteses
(), e múltiplos itens devem ser separados por barras verticais|. O curinga asterisco () só pode ser usado no início ou no final da string. Exemplo:(abc|123)corresponde a todos os streams que começam comabcou123.*(t1|t2)corresponde a todos os streams que terminam comt1out2. -
O nome pode ter até 256 caracteres e conter dígitos, letras, hifens (-), sublinhados (_), asteriscos (*) e sinais de igual (=).
Watermark Templates
Selecione um modelo de marca d'água configurado. Se não houver modelos disponíveis, crie um primeiro. Para mais informações, consulte Configurar um modelo de marca d'água.
-
-
Clique em salve para concluir a configuração da regra de marca d'água.
NotaApós configurar a regra de marca d'água, reinicie a ingestão de stream para que a marca d'água apareça durante a reprodução.
Configurar por API
// 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 AddLiveStreamWatermarkRule {
public static void main(String[] args) throws Exception {
// Configure the HttpClient.
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // The timeout period for a connection. Default value: 10 seconds.
.responseTimeout(Duration.ofSeconds(10)) // The timeout period for a response. Default value: 20 seconds.
.maxConnections(128) // The connection pool size.
.maxIdleTimeOut(Duration.ofSeconds(50)) // The timeout period for the connection pool. Default value: 30 seconds.
// Configure the proxy.
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
.setCredentials("<your-proxy-username>", "<your-proxy-password>"))
// For an HTTPS connection, you must configure a certificate or ignore the certificate by using .ignoreSSL(true).
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Configure the credentials for authentication, including the AccessKey ID, AccessKey secret, and security token.
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables 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 a Security Token Service (STS) token.
.build());
// Configure the client.
AsyncClient client = AsyncClient.builder()
.region("<your-region-id>") // The region ID.
//.httpClient(httpClient) // Use the configured HttpClient. Otherwise, the default Apache HttpClient is used.
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // The service-level configuration.
// The client-level configuration. You can overwrite the endpoint and HTTP request parameters.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// For more information about the endpoint, see https://api.aliyun.com/product/live.
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Set the parameters for the API request.
AddLiveStreamWatermarkRuleRequest addLiveStreamWatermarkRuleRequest = AddLiveStreamWatermarkRuleRequest.builder()
.regionId("<your-region-id>")
.name("<your-name>")
.domain("<your-domain>")
.app("<your-app>")
.stream("<your-stream>")
.templateId("<your-template-id>")
// The request-level configuration. You can overwrite HTTP request parameters.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Asynchronously obtain the return value of the API request.
CompletableFuture<AddLiveStreamWatermarkRuleResponse> response = client.addLiveStreamWatermarkRule(addLiveStreamWatermarkRuleRequest);
// Synchronously obtain the return value of the API request.
AddLiveStreamWatermarkRuleResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Asynchronously process the return value.
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Handling exceptions.
System.out.println(throwable.getMessage());
return null;
});*/
// Close the client.
client.close();
}
}
O <AppName> pode ter até 256 caracteres e conter dígitos, letras, hifens (-) e sublinhados (_). Asteriscos (*) não são suportados.
A correspondência de regras de marca d'água baseia-se em prioridade. Regras com um <StreamName> específico (não sendo o curinga *) têm precedência.
Para mais informações sobre os parâmetros, consulte a referência da API AddLiveStreamWatermarkRule.
Usar o recurso
Após configurar o modelo e a regra de marca d'água, inicie a ingestão de stream e a reprodução para aplicar a marca d'água. A figura a seguir mostra um vídeo ao vivo com marca d'água.

A marca d'água neste exemplo é uma imagem PNG baseada em texto.
Transparência da marca d'água
O código a seguir mostra como definir a transparência da marca d'água:
// The transparency of the watermark. A smaller value indicates higher transparency. Valid values: 0 to 255. Default value: 255.
addLiveStreamWatermarkRequest.setTransparency(255);
Por exemplo, definir a transparência como 128 resulta no vídeo mostrado abaixo:

Atualizar marca d'água
Código de exemplo para atualizar um modelo de marca d'água
// 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 UpdateLiveStreamWatermark {
public static void main(String[] args) throws Exception {
// Configure the HttpClient.
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout. The default is 10 seconds.
.responseTimeout(Duration.ofSeconds(10)) // Set the response timeout. 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>"))
// For an HTTPS connection, you must configure the certificate or ignore it by using .ignoreSSL(true).
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Configure credentials, including the AccessKey ID, AccessKey secret, and token.
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables 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 an STS token.
.build());
// Configure the client.
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // The region ID.
//.httpClient(httpClient) // Use the configured HttpClient. Otherwise, the default Apache HttpClient is used.
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // The service-level configuration.
// Override the client-level configuration. You can set the endpoint, HTTP request parameters, and more.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// For more information about the endpoint, see https://api.aliyun.com/product/live.
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Set the parameters for the API request.
UpdateLiveStreamWatermarkRequest updateLiveStreamWatermarkRequest = UpdateLiveStreamWatermarkRequest.builder()
.regionId("<Your RegionId>")
.templateId("<Your templateId>")
.name("<Your name>")
.description("<Your description>")
// Override the request-level configuration. You can set HTTP request parameters and more.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Asynchronously get the return value of the API request.
CompletableFuture<UpdateLiveStreamWatermarkResponse> response = client.updateLiveStreamWatermark(updateLiveStreamWatermarkRequest);
// Synchronously get the return value of the API request.
UpdateLiveStreamWatermarkResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Asynchronously process the return value.
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Handle exceptions.
System.out.println(throwable.getMessage());
return null;
});*/
// Close the client.
client.close();
}
}
O <regionId> deve corresponder à região do centro ao vivo associada ao nome de domínio do modelo. Para obter uma lista de IDs de região, consulte endpoint de serviço.
Para mais informações sobre os parâmetros, consulte a referência da API UpdateLiveStreamWatermark.
Código de exemplo para atualizar uma regra de marca d'água
// 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 UpdateLiveStreamWatermarkRule {
public static void main(String[] args) throws Exception {
// Configure the HttpClient.
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout. The default is 10 seconds.
.responseTimeout(Duration.ofSeconds(10)) // Set the response timeout. 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>"))
// For an HTTPS connection, you must configure the certificate or ignore it by using .ignoreSSL(true).
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Configure credentials, including the AccessKey ID, AccessKey secret, and token.
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables 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 an STS token.
.build());
// Configure the client.
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // The region ID.
//.httpClient(httpClient) // Use the configured HttpClient. Otherwise, the default Apache HttpClient is used.
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // The service-level configuration.
// Override the client-level configuration. You can set the endpoint, HTTP request parameters, and more.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// For more information about the endpoint, see https://api.aliyun.com/product/live.
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Set the parameters for the API request.
UpdateLiveStreamWatermarkRuleRequest updateLiveStreamWatermarkRuleRequest = UpdateLiveStreamWatermarkRuleRequest.builder()
.regionId("<Your RegionId>")
.ruleId("")
// Override the request-level configuration. You can set HTTP request parameters and more.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Asynchronously get the return value of the API request.
CompletableFuture<UpdateLiveStreamWatermarkRuleResponse> response = client.updateLiveStreamWatermarkRule(updateLiveStreamWatermarkRuleRequest);
// Synchronously get the return value of the API request.
UpdateLiveStreamWatermarkRuleResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Asynchronously process the return value.
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Handle exceptions.
System.out.println(throwable.getMessage());
return null;
});*/
// Close the client.
client.close();
}
}
O <regionId> deve corresponder à região do centro ao vivo associada ao nome de domínio do modelo. Para obter uma lista de IDs de região, consulte endpoint de serviço.
Atualize outras propriedades da regra. Para mais informações, consulte a referência da API UpdateLiveStreamWatermarkRule.
Alterações em um modelo ou regra de marca d'água só entram em vigor após reiniciar a ingestão de stream. Para atualizar uma marca d'água durante uma transmissão ao vivo sem reiniciar, use o recurso de atualização dinâmica de marca d'água.
Chame a API DynamicUpdateWaterMarkStreamRule para realizar essa atualização.
Código de exemplo para atualização dinâmica de marca d'água
// 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 DynamicUpdateWaterMarkStreamRule {
public static void main(String[] args) throws Exception {
// Configure the HttpClient.
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout. The default is 10 seconds.
.responseTimeout(Duration.ofSeconds(10)) // Set the response timeout. 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>"))
// For an HTTPS connection, you must configure the certificate or ignore it by using .ignoreSSL(true).
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Configure credentials, including the AccessKey ID, AccessKey secret, and token.
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables 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 an STS token.
.build());
// Configure the client.
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // The region ID.
//.httpClient(httpClient) // Use the configured HttpClient. Otherwise, the default Apache HttpClient is used.
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // The service-level configuration.
// Override the client-level configuration. You can set the endpoint, HTTP request parameters, and more.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// For more information about the endpoint, see https://api.aliyun.com/product/live.
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Set the parameters for the API request.
DynamicUpdateWaterMarkStreamRuleRequest dynamicUpdateWaterMarkStreamRuleRequest = DynamicUpdateWaterMarkStreamRuleRequest.builder()
.regionId("<Your RegionId>")
.domain("<Your Domain>")
.app("<Your App>")
.stream("<Your Stream>")
.templateId("<Your TemplateId>")
// Override the request-level configuration. You can set HTTP request parameters and more.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Asynchronously get the return value of the API request.
CompletableFuture<DynamicUpdateWaterMarkStreamRuleResponse> response = client.dynamicUpdateWaterMarkStreamRule(dynamicUpdateWaterMarkStreamRuleRequest);
// Synchronously get the return value of the API request.
DynamicUpdateWaterMarkStreamRuleResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Asynchronously process the return value.
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Handle exceptions.
System.out.println(throwable.getMessage());
return null;
});*/
// Close the client.
client.close();
}
}
O <TemplateId> pode ser o ID de um novo modelo ou do modelo original. Chamar este método atualiza a marca d'água para corresponder à configuração mais recente do modelo especificado, incluindo sua imagem, transparência e posição.
Atualmente, atualizações dinâmicas não são suportadas para regras de marca d'água que usam correspondência difusa para o nome do stream.
Excluir modelo de marca d'água
Antes de excluir um Watermark Templates, exclua primeiro todas as regras de marca d'água associadas.
Código de exemplo para excluir uma regra de marca d'água
// 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 DeleteLiveStreamWatermarkRule {
public static void main(String[] args) throws Exception {
// Configure the HttpClient.
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout. The default is 10 seconds.
.responseTimeout(Duration.ofSeconds(10)) // Set the response timeout. 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>"))
// For an HTTPS connection, you must configure the certificate or ignore it by using .ignoreSSL(true).
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Configure credentials, including the AccessKey ID, AccessKey secret, and token.
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables 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 an STS token.
.build());
// Configure the client.
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // The region ID.
//.httpClient(httpClient) // Use the configured HttpClient. Otherwise, the default Apache HttpClient is used.
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // The service-level configuration.
// Override the client-level configuration. You can set the endpoint, HTTP request parameters, and more.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// For more information about the endpoint, see https://api.aliyun.com/product/live.
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Set the parameters for the API request.
DeleteLiveStreamWatermarkRuleRequest deleteLiveStreamWatermarkRuleRequest = DeleteLiveStreamWatermarkRuleRequest.builder()
.regionId("<Your RegionId>")
.domain("<Your Domain>")
// Override the request-level configuration. You can set HTTP request parameters and more.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Asynchronously get the return value of the API request.
CompletableFuture<DeleteLiveStreamWatermarkRuleResponse> response = client.deleteLiveStreamWatermarkRule(deleteLiveStreamWatermarkRuleRequest);
// Synchronously get the return value of the API request.
DeleteLiveStreamWatermarkRuleResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Asynchronously process the return value.
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Handle exceptions.
System.out.println(throwable.getMessage());
return null;
});*/
// Close the client.
client.close();
}
}
Especifique um AppName para excluir todas as regras de marca d'água associadas a ele. Para mais informações, consulte a referência da API DeleteLiveStreamWatermarkRule.
Código de exemplo para excluir um modelo de marca d'água
// 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 DeleteLiveStreamWatermark {
public static void main(String[] args) throws Exception {
// Configure the HttpClient.
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout. The default is 10 seconds.
.responseTimeout(Duration.ofSeconds(10)) // Set the response timeout. 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>"))
// For an HTTPS connection, you must configure the certificate or ignore it by using .ignoreSSL(true).
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Configure credentials, including the AccessKey ID, AccessKey secret, and token.
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables 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 an STS token.
.build());
// Configure the client.
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // The region ID.
//.httpClient(httpClient) // Use the configured HttpClient. Otherwise, the default Apache HttpClient is used.
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // The service-level configuration.
// Override the client-level configuration. You can set the endpoint, HTTP request parameters, and more.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// For more information about the endpoint, see https://api.aliyun.com/product/live.
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Set the parameters for the API request.
DeleteLiveStreamWatermarkRequest deleteLiveStreamWatermarkRequest = DeleteLiveStreamWatermarkRequest.builder()
.regionId("<Your RegionId>")
.templateId("<Your TemplateId>")
// Override the request-level configuration. You can set HTTP request parameters and more.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Asynchronously get the return value of the API request.
CompletableFuture<DeleteLiveStreamWatermarkResponse> response = client.deleteLiveStreamWatermark(deleteLiveStreamWatermarkRequest);
// Synchronously get the return value of the API request.
DeleteLiveStreamWatermarkResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Asynchronously process the return value.
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Handle exceptions.
System.out.println(throwable.getMessage());
return null;
});*/
// Close the client.
client.close();
}
}
O <regionId> deve corresponder à região do centro ao vivo associada ao nome de domínio do modelo. Para obter uma lista de IDs de região, consulte endpoint de serviço.
Para mais informações, consulte a referência da API DeleteLiveStreamWatermark.
Referências
Para informações sobre o uso do SDK para Java, consulte o Guia de uso do SDK para Java.