Todos os produtos
Search
Central de documentação

ApsaraVideo Live:Time shifting

Última atualização: Aug 19, 2026

O time shifting permite que os espectadores reproduzam uma transmissão ao vivo desde o início até o momento atual. Este tópico descreve o funcionamento do time shifting e como enviar solicitações.

Casos de uso

Esse recurso possibilita o retrocesso da transmissão durante a reprodução. Durante uma transmissão esportiva ao vivo, por exemplo, os espectadores podem usar o time shifting para assistir novamente a trechos do evento.

Como funciona

O ApsaraVideo Live segmenta as transmissões em arquivos TS e os distribui aos espectadores via protocolo HLS. A solicitação de um espectador por uma playlist M3U8 contém uma lista de endereços de segmentos TS constantemente atualizada. Em transmissões ao vivo HLS padrão, os endereços dos segmentos TS e seus arquivos correspondentes não são salvos, o que impede o retrocesso da transmissão. Ao ativar o time shifting, o ApsaraVideo Live armazena as informações e os arquivos dos segmentos TS. Isso permite retroceder o vídeo desde o início da transmissão ao vivo até o momento atual.

Limitações

O time shifting suporta no máximo 100.000 espectadores simultâneos. Para atender a um número maior de espectadores, envie um ticket. Para mais informações, consulte Contact us.

Uso

Nota
  • A utilização do time shifting gera taxas específicas. A cobrança é baseada na quantidade de dados com time shifting gravados e nas especificações da reprodução. Para mais detalhes sobre as regras de faturamento, consulte Time shifting fees.

  • Para verificar as regiões que oferecem suporte ao time shifting, consulte Supported regions.

Para utilizar o time shifting, conclua as duas etapas a seguir:

  1. Configure o recurso de time shifting.

    Nota

    É necessário ativar esse recurso para salvar o conteúdo da transmissão ao vivo destinado ao time shifting.

  2. Envie uma solicitação do cliente para usar o time shifting.

Configurar o time shifting

Configurar o time shifting no console

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

  2. No painel de navegação à esquerda, escolha Feature Management > Time Shifting para acessar a página Time Shifting.

  3. Selecione o domínio de transmissão que deseja configurar.

  4. Clique em Add.

  5. Configure o time shifting.

    A tabela a seguir descreve os parâmetros da configuração de time shifting.

    Parâmetro

    Descrição

    AppName

    Nome do aplicativo. Esta configuração só entra em vigor quando o AppName corresponde ao AppName usado na ingestão da transmissão. O nome pode ter até 255 caracteres e conter dígitos, letras maiúsculas, letras minúsculas, hifens (-) e sublinhados (_). Hifens e sublinhados não podem aparecer no início do nome. Para configurar o time shifting no nível do domínio, insira um asterisco (*).

    Stream Name

    Nome da transmissão.

    Time-shift Scope

    • Original Only: Apenas a transmissão original oferece suporte ao time shifting.

    • Original & Transcoded: Tanto a transmissão original quanto as transcodificadas oferecem suporte ao time shifting.

    Retention Period

    O ApsaraVideo Live oferece os seguintes períodos de retenção:

    • 1 dia

    • 3 dias

    • 7 dias

    • 15 dias

    • 30 dias

    Nota
    • Após configurar o time shifting, reingira a transmissão para que a configuração entre em vigor.

    • Acesse diretamente a transmissão com time shifting usando a URL correspondente ao domínio de transmissão. Para mais informações sobre as especificações da URL, consulte Time shifting rules.

    • Caso um domínio de transmissão principal esteja associado a um subdomínio de transmissão, ative o time shifting também para o subdomínio. Caso contrário, a configuração não será aplicada ao subdomínio de transmissão.

  6. Clique em OK.

