All Products
Search
Document Center

ApsaraVideo Live:Enkapsulasi streaming langsung

Last Updated:Aug 12, 2026

Enkapsulasi streaming langsung mengonversi streaming langsung Anda ke berbagai format kontainer untuk pemutaran melalui berbagai protokol streaming dengan latensi rendah.

Format kontainer yang didukung

ApsaraVideo Live mendukung Real-Time Messaging Protocol (RTMP), HTTP-FLV, dan HTTP Live Streaming (HLS). Untuk mengurangi latensi dan meningkatkan kompatibilitas, enkapsulasi streaming langsung mengonversi aliran ke dalam berbagai format kontainer di cloud sebelum didistribusikan.

Tabel berikut menjelaskan format kontainer yang didukung:

Container format

Supported streaming protocol

Supported codec

TS

Low-Latency HLS (LL-HLS)

Audio: AAC, OPUS, AC3, EAC3, MP3

Video: H.264, H.265

CMAF

LL-HLS, HLS, DASH

Audio: AAC

Video: H.264, H.265

Cara kerja

Enkapsulasi streaming langsung membagi aliran menjadi segmen-segmen dalam format TS atau CMAF. Sistem kemudian mendistribusikan segmen tersebut melalui protokol HLS, LL-HLS, atau DASH. Untuk setiap aliran, sistem menghasilkan file manifest yang mencatat URL segmen secara berurutan. Saat klien meminta streaming langsung, server mengembalikan manifest terbaru.

Anda dapat menggabungkan fitur ini dengan live stream transcoding dan time shifting untuk meningkatkan pengalaman streaming.

Keunggulan

  • Menerapkan streaming langsung berlatensi rendah

    Dibandingkan HLS standar, LL-HLS membagi aliran menjadi partial segments yang lebih kecil (200 ms hingga 1 detik). Pendekatan ini menghilangkan kebutuhan reload playlist dan mengurangi latensi end-to-end menjadi 3 hingga 5 detik. Manfaat latensi rendah ini bergantung pada pemutar: pemutar harus mengaktifkan low-latency mode dan mendeteksi tag #EXT-X-SERVER-CONTROL. Pemutar HLS konvensional tidak memberikan perilaku latensi rendah. Jika Anda memerlukan latensi yang lebih rendah, gunakan Real-Time Streaming (RTS), yang mencapai latensi end-to-end 200 ms hingga 400 ms saat Anda mengingest aliran melalui protokol ARTC. Untuk informasi selengkapnya, lihat RTS overview.

  • Meningkatkan kompatibilitas dengan berbagai perangkat

    Secara default, ApsaraVideo Live mendistribusikan streaming langsung melalui HLS menggunakan format kontainer TS. Format ini tidak kompatibel dengan beberapa perangkat dan browser. Gunakan enkapsulasi untuk mengemas konten ke dalam format CMAF, yang mendukung lebih banyak perangkat, platform, dan kodek (termasuk H.265).

  • Non-intrusif terhadap aliran yang sudah ada

    Mengaktifkan enkapsulasi streaming langsung merupakan operasi non-intrusif. Operasi ini hanya menghasilkan aliran pemutaran terenkapsulasi tambahan berdasarkan aliran ingest asli. Aliran RTMP, HTTP-FLV, dan HLS yang sudah ada tetap berfungsi seperti sebelumnya, dan konfigurasi perekaman Anda tidak terpengaruh. Setelah Anda mengaktifkan enkapsulasi, URL streaming baru dalam format CMAF dan Low-Latency HLS (LL-HLS) menjadi tersedia.

Batasan

GOP size

  • Ukuran GOP dari aliran yang diingest harus konsisten. Jika Anda mengenkapsulasi aliran yang telah dikodekan ulang, pastikan ukuran GOP-nya juga stabil.

  • Durasi setiap segmen harus merupakan kelipatan dari ukuran GOP.

