Enkapsulasi streaming langsung mengonversi aliran siaran langsung Anda ke dalam 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 format kontainer berbeda di cloud sebelum dikirimkan.
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
Implementasikan streaming langsung latensi rendah
Dibandingkan HLS standar, LL-HLS membagi aliran menjadi partial segments yang lebih kecil (200 ms hingga 1 detik). Pendekatan ini menghindari pemuatan ulang daftar putar dan mengurangi latensi end-to-end menjadi 3 hingga 5 detik.
Tingkatkan 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).
Batasan
Ukuran GOP
Ukuran GOP dari aliran yang diingest harus konsisten. Jika Anda melakukan enkapsulasi pada 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 transcoding 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.
Untuk aliran yang sedang berlangsung, konfigurasi hanya berlaku setelah Anda mengingest ulang aliran tersebut.
Konsol
Masuk 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.StreamName
Masukkan tanda bintang (
*) untuk menerapkan ke semua aliran. Untuk menargetkan aliran tertentu, masukkan nama aliran tersebut.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 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 sedikit lebih besar dari sepertiga panjang segmen.
Transcoded Stream
Tentukan apakah akan melakukan enkapsulasi pada aliran yang telah dikodekan ulang. 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>")
// 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 petunjuk 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 berjalan lancar, pertahankan ukuran GOP aliran yang diingest secara konsisten.
Gunakan Open Broadcaster Software (OBS) dengan pengaturan yang direkomendasikan berikut:

Putar aliran yang telah dienkapsulasi
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>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
Putar aliran menggunakan 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 melihat 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 dikodekan ulang
Anda dapat menggabungkan enkapsulasi dengan transcoding untuk mengemas aliran yang telah dikodekan ulang.
Prosedur
Konfigurasikan transcoding untuk aliran sumber Anda. Untuk informasi selengkapnya, lihat Live stream transcoding.
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 yang telah dikodekan ulang dan dienkapsulasi:
Template transcoding default atau kustom: Tambahkan
_<template-id>keStreamName. Contoh:http://<DomainName>/<AppName>/<StreamName>_<template-id>-llhls.m3u8?aliyunols=on&auth_key=<AuthKey>Template transcoding multi-bitrate: Tambahkan
_<template-group-id>keStreamName.
CatatanGabungkan enkapsulasi dengan transcoding 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 transcoding yang digunakan:
Untuk transcoding 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 transcoding default atau kustom:
URL aliran yang telah dikodekan ulang tetap tidak terpengaruh. Sebagai gantinya, sistem menghasilkan URL tambahan yang telah dienkapsulasi untuk aliran tersebut.
Putar aliran menggunakan pemutar yang kompatibel.
Pergeseran waktu untuk aliran yang telah dienkapsulasi
Anda dapat menggunakan pergeseran waktu 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.