Tous les produits
Search
Centre de documentation

ApsaraVideo Live:Encapsulation de flux en direct

Dernière mise à jour :Sep 15, 2026

L'encapsulation de flux en direct convertit vos flux en différents formats de conteneur pour une lecture via divers protocoles de streaming à faible latence.

Formats de conteneur pris en charge

ApsaraVideo Live prend en charge les protocoles Real-Time Messaging Protocol (RTMP), HTTP-FLV et HTTP Live Streaming (HLS). Pour réduire la latence et améliorer la compatibilité, l'encapsulation de flux en direct convertit les flux en différents formats de conteneur dans le cloud avant leur diffusion.

Le tableau suivant décrit les formats de conteneur pris en charge :

Format de conteneur

Protocole de streaming pris en charge

Codec pris en charge

TS

Low-Latency HLS (LL-HLS)

Audio : AAC, OPUS, AC3, EAC3, MP3

Vidéo : H.264, H.265

CMAF

LL-HLS, HLS, DASH

Audio : AAC

Vidéo : H.264, H.265

Fonctionnement

L'encapsulation de flux en direct divise les flux en segments au format TS ou CMAF. Le système diffuse ensuite ces segments via les protocoles HLS, LL-HLS ou DASH. Pour chaque flux, le système génère un fichier manifeste qui répertorie les URL des segments dans l'ordre. Lorsqu'un client demande le flux en direct, le serveur renvoie le dernier manifeste.

Vous pouvez combiner cette fonctionnalité avec le transcodage de flux en direct et le décalage temporel pour améliorer l'expérience de streaming.

Avantages

  • Diffusion de flux en direct à faible latence

    Par rapport au HLS standard, le LL-HLS divise les flux en segments partiels plus petits (de 200 ms à 1 seconde). Cette approche évite les rechargements de liste de lecture et réduit la latence de bout en bout à 3 à 5 secondes.

  • Compatibilité améliorée avec plusieurs appareils

    Par défaut, ApsaraVideo Live diffuse les flux en direct via HLS en utilisant le format de conteneur TS. Ce format n'est pas compatible avec certains appareils et navigateurs. Utilisez l'encapsulation pour empaqueter le contenu au format CMAF, qui prend en charge une plus large gamme d'appareils, de plateformes et de codecs (y compris H.265).

  • Opération non intrusive pour vos flux existants

    L'activation de l'encapsulation de flux en direct est une opération non intrusive. Elle génère uniquement un flux de lecture encapsulé supplémentaire basé sur le flux ingéré d'origine. Vos flux RTMP, HTTP-FLV et HLS existants continuent de fonctionner comme auparavant, et vos configurations d'enregistrement ne sont pas affectées. Après avoir activé l'encapsulation, de nouvelles URL de streaming aux formats CMAF et Low-Latency HLS (LL-HLS) deviennent disponibles.

Limitations

Taille du GOP

  • La taille du GOP du flux ingéré doit rester cohérente. Si vous encapsulez un flux transcodé, assurez-vous que sa taille de GOP est également stable.

  • La durée de chaque segment doit être un multiple de la taille du GOP.

Protocole LL-HLS

  • Les saccades peuvent augmenter en cas de mauvaises conditions réseau. Nous recommandons d'utiliser l'encapsulation avec le transcodage multi-débit, qui ajuste automatiquement le débit binaire.

  • Définissez la taille du GOP sur 1 ou 2 secondes pour éviter les saccades ou les échecs de lecture.

  • Un domaine de streaming principal peut prendre en charge jusqu'à 100 000 spectateurs. Pour augmenter ce quota, soumettez un ticket.

Propagation de la configuration

Lorsque vous ajoutez une configuration d'encapsulation pour la première fois, le système met à jour les paramètres de diffusion de contenu. Ces modifications prennent effet après 3 à 5 minutes.

Créer une configuration d'encapsulation

Créez une configuration d'encapsulation dans la console ou en appelant une opération API.

Remarque

Pour un flux en cours, la configuration ne prend effet qu'après la réingestion du flux.

Console

  1. Connectez-vous à la console ApsaraVideo Live.

  2. Dans le volet de navigation de gauche, choisissez Feature Management > Encapsulation.

  3. Sélectionnez un domaine de streaming, puis cliquez sur Add.

  4. Dans la boîte de dialogue Encapsulation Settings, configurez les paramètres suivants :

    Paramètre

    Description

    AppName

    Saisissez un astérisque (*) pour appliquer à toutes les applications. Pour cibler une application spécifique, saisissez le AppName de l'URL d'ingestion. La valeur ne doit pas dépasser 255 caractères.

    StreamName

    Saisissez un astérisque (*) pour appliquer à tous les flux. Pour cibler un flux spécifique, saisissez le nom du flux. La valeur ne doit pas dépasser 255 caractères.

    Protocol

    Sélectionnez le format de conteneur et le protocole de lecture : Valeurs valides :

    • HLS - CMAF

    • LL-HLS - CMAF

    • LL-HLS - TS

    • DASH - CMAF

    • HLS & DASH - CMAF

    Segment Quantity

    Spécifiez le nombre de segments par fichier manifeste. Valeurs valides : 3 à 5.

    Segment Length (s)

    Pour HLS ou DASH : Saisissez un entier compris entre 1 et 10. Définissez cette valeur comme un multiple de la taille de votre GOP (GOP recommandé : 5 s).

    Pour LL-HLS : Saisissez 1 ou 2. Définissez cette valeur comme un multiple de la taille de votre GOP (GOP recommandé : 1 s).

    Part Length (ms)

    (LL-HLS uniquement) Spécifiez la durée des segments partiels. Valeurs valides : 200 à 1 000. Nous recommandons une valeur légèrement supérieure à un tiers de la longueur du segment.

    Transcoded Stream

    Spécifiez s'il faut encapsuler les flux transcodés. Valeurs valides :

    • Source Stream Only

    • Transcoded Stream Included

    Remarque

    Si votre domaine de streaming utilise un centre de diffusion en direct situé hors de Chine continentale (Singapour, Allemagne, Japon ou Indonésie), le délai de lecture peut augmenter. Testez votre configuration avant de l'utiliser en production.

  5. Cliquez sur OK.

