全部產品
Search
文件中心

ApsaraVideo Live:直播封裝

更新時間:Feb 05, 2026

阿里雲ApsaraVideo for Live支援直播封裝服務,支援封裝HLS、DASH、LL-HLS(低延遲HLS)等播放協議,支援TS,CMAF切片格式。通過閱讀本文,您可以瞭解直播封裝服務的詳細資料。

簡介

阿里雲基礎直播服務提供RTMP、HTTP-FLV、HLS等播放協議。為支援更豐富、更低延遲的播放協議和體驗,ApsaraVideo for Live新增了直播封裝服務,根據不同的切片類型支援低延遲HLS-TS、低延遲HLS-CMAF、HLS-CMAF、DASH-CMAF、HLS&DASH-CMAF封裝協議,如下所示:

切片類型

支援的封裝協議

支援的編碼格式

TS

低延遲HLS-TS

  • 音頻編碼:AAC、OPUS、AC3、EAC3、MP3

  • 視頻編碼:H.264、H.265

CMAF

  • 低延遲HLS-CMAF

  • HLS-CMAF

  • DASH-CMAF

  • HLS&DASH-CMAF

  • 音頻編碼:AAC

  • 視頻編碼:H.264、H.265

說明

低延遲HLS-TS會以低延遲HLS - TS封裝低延遲HLS協議,低延遲HLS-CMAF會以CMAF格式封裝低延遲HLS協議,其他情況以此類推。

功能及優勢

  • 開啟直播封裝後,ApsaraVideo for Live流會被切成TS或CMAF切片,通過HLS、LL-HLS或DASH協議分發,使用者請求的播放清單中包含不斷重新整理的切片地址。

  • 相對於HLS,LL-HLS可以將切片分割成更小的Part切片(0.2~1秒),並支援阻塞載入,實現3~5秒的低延遲。相對於TS格式,CMAF封裝格式支援更多裝置和瀏覽器,並支援更新的轉碼器(codec),如H.265。

  • 直播封裝服務可與直播轉碼(含多碼率轉碼)、直播時移等組合使用,可提供靈活、豐富的能力。

使用情境

超低延時直播(RTS):直播服務提供HLS播放地址,在您的業務情境中如果需要在支援HLS協議的情況下降低延遲,可以對HLS協議進行封裝,使用LL-HLS(低延遲HLS)協議。

多裝置瀏覽器支援:直播服務提供的HLS播放地址預設採用TS切片格式進行封裝,如果TS切片格式不能滿足您的業務需求,您可以通過封裝功能使用CMAF封裝格式進行封裝,適配更多的裝置和瀏覽器。

注意事項

為了CMAF和LL-HLS播放流暢,推流需確保GOP大小穩定,且直播封裝切片時間長度為GOP時間長度的整數倍。如果封裝配置包含轉碼流,也需確保轉碼流的GOP穩定。

對於LL-HLS協議,需要注意以下事項:

  • 在網路情況不佳時卡頓率會增高,建議與多碼率轉碼組合使用,網路不佳時自動降低碼率。

  • 需要確保直播流GOP固定為1秒或2秒,否則會導致卡頓或播放失敗。

  • 需使用支援LL-HLS的播放器,如AliPlayer、hls.js、ExoPlayer等。

  • 同一主播流網域名稱最大支援直播觀看人數為10萬人,如需支援更多人觀看,請提交工單申請。

  • 網域名稱第一次添加封裝配置時,會同步下發播放網域名稱加速相關配置,3~5分鐘後可生效。

功能使用

配置直播封裝

ApsaraVideo for Live目前支援兩種方式進行直播封裝功能配置。

控制台配置直播封裝功能

  1. 登入ApsaraVideo for Live控制台
  2. 在左側導覽列單擊功能管理>直播封裝

  3. 單擊您要配置的播流網域名稱,單擊添加

    image

    直播封裝配置參數及說明如下表所示。

    參數

    描述

    AppName

    • AppName必須與推流地址中的AppName名稱一樣,封裝配置才會生效。

    • AppName不超過256字元,支援數字、大小寫字母、短劃線(-)、底線(_)。

    • AppName也支援輸入單個星號(*)字元,表示匹配任一字元串(包括Null 字元串)。

    StreamName

    • StreamName必須與推流地址中的StreamName名稱一樣,封裝配置才會生效。

    • StreamName不超過256字元,支援數字、大小寫字母、短劃線(-)、底線(_)。

    • StreamName也支援輸入單個星號(*)字元,表示匹配任一字元串(包括Null 字元串)。

    協議配置

    選擇封裝協議,可選:

    • HLS - CMAF

    • 低延遲HLS - CMAF

    • 低延遲HLS - TS

    • DASH-CMAF

      說明

      只支援DASH

    • HLS&DASH-CMAF

      說明

      DASH和HLS都支援

    切片個數

    選擇配置的切片個數,支援輸入範圍3~5的整數。

    切片時間長度

    • 當協議配置選擇HLS - CMAF、DASH-CMAF、HLS&DASH-CMAF時,取值範圍為1~10的整數,單位s。固定GOP,建議GOP為5s,需要保證切片時間長度為GOP的整數倍。

    • 當協議配置選擇低延遲HLS - CMAF和低延遲HLS - TS時,取值範圍為1~2的整數,單位s。固定GOP,建議GOP為1s,需要保證切片時間長度為GOP的整數倍。

    part切片時間長度

    僅封裝協議選擇低延遲HLS - CMAF和低延遲HLS - TS,需要配置part切片時間長度。取值範圍為200-1000的整數,單位ms。建議略大於切片時間長度的1/3。

    轉碼流

    可選僅配置原始流和包含轉碼流。

    說明
    • 若AppName/StreamName匹配的視頻流配置了直播時移功能,直播時移的切片時間長度和格式,會按照封裝配置的切片時間長度和格式生效。

    • 若AppName/StreamName匹配的視頻流配置了多碼率轉碼,多碼率HLS直播的切片時間長度和格式,會按照封裝配置的切片時間長度和格式生效。

    • 若播放網域名稱對應的地區為海外地區時(新加坡、德國、日本、印尼),可能會存在延遲較大的問題 ,建議配置完成後請先測實驗證是否符合預期。

  4. 配置參數後,單擊確定

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 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()
                                  // Endpoint 請參考 https://api.aliyun.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();
    }

}
說明
  • <Protocol>取值以及更多介面說明請參見添加直播封裝配置

  • 使用Java SDK,具體請參見Java SDK使用說明

  • 重新推流配置才會生效。

  • 配置協議封裝的情況下,原畫播流地址仍然可以正常使用。

