L'encapsulation de flux en direct convertit vos flux en différents formats de conteneur pour une lecture via divers protocoles de streaming avec une 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 distribue 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 afin d'améliorer l'expérience de streaming.
Avantages
-
Mise en œuvre du streaming 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. Cet avantage de faible latence dépend du lecteur : celui-ci doit activer le mode basse latence et détecter la balise
#EXT-X-SERVER-CONTROL. Un lecteur HLS classique n'offre pas ce comportement à faible latence. Si vous avez besoin d'une latence encore plus réduite, utilisez le Real-Time Streaming (RTS), qui permet d'atteindre une latence de bout en bout comprise entre 200 ms et 400 ms lors de l'ingestion de flux via le protocole ARTC. Pour plus d'informations, consultez la présentation de RTS. -
Amélioration de la compatibilité avec plusieurs appareils
Par défaut, ApsaraVideo Live diffuse les flux en direct via HLS en utilisant le format de conteneur TS. Ce format est incompatible 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).
-
Non-intrusif 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.
Limites
Taille du GOP
La taille du GOP du flux ingéré doit rester constante. 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 dans des conditions réseau médiocres. 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.
Pour un flux en cours, la configuration ne prend effet qu'après la ré-ingestion du flux.
Console
Connectez-vous à la console ApsaraVideo Live.
Dans le volet de navigation de gauche, sélectionnez Feature Management > Encapsulation.
Sélectionnez un domaine de streaming, puis cliquez sur Add.
-
Dans la boîte de dialogue Encapsulation Settings, configurez les paramètres suivants :
Paramètre
Description
AppName
Saisissez un astérisque (
*) pour appliquer la configuration à toutes les applications. Pour cibler une application spécifique, saisissez leAppNamede l'URL d'ingestion. La valeur ne doit pas dépasser 255 caractères.StreamName
Saisissez un astérisque (
*) pour appliquer la configuration à 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 si les flux transcodés doivent être encapsulés. Valeurs valides :
Source Stream Only
Transcoded Stream Included
RemarqueSi 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.
Cliquez sur OK.
API
Appelez l'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 la rubrique 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();
}
}
Pour obtenir des instructions sur la configuration du SDK, consultez la rubrique Utilisation du 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 assurer une lecture fluide, maintenez une taille de GOP constante pour votre flux ingéré.
Utilisez Open Broadcaster Software (OBS) avec les paramètres recommandés suivants :

Lire un flux encapsulé
-
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>ImportantLe paramètre
aliyunols=onest obligatoire 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
-
Lisez le flux avec un lecteur compatible. Nous recommandons le lecteur ApsaraVideo.
Pour utiliser la démo web du lecteur ApsaraVideo :

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.
ImportantPour utiliser la version web du lecteur ApsaraVideo, vous devez configurer des certificats HTTPS et définir l'en-tête
Access-Control-Allow-Originpour l'accès inter-domaines. Pour plus de détails, consultez les rubriques Paramètres HTTPS et Configuration des 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
Configurez le transcodage pour votre flux source. Pour plus d'informations, consultez la rubrique Cas d'utilisation.
-
Lors de la création d'une configuration d'encapsulation, définissez Transcoded Stream sur Transcoded Stream Included dans la console ou définissez
IgnoreTranscodesurfalsevia l'API AddLivePackageConfig :// Include transcoded streams in encapsulation process (default: true = exclude) addLivePackageConfigRequest.setIgnoreTranscode(false); -
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.
RemarqueCombinez 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 originales des flux transcodés 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.
-
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 la rubrique sur 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.