Enkapsulasi streaming langsung mengonversi aliran siaran langsung Anda ke dalam berbagai format kontainer agar dapat diputar 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 aliran siaran 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 meminimalkan pembaruan daftar putar dan mengurangi latensi end-to-end menjadi 3 hingga 5 detik.
Meningkatkan kompatibilitas dengan berbagai perangkat
Secara default, ApsaraVideo Live mendistribusikan aliran siaran 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).
Batasan
GOP size
GOP size dari aliran yang diingest harus konsisten. Jika Anda melakukan enkapsulasi pada aliran yang telah ditranskode, pastikan GOP size-nya juga stabil.
Durasi setiap segmen harus merupakan kelipatan dari GOP size.
Protokol LL-HLS
Tersendat (stuttering) dapat meningkat dalam kondisi jaringan buruk. Kami merekomendasikan penggunaan enkapsulasi bersama transkoding multi-bitrate, yang secara otomatis menyesuaikan bitrate.
Atur GOP size 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.
Propagasi 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.
Untuk aliran yang sedang berlangsung, konfigurasi hanya berlaku setelah Anda mengingest ulang aliran tersebut.
Konsol
Login ke ApsaraVideo Live console.
Pada panel navigasi kiri, pilih Feature Management > Encapsulation.
Pilih domain streaming, lalu klik Add.
Pada kotak dialog Encapsulation Settings, konfigurasikan parameter berikut:
Parameter
Description
AppName
Masukkan tanda bintang (
*) untuk menerapkan ke semua aplikasi. Untuk menargetkan aplikasi tertentu, masukkanAppNamedari URL ingest. Nilai tidak boleh melebihi 255 karakter.StreamName
Masukkan tanda bintang (
*) untuk menerapkan ke semua aliran. Untuk menargetkan aliran tertentu, masukkan nama aliran tersebut. 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 antara 1 hingga 10. Atur nilai ini sebagai kelipatan GOP size Anda (GOP yang direkomendasikan: 5 detik).
Untuk LL-HLS: Masukkan 1 atau 2. Atur sebagai kelipatan GOP size 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 ditranskode. Nilai yang valid:
Source Stream Only
Transcoded Stream Included
CatatanJika 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.
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();
}
}Untuk instruksi penyiapan SDK, lihat Use the Java SDK.
Setelah dikonfigurasi, URL streaming kualitas asli tetap dapat diakses.
Ingest dan putar aliran yang telah dienkapsulasi
Ingest aliran
Agar pemutaran lancar, pertahankan GOP size dari aliran yang diingest secara konsisten.
Gunakan Open Broadcaster Software (OBS) dengan pengaturan yang direkomendasikan berikut:

Mainkan aliran yang telah dienkapsulasi
Dapatkan URL streaming. Formatnya berbeda-beda 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>PentingParameter
aliyunols=onwajib digunakan untuk URL aliran yang telah dienkapsulasi.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
Mainkan aliran dengan pemutar yang kompatibel. Kami merekomendasikan ApsaraVideo Player.
Untuk menggunakan demo web ApsaraVideo Player:

a. Atur Video Type ke Broadcast.
b. Masukkan URL streaming.
c. Klik tab Preview untuk pratinjau video.
PentingUntuk menggunakan versi web ApsaraVideo Player, Anda harus mengonfigurasi sertifikat HTTPS dan mengatur header
Access-Control-Allow-Originuntuk akses lintas domain. Untuk detailnya, lihat HTTPS settings dan Configure HTTP Headers.
Penggunaan lanjutan
Enkapsulasi aliran yang telah ditranskode
Anda dapat menggabungkan enkapsulasi dengan transkoding untuk mengemas aliran yang telah ditranskode.
Prosedur
Konfigurasikan transkoding untuk aliran sumber Anda. Untuk informasi selengkapnya, lihat Use cases.
Saat membuat konfigurasi enkapsulasi, atur Transcoded Stream ke Transcoded Stream Included di Konsol atau atur
IgnoreTranscodekefalsemelalui API AddLivePackageConfig:// Include transcoded streams in encapsulation process (default: true = exclude) addLivePackageConfigRequest.setIgnoreTranscode(false);Hasilkan URL streaming untuk aliran transkode yang telah dienkapsulasi:
Template transkoding default atau kustom: Tambahkan
_<template-id>keStreamName. Contoh:http://<DomainName>/<AppName>/<StreamName>_<template-id>-llhls.m3u8?aliyunols=on&auth_key=<AuthKey>Template transkoding multi-bitrate: Tambahkan
_<template-group-id>keStreamName.
CatatanGabungkan 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 dari aliran yang telah ditranskode. 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 transkode asli tidak terpengaruh. Sebaliknya, sistem menghasilkan URL tambahan yang telah dienkapsulasi untuk aliran transkode tersebut.
Mainkan aliran dengan pemutar yang kompatibel.
Pergeseran waktu untuk aliran yang telah dienkapsulasi
Anda dapat menggunakan pergeseran waktu (time shifting) dengan aliran yang telah dienkapsulasi. Untuk informasi selengkapnya, lihat time shifting.
Saat pergeseran waktu diaktifkan, format segmen yang telah digeser mengikuti panjang segmen dan format yang ditentukan dalam konfigurasi enkapsulasi Anda.
HLS atau LL-HLS (CMAF): Segmen yang telah digeser berada dalam format CMAF.
LL-HLS (TS): Segmen yang telah digeser berada dalam format TS.