使用直播封裝

推流

在使用直播封裝功能時,為了CMAF和低延遲HLS播放流暢,推流需確保GOP大小穩定。OBS推流參數可參考如下設定(關於OBS更多使用資訊,請參見OBS推流工具):

image.png

播放

對於不同的封裝協議,需使用不同的播放地址。各封裝協議播放地址樣本如下:

封裝協議

地址樣本

HLS

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

DASH

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

低延遲HLS

http://<DomainName>/<AppName>/<StreamName>-llhls.m3u8?aliyunols=on&auth_key=1725503******
說明
  • 在播放封裝流時,aliyunols=on為必填固定參數。

  • 各封裝格式提供的協議地址如下:

    • 低延遲HLS - TS:低延遲HLS地址和HLS地址。

    • 低延遲HLS - CMAF:低延遲HLS地址和HLS地址。

    • HLS - CMAF:HLS地址。

    • DASH - CMAF(只支援DASH):DASH地址。

    • HLS&DASH - CMAF(HLS和DASH都支援):HLS地址和DASH地址。

  • 推薦您使用阿里雲播放器,關於阿里雲播放器說明請參見播放器SDK

  • 使用Web端阿里雲播放器或直接通過控制台播放時,需要配置HTTPS認證與跨域訪問。配置HTTPS認證請參見配置HTTPS安全加速,跨域訪問配置請參見配置HTTP訊息頭

您可以參考以下樣本使用Web端阿里雲播放器播放:

image

  1. 選擇播放類型為直播

  2. 輸入播放地址。

  3. 點擊播放預覽進行播放。

重要
  • 為支援瀏覽器跨域播放,需要配置HTTP頭Access-Control-Allow-Origin,詳情請參見配置HTTP訊息頭

進階使用

封裝轉碼流

直播封裝功能可以結合轉碼功能使用,對轉碼流進行協議封裝。

封裝轉碼流,需要先完成直播轉碼功能配置,具體操作請參見直播轉碼

此處假設您已完成轉碼功能配置。

在進行封裝配置時,將轉碼流也進行封裝。

//是否忽略轉碼流,true/false,預設值true
addLivePackageConfigRequest.setIgnoreTranscode(<false>);

播放封裝轉碼流只需要將封裝協議地址StreamName替換成StreamName_轉碼模板ID的形式。

例如現在要播放一個低延遲HLS - CMAF的轉碼流,樣本地址如下:

http://<DomainName>/<AppName>/<StreamName_轉碼模板ID>-llhls.m3u8?aliyunols=on&auth_key=1725503******
說明
  • 建議您可以將封裝功能與多碼率轉碼功能結合使用,在網路不佳時自動調整碼率播放。

  • 播放封裝多碼率轉碼流只需將StreamName替換成StreamName_轉碼模板組ID的形式。

重要
  • 封裝多碼率轉碼流,轉碼流地址會按照直播封裝指定的協議和切片格式改變(例如指定封裝格式為DASH - CMAF(只支援DASH),多碼率轉碼將只會提供DASH - CMAF(只支援DASH)轉碼流地址,不會提供HLS轉碼流地址)。

  • 封裝通用轉碼或自訂轉碼流,轉碼流地址不受影響,會另外增加轉碼流的封裝地址。

  • 封裝地址請參見本文檔播放封裝流相關內容。

時移播放封裝流

直播時移功能可以讓直播觀眾在直播過程中回看直播內容,直播封裝功能可與直播時移功能組合使用,詳情可參見直播時移

說明

如果開啟了直播時移,時移的封裝格式將採用直播封裝指定的切片長度和格式。對於HLS或低延遲HLS-CMAF格式,直播時移切片也將變成CMAF格式;對於低延遲HLS-TS格式,直播時移切片仍為低延遲HLS - TS格式。

相關文檔

直播封裝相關API