Todos os produtos
Search
Central de documentação

ApsaraVideo Live:Encapsulamento de transmissão ao vivo

Última atualização: Jul 14, 2026

O encapsulamento de transmissão ao vivo converte seus streams em diferentes formatos de contêiner para reprodução via diversos protocolos de streaming com baixa latência.

Formatos de contêiner suportados

O ApsaraVideo Live suporta Real-Time Messaging Protocol (RTMP), HTTP-FLV e HTTP Live Streaming (HLS). Para reduzir a latência e melhorar a compatibilidade, o encapsulamento de transmissão ao vivo converte os streams em diferentes formatos de contêiner na cloud antes da entrega.

A tabela a seguir descreve os formatos de contêiner suportados:

Formato de contêiner

Protocolo de streaming suportado

Codec suportado

TS

Low-Latency HLS (LL-HLS)

Áudio: AAC, OPUS, AC3, EAC3, MP3

Vídeo: H.264, H.265

CMAF

LL-HLS, HLS, DASH

Áudio: AAC

Vídeo: H.264, H.265

Como funciona

O encapsulamento de transmissão ao vivo divide os streams em segmentos no formato TS ou CMAF. Em seguida, o sistema distribui esses segmentos pelos protocolos HLS, LL-HLS ou DASH. Para cada stream, o sistema gera um arquivo de manifesto que registra as URLs dos segmentos em sequência. Quando um cliente solicita a transmissão ao vivo, o servidor retorna o manifesto mais recente.

Combine este recurso com transcodificação de transmissão ao vivo e time shifting para aprimorar a experiência de streaming.

Vantagens

  • Implementação de streaming ao vivo com baixa latência

    Em comparação ao HLS padrão, o LL-HLS divide os streams em segmentos parciais menores (de 200 ms a 1 segundo). Essa abordagem bloqueia recarregamentos de playlist e reduz a latência de ponta a ponta para 3 a 5 segundos.

  • Maior compatibilidade com múltiplos dispositivos

    Por padrão, o ApsaraVideo Live distribui transmissões ao vivo via HLS usando o formato de contêiner TS. Esse formato é incompatível com alguns dispositivos e navegadores. Utilize o encapsulamento para empacotar o conteúdo no formato CMAF, que oferece suporte a uma gama maior de dispositivos, plataformas e codecs (incluindo H.265).

Limitações

Tamanho do GOP

  • Mantenha o tamanho do GOP do stream ingerido consistente. Caso encapsule um stream transcodificado, garanta que o tamanho do GOP também seja estável.

  • A duração de cada segmento deve ser um múltiplo do tamanho do GOP.

Protocolo LL-HLS

  • Travamentos podem aumentar sob condições de rede ruins. Recomendamos usar o encapsulamento com transcodificação de múltiplas taxas de bits, pois isso ajusta a taxa automaticamente.

  • Defina o tamanho do GOP como 1 ou 2 segundos para evitar travamentos ou falhas na reprodução.

  • Um domínio de streaming principal suporta até 100.000 espectadores. Para aumentar essa cota, envie um ticket.

Propagação de configuração

Ao adicionar uma configuração de encapsulamento pela primeira vez, o sistema atualiza as definições de entrega de conteúdo. Essas alterações levam de 3 a 5 minutos para entrar em vigor.

Criar uma configuração de encapsulamento

Crie uma configuração de encapsulamento no console ou chamando uma operação de API.

Nota

Para um stream em andamento, a configuração só entra em vigor após você reingerir o stream.

Console

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

  2. No painel de navegação à esquerda, escolha Feature Management > Encapsulation.

  3. Selecione um domínio de streaming e clique em Add.

  4. Na caixa de diálogo Encapsulation Settings, configure os seguintes parâmetros:

    Parâmetro

    Descrição

    AppName

    Insira um asterisco (*) para aplicar a todos os aplicativos. Para direcionar a um aplicativo específico, insira o AppName da URL de ingestão. O valor não pode exceder 255 caracteres.

    StreamName

    Insira um asterisco (*) para aplicar a todos os streams. Para direcionar a um stream específico, insira o nome do stream. O valor não pode exceder 255 caracteres.

    Protocol

    Selecione o formato de contêiner e o protocolo de reprodução. Valores válidos:

    • HLS - CMAF

    • LL-HLS - CMAF

    • LL-HLS - TS

    • DASH - CMAF

    • HLS & DASH - CMAF

    Segment Quantity

    Especifique o número de segmentos por arquivo de manifesto. Valores válidos: 3 a 5.

    Segment Length (s)

    Para HLS ou DASH: Insira um número inteiro de 1 a 10. Defina este valor como um múltiplo do tamanho do seu GOP (GOP recomendado: 5s).

    Para LL-HLS: Insira 1 ou 2. Defina como um múltiplo do tamanho do seu GOP (GOP recomendado: 1s).

    Part Length (ms)

    (Apenas LL-HLS) Especifique a duração dos segmentos parciais. Valores válidos: 200 a 1.000. Recomendamos um valor ligeiramente superior a um terço da duração do segmento.

    Transcoded Stream

    Especifique se deseja encapsular streams transcodificados. Valores válidos:

    • Source Stream Only

    • Transcoded Stream Included

    Nota

    Se o seu domínio de streaming utilizar um centro de transmissão fora da China continental (Singapore, Germany, Japan ou Indonesia), o atraso na reprodução pode aumentar. Teste sua configuração antes de usá-la em produção.

  5. Clique em OK.

API