Protokol LL-HLS

  • Tersendat (stuttering) dapat meningkat dalam kondisi jaringan buruk. Kami menyarankan menggunakan enkapsulasi bersama transkoding multi-bitrate, yang secara otomatis menyesuaikan bitrate.

  • Atur ukuran GOP menjadi 1 atau 2 detik untuk mencegah tersendat atau kegagalan pemutaran.

  • Domain streaming utama dapat mendukung hingga 100.000 penonton. Untuk menambah kuota ini, submit a ticket.

Penyebaran konfigurasi

Saat Anda menambahkan konfigurasi enkapsulasi untuk pertama kalinya, sistem akan memperbarui pengaturan pengiriman konten. Perubahan ini memerlukan waktu 3 hingga 5 menit untuk berlaku.

Buat konfigurasi enkapsulasi

Buat konfigurasi enkapsulasi di Konsol atau dengan memanggil operasi API.

Catatan

Untuk aliran yang sedang berlangsung, konfigurasi hanya berlaku setelah Anda melakukan re-ingest aliran.

Konsol

  1. Login ke ApsaraVideo Live console.

  2. Pada panel navigasi kiri, pilih Feature Management > Encapsulation.

  3. Pilih domain streaming, lalu klik Add.

  4. Pada kotak dialog Encapsulation Settings, konfigurasikan parameter berikut:

    Parameter

    Description

    AppName

    Masukkan tanda bintang (*) untuk menerapkan ke semua aplikasi. Untuk menargetkan aplikasi tertentu, masukkan AppName dari URL ingest. Nilai tidak boleh melebihi 255 karakter.

    StreamName

    Masukkan tanda bintang (*) untuk menerapkan ke semua aliran. Untuk menargetkan aliran tertentu, masukkan nama aliran. Nilai tidak boleh melebihi 255 karakter.

    Protocol

    Pilih format kontainer dan protokol pemutaran: Nilai yang valid:

    • HLS - CMAF

    • LL-HLS - CMAF

    • LL-HLS - TS

    • DASH - CMAF

    • HLS & DASH - CMAF

    Segment Quantity

    Tentukan jumlah segmen per file manifest. Nilai yang valid: 3 hingga 5.

    Segment Length (s)

    Untuk HLS atau DASH: Masukkan bilangan bulat dari 1 hingga 10. Atur nilai ini sebagai kelipatan ukuran GOP Anda (GOP yang direkomendasikan: 5 detik).

    Untuk LL-HLS: Masukkan 1 atau 2. Atur sebagai kelipatan ukuran GOP Anda (GOP yang direkomendasikan: 1 detik).

    Part Length (ms)

    (LL-HLS only) Tentukan durasi partial segments. Nilai yang valid: 200 hingga 1.000. Kami merekomendasikan nilai yang sedikit lebih besar dari sepertiga panjang segmen.

    Transcoded Stream

    Tentukan apakah akan mengenkapsulasi aliran yang telah dikodekan ulang. Nilai yang valid:

    • Source Stream Only

    • Transcoded Stream Included

    Catatan

    Jika domain streaming Anda menggunakan live center di luar Tiongkok daratan (Singapura, Jerman, Jepang, atau Indonesia), penundaan pemutaran dapat meningkat. Uji konfigurasi Anda sebelum digunakan di lingkungan produksi.

  5. Klik OK.

API

Panggil API AddLivePackageConfig untuk menambahkan konfigurasi enkapsulasi.

Ganti placeholder, termasuk <Your RegionId>, <Your DomainName>, <Your AppName>, dan <Your StreamName>.

Untuk nilai protokol yang valid, lihat AddLivePackageConfig.

Contoh kode

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

}
Catatan
  • Untuk petunjuk penyiapan SDK, lihat Use the Java SDK.

  • Setelah konfigurasi, URL streaming kualitas asli tetap dapat diakses.

Ingest dan putar aliran terenkapsulasi

Ingest aliran

Agar pemutaran lancar, pertahankan ukuran GOP aliran yang Anda ingest secara konsisten.

Gunakan Open Broadcaster Software (OBS) dengan pengaturan yang direkomendasikan berikut:

image.png