API

Appelez l'opération API AddLivePackageConfig pour ajouter une configuration d'encapsulation.

Remplacez les espaces réservés, y compris <Your RegionId>, <Your DomainName>, <Your AppName> et <Your StreamName>.

Pour connaître les valeurs de protocole valides, consultez AddLivePackageConfig.

Exemple de code

// 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();
    }

}
Remarque
  • Pour obtenir des instructions sur la configuration du SDK, consultez Utiliser le SDK Java.

  • Après la configuration, l'URL de streaming de qualité d'origine reste accessible.

Ingérer et lire un flux encapsulé

Ingérer un flux

Pour une lecture fluide, maintenez une taille de GOP cohérente pour votre flux ingéré.

Utilisez Open Broadcaster Software (OBS) avec les paramètres recommandés suivants :

image.png

Lire un flux encapsulé

  1. Obtenez l'URL de streaming. Le format varie selon le protocole :

    Protocole

    Format d'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>

    Important

    Le paramètre aliyunols=on est requis pour les URL de flux encapsulés.

    Vous pouvez utiliser le générateur d'URL pour générer des URL de streaming. Le format de l'URL dépend de votre configuration :

    Format de conteneur

    Protocole

    Types d'URL générés

    TS

    LL-HLS

    LL-HLS et HLS

    CMAF

    LL-HLS

    LL-HLS et HLS

    CMAF

    HLS

    HLS

    CMAF

    DASH

    DASH

    CMAF

    HLS & DASH

    HLS et DASH

  2. Lisez le flux avec un lecteur compatible. Nous recommandons ApsaraVideo Player.

    Pour utiliser la démo web d'ApsaraVideo Player :image

    a. Définissez Video Type sur Broadcast.

    b. Saisissez l'URL de streaming.

    c. Cliquez sur l'onglet Preview pour prévisualiser la vidéo.

    Important

    Pour utiliser la version web d'ApsaraVideo Player, vous devez configurer des certificats HTTPS et définir l'en-tête Access-Control-Allow-Origin pour l'accès inter-domaines. Pour plus de détails, consultez Paramètres HTTPS et Configurer les en-têtes HTTP.

Utilisation avancée

Encapsuler des flux transcodés

Vous pouvez combiner l'encapsulation avec le transcodage pour empaqueter des flux transcodés.

Procédure

  1. Configurez le transcodage pour votre flux source. Pour plus d'informations, consultez Cas d'utilisation.

  2. Lors de la création d'une configuration d'encapsulation, définissez Transcoded Stream sur Transcoded Stream Included dans la console ou définissez IgnoreTranscode sur false via l'API AddLivePackageConfig :

    // Include transcoded streams in encapsulation process (default: true = exclude)
    addLivePackageConfigRequest.setIgnoreTranscode(false);
  3. Générez l'URL de streaming pour le flux transcodé encapsulé :

    • Modèle de transcodage par défaut ou personnalisé : Ajoutez _<template-id> à StreamName. Exemple :

      http://<DomainName>/<AppName>/<StreamName>_<template-id>-llhls.m3u8?aliyunols=on&auth_key=<AuthKey>
    • Modèle de transcodage multi-débit : Ajoutez _<template-group-id> à StreamName.

    Remarque

    Combinez l'encapsulation avec le transcodage multi-débit pour activer la lecture adaptative, ce qui permet aux lecteurs de basculer automatiquement vers un débit binaire inférieur en cas de mauvaises conditions réseau.

    Le comportement des URL de sortie diffère selon le type de modèle de transcodage utilisé :

    Pour le transcodage multi-débit :

    La configuration d'encapsulation remplace le format de sortie des flux transcodés. Par exemple, si vous spécifiez un format d'encapsulation DASH - CMAF, le système générera uniquement des URL DASH - CMAF pour les flux multi-débit ; il ne générera pas d'URL HLS.

    Pour le transcodage par défaut ou personnalisé :

    Les URL de flux transcodés d'origine ne sont pas affectées. Au lieu de cela, le système génère des URL encapsulées supplémentaires pour ces flux transcodés.

  4. Lisez le flux avec un lecteur compatible.

Décalage temporel pour les flux encapsulés

Vous pouvez utiliser le décalage temporel avec des flux encapsulés. Pour plus d'informations, consultez le décalage temporel.

Lorsque le décalage temporel est activé, le format des segments décalés hérite de la longueur et du format des segments spécifiés dans votre configuration d'encapsulation.

  • HLS ou LL-HLS (CMAF) : Les segments décalés sont au format CMAF.

  • LL-HLS (TS) : Les segments décalés sont au format TS.

Référence API

Opérations API d'encapsulation de flux en direct