Configurar o time shifting via API

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
    /**
     * <b>description</b> :
     * <p>Initializes a client by using credentials.</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.live20161101.Client createClient() throws Exception {
        // For production environments, we recommend using a more secure, credential-free method. For more information about how to configure credentials, see https://www.alibabacloud.com/help/document_detail/378657.html.
        com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setCredential(credential);
        // For the endpoint, see https://api.alibabacloud.com/product/live.
        config.endpoint = "live.aliyuncs.com";
        return new com.aliyun.live20161101.Client(config);
    }
    public static void main(String[] args_) throws Exception {
        com.aliyun.live20161101.Client client = Sample.createClient();
        com.aliyun.live20161101.models.OpenLiveShiftRequest openLiveShiftRequest = new com.aliyun.live20161101.models.OpenLiveShiftRequest()
                .setRegionId("<Your RegionId>")
                .setDomainName("<Your DomainName>")
                .setAppName("<Your AppName>")
                .setStreamName("<Your StreamName>");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // When you copy the code to run, print the API response on your own.
            client.openLiveShiftWithOptions(openLiveShiftRequest, runtime);
        } catch (TeaException error) {
            // This is for demonstration purposes only. In your production environment, handle exceptions with care and do not ignore them.
            // Error message
            System.out.println(error.getMessage());
            // Diagnostic address
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // This is for demonstration purposes only. In your production environment, handle exceptions with care and do not ignore them.
            // Error message
            System.out.println(error.getMessage());
            // Diagnostic address
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}
Nota
  • Defina AppName como um asterisco (*) para aplicar a configuração a todas as transmissões ao vivo no domínio especificado.

  • Defina StreamName como um asterisco (*) para aplicar a configuração a todas as transmissões ao vivo no AppName especificado.

  • Após adicionar a configuração, chame a operação DescribeLiveShiftConfigs para consultar as configurações de time shifting de um domínio específico.

  • Para mais informações sobre como usar o SDK para Java, consulte Java SDK User Guide.

  • Reingira a transmissão para que a configuração entre em vigor.

  • Para mais detalhes sobre os parâmetros, consulte OpenLiveShift.

Solicitar reprodução com time shifting

Após a configuração do time shifting, o ApsaraVideo Live salva os arquivos de segmentos TS da transmissão ao vivo. O cliente pode então enviar uma solicitação de reprodução com time shifting para reproduzir segmentos gravados anteriormente.

O código a seguir apresenta um exemplo de solicitação de reprodução com time shifting:

http://<DomainName>/<AppName>/<StreamName.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******

Conforme mostrado no exemplo, a solicitação de time shifting é semelhante a uma URL de transmissão ao vivo para uma playlist M3U8, mas inclui dois parâmetros adicionais. aliyunols=on é um parâmetro obrigatório, e lhs_offset_unix_s_0=300 indica um retrocesso de 300 segundos.

Nota
  • Ao enviar uma solicitação de time shifting por meio de uma rede de distribuição de conteúdo (CDN), inclua o parâmetro aliyunols=on.

  • Atualmente, a reprodução com time shifting suporta apenas URLs de transmissão ao vivo no formato M3U8.

  • Utilize o ApsaraVideo Player para reproduzir conteúdo com time shifting. Para mais informações sobre como usar o ApsaraVideo Player, consulte Player SDK.

Neste exemplo, o conteúdo ao vivo retrocede 300 segundos. Durante a reprodução de conteúdo com time shifting, use o parâmetro lhs_offset_unix_s_0 para definir o tempo de reprodução. O formato do parâmetro é lhs_{type}_{format}_{unit}_{zone}.

A tabela a seguir descreve as variáveis do parâmetro.

Tipo

Formato

Unidade

Zona

Tipo de tempo. Valores válidos:

  • start: hora de início da reprodução.

  • end: hora de término da reprodução.

  • vodend: especifica a hora de término da reprodução no modo video-on-demand (VOD).

    Nota

    Quando o tipo é vodend, a reprodução ocorre no modo VOD. O servidor retorna uma playlist completa com todos os segmentos TS dentro do intervalo de tempo especificado de uma só vez, finalizada por uma tag endlist.

  • offset: tempo de deslocamento para retrocesso.

Formato de tempo para o time shifting. Valores válidos:

  • unix: timestamp UNIX.

  • human: formato YYYYMMDDHHMMSS. Exemplo: 20170809230130.

Unidade de tempo para o time shifting. Valores válidos:

  • s: segundo.

  • ms: milissegundo.

Fuso horário. Valores válidos: 0 a 9, indicando UTC+*. 0 representa UTC e 8 indica China Standard Time.

Nota

Se definir format como unix, defina zone como 0.

Os exemplos a seguir mostram os parâmetros de time shifting:

  • lhs_start_human_s_8=20170809200010

  • lhs_start_unix_s_0=1502280113

  • lhs_end_human_s_8=20170809200010

  • lhs_vodend_unix_s_0=1502280113

  • lhs_offset_unix_ms_0=1800000 (retrocesso de 30 minutos)

Importante
  • Especifique lhs_start ou lhs_offset. Se ambos forem especificados, lhs_start e lhs_offset, o parâmetro lhs_offset terá precedência.

  • O parâmetro lhs_end/lhs_vodend é opcional. Sem a especificação de lhs_end/lhs_vodend, a reprodução continua no modo ao vivo até o fim da ingestão da transmissão.

  • Ao especificar lhs_end, a reprodução segue no modo ao vivo até o horário definido em lhs_end.

  • Ao especificar lhs_vodend, a reprodução segue no modo video-on-demand (VOD) até o horário definido em lhs_vodend. No modo VOD, todos os segmentos TS são retornados de uma vez, permitindo o uso da barra de progresso do player para avançar e retroceder.

  • Se ambos lhs_end e lhs_vodend forem especificados, lhs_vodend terá precedência.

Caso não saiba os horários exatos de início e término, consulte a linha do tempo do time shifting para obtê-los.

O exemplo a seguir mostra como consultar a linha do tempo do time shifting:

// Replace the values in angle brackets (<>) with your actual values.
http://<DomainName>/openapi/timeline/query?aliyunols=on&app=<AppName>&stream=<StreamName>&format=ts&lhs_start_unix_s_0=<StartTime>&lhs_end_unix_s_0=<endTime>&auth_key=<auth_key>

A tabela a seguir descreve os parâmetros do exemplo.

Parâmetro

Descrição

Método de solicitação

GET

URL

URL da solicitação. Exemplo: http://{domain}/openapi/timeline/query, onde {domain} é o seu domínio de transmissão.

Parâmetros

  • aliyunols (obrigatório): on. (campo fixo)

  • app (obrigatório): Nome do aplicativo.

  • stream (obrigatório): Nome da transmissão.

  • format (obrigatório): ts. (campo fixo)

    Nota

    Atualmente, a API suporta consulta apenas de dados com time shifting no formato ts.

  • lhs_start_unix_s_0 (obrigatório): Timestamp UNIX do início do intervalo de tempo da consulta. Exemplo: 1724295706. Unidade: segundos.

  • lhs_end_unix_s_0 (obrigatório): Timestamp UNIX do fim do intervalo de tempo da consulta. Exemplo: 1724317306. Unidade: segundos.

  • auth_key: Chave de autenticação. Esta chave utiliza o same algoritmo de criptografia da chave usada na URL de transmissão. Se não estiver familiarizado com autenticação e criptografia, consulte Authentication Code Examples.

Tratamento de erros comuns

  • 403: Verifique se o processo de criptografia do valor auth_key está correto.

O exemplo a seguir mostra uma resposta de amostra:

{
  "retCode": 0,
  "description": "success",
  "content": {
    "current": 1514269063,
    "timeline": [
      {
        "start": 1514269054,
        "end": 1514269058
      }
    ]
  }
}

Parâmetro

Descrição

current

Hora atual do sistema. O player pode usar este campo para sincronizar o tempo.

timeline

Período válido de time shifting, incluindo os timestamps UNIX de início e fim.

start

Hora de início do segmento válido (timestamp UNIX). Unidade: segundos.

end

Hora de término do segmento válido (timestamp UNIX). Unidade: segundos.

Nota
  • Geralmente, uma única ingestão de transmissão gera um objeto de linha do tempo. O horário de início corresponde ao começo da transmissão ao vivo, e o horário de término aproxima-se da hora atual ou do fim da transmissão. No entanto, fatores como interrupções, reingestão ou flutuações de rede podem gerar múltiplos objetos de linha do tempo.

  • Consulte o volume de dados de time shifting para um domínio específico no console. Para mais informações, consulte Query usage.

Uso avançado

Reprodução transcodificada com time shifting

Combine o time shifting com a transcodificação para reproduzir transmissões transcodificadas. Configure primeiro a transcodificação para habilitar essa funcionalidade. Para mais informações sobre como configurar a transcodificação, consulte Live stream transcoding.

Esta seção pressupõe que você já concluiu a configuração de transcodificação.

Ao configurar o time shifting, gere também dados de time shifting para as transmissões transcodificadas. O exemplo a seguir mostra o código de amostra:

// Specifies whether to ignore the corresponding transcoded stream when generating time-shifted data. Valid values: true and false. Default value: true.
openLiveShiftRequest.setIgnoreTranscode("<false>");

Para ativar a reprodução com time shifting, add the time-shifting parameters à URL da transmissão transcodificada.

O exemplo a seguir mostra uma URL de reprodução:

http://<DomainName>/<AppName>/<StreamName_TranscodingTemplateID.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******
Nota
  • Reingira a transmissão para reproduzir a transmissão transcodificada com time shifting.

  • Em configurações de transcodificação acionadas por pull de transmissão, a reprodução de uma transmissão transcodificada com time shifting não dispara a transcodificação. Reproduza a transmissão transcodificada ao vivo antecipadamente para acionar a transcodificação ou configure a transcodificação para ser acionada por ingestão de transmissão.

Importante
  • Atualmente, o recurso de time shifting não suporta transmissões transcodificadas com múltiplas taxas de bits.

Reprodução encapsulada com time shifting

Utilize o recurso Time Shifting.

Nota

O service de encapsulamento do ApsaraVideo Live reduz a latência utilizando protocolos modernos como Low-Latency HTTP Live Streaming (LL-HLS) e o formato de contêiner CMAF. O LL-HLS alcança latências de ponta a ponta de 3 a 5 segundos usando segmentos mais curtos (0,2 a 1 segundo) e carregamento de playlist em blocos. O formato CMAF oferece compatibilidade mais ampla com dispositivos e navegadores do que o TS tradicional e suporta codecs mais recentes como H.265.

Se não estiver familiarizado com o recurso de encapsulamento de transmissão ao vivo, consulte Live stream encapsulation.

Esta seção pressupõe que você já concluiu a configuração de encapsulamento de transmissão ao vivo.

Para reproduzir transmissões encapsuladas com time shifting, não é necessário modificar a configuração de time shifting. Basta adicionar os parâmetros de time shifting à URL da transmissão encapsulada.

O exemplo a seguir mostra uma URL de reprodução:

http://<DomainName>/<AppName>/<StreamName-EncapsulationFormat.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******
Nota
  • Reingira a transmissão para reproduzir a transmissão encapsulada com time shifting.

  • Para reproduzir uma transmissão encapsulada e transcodificada com time shifting, basta adicionar os parâmetros de time shifting à URL da transmissão encapsulada e transcodificada.

Referências

Para mais informações sobre as APIs de time shifting, consulte Time shifting.