Chame a API AddLivePackageConfig para adicionar uma configuração de encapsulamento.

Substitua os espaços reservados, incluindo <Your RegionId>, <Your DomainName>, <Your AppName> e <Your StreamName>.

Para valores de protocolo válidos, consulte AddLivePackageConfig.

Código de exemplo

// 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 AddLivePackageConfig {
    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()
                                  // For endpoints, refer to https://api.alibabacloud.com/product/live
                                .setEndpointOverride("live.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        AddLivePackageConfigRequest addLivePackageConfigRequest = AddLivePackageConfigRequest.builder()
                .regionId("<Your RegionId>")
                .domainName("<Your DomainName>")
                .appName("<Your AppName>")
                .streamName("<Your StreamName>")
                .setProtocol("<Protocol>");
                // 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<AddLivePackageConfigResponse> response = client.addLivePackageConfig(addLivePackageConfigRequest);
        // Synchronously get the return value of the API request
        AddLivePackageConfigResponse 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();
    }

}
Nota
  • Para instruções de configuração do SDK, consulte Usar o SDK Java.

  • Após a configuração, a URL de streaming de qualidade original permanece acessível.

Ingerir e reproduzir um stream encapsulado

Ingerir um stream

Para garantir uma reprodução suave, mantenha o tamanho do GOP do stream ingerido consistente.

Utilize o Open Broadcaster Software (OBS) com estas configurações recomendadas:

image.png

Reproduzir um stream encapsulado

  1. Obtenha a URL de streaming. O formato varia conforme o protocolo:

    Protocolo

    Formato da URL

    HLS

    http://<DomainName>/<AppName>/<StreamName>.m3u8?aliyunols=on&auth_key=<AuthKey>

    DASH

    http://<DomainName>/<AppName>/<StreamName>.mpd?aliyunols=on&auth_key=<AuthKey>

    LL-HLS

    http://<DomainName>/<AppName>/<StreamName>-llhls.m3u8?aliyunols=on&auth_key=<AuthKey>

    Importante

    O parâmetro aliyunols=on é obrigatório para URLs de streams encapsulados.

    Use o gerador de URL para criar URLs de streaming. O formato da URL depende da sua configuração:

    Formato de contêiner

    Protocolo

    Tipos de URL gerados

    TS

    LL-HLS

    LL-HLS e HLS

    CMAF

    LL-HLS

    LL-HLS e HLS

    CMAF

    HLS

    HLS

    CMAF

    DASH

    DASH

    CMAF

    HLS & DASH

    HLS e DASH

  2. Reproduza o stream com um player compatível. Recomendamos o ApsaraVideo Player.

    Para usar a demo web do ApsaraVideo Player:image

    a. Defina Video Type como Broadcast.

    b. Insira a URL de streaming.

    c. Clique na aba Preview para visualizar o vídeo.

    Importante

    Para usar a versão web do ApsaraVideo Player, configure certificados HTTPS e defina o cabeçalho Access-Control-Allow-Origin para acesso entre domínios. Para mais detalhes, consulte Configurações de HTTPS e Configurar cabeçalhos HTTP.

Uso avançado

Encapsular streams transcodificados

Combine o encapsulamento com a transcodificação para empacotar streams transcodificados.

Procedimento

  1. Configure a transcodificação para o seu stream de source. Para mais informações, consulte Casos de uso.

  2. Ao criar uma configuração de encapsulamento, defina Transcoded Stream como Transcoded Stream Included no console ou defina IgnoreTranscode como false via API AddLivePackageConfig:

    // Include transcoded streams in encapsulation process (default: true = exclude)
    addLivePackageConfigRequest.setIgnoreTranscode(false);
  3. Gere a URL de streaming para o stream transcodificado encapsulado:

    • Modelo de transcodificação padrão ou personalizado: Adicione _<template-id> ao StreamName. Exemplo:

      http://<DomainName>/<AppName>/<StreamName>_<template-id>-llhls.m3u8?aliyunols=on&auth_key=<AuthKey>
    • Modelo de transcodificação de múltiplas taxas de bits: Adicione _<template-group-id> ao StreamName.

    Nota

    Combine o encapsulamento com transcodificação de múltiplas taxas de bits para habilitar a reprodução adaptativa, permitindo que os players mudem automaticamente para uma taxa de bits menor durante condições de rede ruins.

    O comportamento das URLs de saída difere com base no tipo de modelo de transcodificação utilizado:

    Para transcodificação de múltiplas taxas de bits:

    A configuração de encapsulamento substitui o formato de saída dos streams transcodificados. Por exemplo, se você especificar um formato de encapsulamento como DASH - CMAF, o sistema gerará apenas URLs DASH - CMAF para os streams de múltiplas taxas de bits; ele não gerará URLs HLS.

    Para transcodificação padrão ou personalizada:

    As URLs originais dos streams transcodificados não são afetadas. Em vez disso, o sistema gera URLs encapsuladas adicionais para esses streams transcodificados.

  4. Reproduza o stream com um player compatível.

Time shifting para streams encapsulados

Use o time shifting com streams encapsulados. Para mais informações, consulte time shifting.

Quando o time shifting está ativado, o formato dos segmentos deslocados no tempo herda a duração e o formato do segmento especificados na sua configuração de encapsulamento.

  • HLS ou LL-HLS (CMAF): Os segmentos deslocados no tempo estão no formato CMAF.

  • LL-HLS (TS): Os segmentos deslocados no tempo estão no formato TS.

Referência de API

Operações de API de encapsulamento de transmissão ao vivo