Mainkan aliran terenkapsulasi

  1. Dapatkan URL streaming. Formatnya bervariasi tergantung protokol:

    Protocol

    URL format

    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>

    Penting

    Parameter aliyunols=on wajib digunakan untuk URL aliran terenkapsulasi.

    Anda dapat menggunakan URL generator untuk menghasilkan URL streaming. Format URL bergantung pada konfigurasi Anda:

    Container format

    Protocol

    Generated URL types

    TS

    LL-HLS

    LL-HLS dan HLS

    CMAF

    LL-HLS

    LL-HLS dan HLS

    CMAF

    HLS

    HLS

    CMAF

    DASH

    DASH

    CMAF

    HLS & DASH

    HLS dan DASH

  2. Mainkan aliran dengan pemutar yang kompatibel. Kami merekomendasikan ApsaraVideo Player.

    Untuk menggunakan demo web ApsaraVideo Player:image

    a. Atur Video Type ke Broadcast.

    b. Masukkan URL streaming.

    c. Klik tab Preview untuk pratinjau video.

    Penting

    Untuk menggunakan versi web ApsaraVideo Player, Anda harus mengonfigurasi sertifikat HTTPS dan mengatur header Access-Control-Allow-Origin untuk akses lintas domain. Untuk detailnya, lihat HTTPS settings dan Configure HTTP Headers.

Penggunaan lanjutan

Enkapsulasi aliran yang telah dikodekan ulang

Anda dapat menggabungkan enkapsulasi dengan transkoding untuk mengemas aliran yang telah dikodekan ulang.

Prosedur

  1. Konfigurasikan transkoding untuk aliran sumber Anda. Untuk informasi selengkapnya, lihat Use cases.

  2. Saat membuat konfigurasi enkapsulasi, atur Transcoded Stream ke Transcoded Stream Included di Konsol atau atur IgnoreTranscode ke false melalui API AddLivePackageConfig:

    // Include transcoded streams in encapsulation process (default: true = exclude)
    addLivePackageConfigRequest.setIgnoreTranscode(false);
  3. Hasilkan URL streaming untuk aliran terenkapsulasi yang telah dikodekan ulang:

    • Template transkoding default atau kustom: Tambahkan _<template-id> ke StreamName. Contoh:

      http://<DomainName>/<AppName>/<StreamName>_<template-id>-llhls.m3u8?aliyunols=on&auth_key=<AuthKey>
    • Template transkoding multi-bitrate: Tambahkan _<template-group-id> ke StreamName.

    Catatan

    Gabungkan enkapsulasi dengan transkoding multi-bitrate untuk mengaktifkan pemutaran adaptif, yang memungkinkan pemutar secara otomatis beralih ke bitrate lebih rendah saat kondisi jaringan buruk.

    Perilaku URL output berbeda tergantung jenis template transkoding yang digunakan:

    Untuk transkoding multi-bitrate:

    Konfigurasi enkapsulasi menggantikan format output aliran yang telah dikodekan ulang. Misalnya, jika Anda menentukan format enkapsulasi DASH - CMAF, sistem hanya akan menghasilkan URL DASH - CMAF untuk aliran multi-bitrate; sistem tidak akan menghasilkan URL HLS.

    Untuk transkoding default atau kustom:

    URL aliran yang telah dikodekan ulang asli tidak terpengaruh. Sebagai gantinya, sistem menghasilkan URL terenkapsulasi tambahan untuk aliran yang telah dikodekan ulang tersebut. 

  4. Mainkan aliran dengan pemutar yang kompatibel.

Pergeseran waktu untuk aliran terenkapsulasi

Anda dapat menggunakan pergeseran waktu dengan aliran terenkapsulasi. Untuk informasi selengkapnya, lihat time shifting.

Saat pergeseran waktu diaktifkan, format segmen yang digeser mengikuti panjang segmen dan format yang ditentukan dalam konfigurasi enkapsulasi Anda.

  • HLS atau LL-HLS (CMAF): Segmen yang digeser berada dalam format CMAF.

  • LL-HLS (TS): Segmen yang digeser berada dalam format TS.

Referensi API

Operasi API enkapsulasi streaming langsung