ApsaraVideo Live memungkinkan Anda merekam streaming langsung secara real-time untuk diputar kembali nanti. Topik ini menjelaskan fitur perekaman streaming langsung.
Pengenalan Fungsi
ApsaraVideo Live mengalirkan data dari klien ingest secara real-time. Untuk menonton ulang aliran setelah selesai, Anda harus menggunakan fitur perekaman streaming langsung.
Fitur perekaman streaming langsung merekam data aliran dari pusat siaran langsung dan menyimpannya ke lokasi penyimpanan yang Anda tentukan. Tersedia dua metode penyimpanan: Store Recordings in ApsaraVideo VOD dan Store Recordings in OSS.
Cara kerja perekaman streaming langsung
Proses perekaman streaming langsung mengambil aliran langsung yang Anda ingest, mengemas audio dan video ke dalam segmen media individual dalam format kontainer TS, lalu menyimpannya. Perekaman streaming langsung mengikuti prinsip-prinsip berikut:
Perekaman streaming langsung hanya mengubah format kontainer audio dan video, misalnya dari RTMP atau FLV ke TS. Fitur ini tidak pernah memodifikasi konten audio atau video pada lapisan encoding. Misalnya, jika aliran yang Anda ingest memiliki artefak video, file rekaman juga akan memiliki artefak video tersebut.
Perekaman streaming langsung memiliki izin untuk menulis rekaman ke alamat penyimpanan Anda. Fitur ini tidak memiliki izin untuk memodifikasi atau menghapus file apa pun di alamat penyimpanan tersebut, termasuk rekaman yang telah ditulisnya. Anda sepenuhnya bertanggung jawab atas pengelolaan rekaman di alamat penyimpanan Anda.
Penggunaan fitur perekaman streaming langsung dikenai biaya layanan perekaman. Secara default, rekaman disimpan dalam format file TS/M3U8. Jika diperlukan transkoding dan konversi format kontainer, biaya tambahan biaya konversi format kontainer perekaman akan dikenakan. Untuk informasi lebih lanjut tentang aturan penagihan, lihat Biaya Perekaman Streaming Langsung.
Persyaratan
Format encoding audio dan video
Karena perekaman streaming langsung pertama-tama membagi streaming langsung menjadi file TS, format encoding audio dan video dari aliran yang Anda ingest harus memenuhi persyaratan format kontainer TS. Berdasarkan standar FLV dan ISO/IEC 13818-1, perekaman streaming langsung hanya mendukung format encoding berikut:
Video: H.264, HEVC, MPEG-4
Audio: AAC, MP3
Jika streaming langsung berisi audio atau video yang menggunakan format encoding lain, perekaman streaming langsung mungkin gagal. Misalnya, rekaman mungkin tidak dihasilkan, rekaman menampilkan layar hitam, atau rekaman tidak memiliki audio. Masalah tak terduga lainnya juga dapat terjadi.
Penanganan streaming langsung abnormal
Aliran standar (memenuhi persyaratan encoding, laju frame dan timestamp stabil)✅ Rekaman dihasilkan 100%.
Aliran dengan gangguan ringan (fluktuasi laju frame sesekali atau loncatan timestamp)✅ Sistem secara otomatis menangani masalah ini untuk kompatibilitas.
Aliran dengan gangguan parah (tidak adanya frame video dalam waktu lama, timestamp tidak teratur, atau keyframe hilang)❌ Keberhasilan perekaman tidak dijamin.
Perbandingan fitur
Anda dapat merekam dan menyimpan streaming langsung di ApsaraVideo VOD atau OSS. Kedua metode ini cocok untuk skenario berbeda. Anda dapat memilih metode penyimpanan sesuai kebutuhan.
Metode penyimpanan | Produk atau layanan terkait | Metode perekaman yang didukung | Format kontainer | Skenario |
Rekam dan simpan di VOD | Aktifkan ApsaraVideo VOD |
|
| Ideal untuk pasca-produksi konten yang direkam, seperti pengeditan video, pemutaran, dan pengaturan gambar mini video. |
Rekam dan simpan di OSS | Aktifkan OSS |
|
| Ideal untuk mengelola konten yang direkam, dengan fokus pada penyimpanan. |
Anda tidak dapat mengonfigurasi kedua metode penyimpanan untuk streaming langsung yang sama.
Untuk semua rekaman, streaming langsung pertama-tama dibagi menjadi file TS lalu dikemas menjadi file rekaman dalam format kontainer yang ditentukan. Biaya konversi format kontainer dikenakan untuk format selain TS/M3U8.
Aturan untuk perekaman otomatis
Anda dapat menentukan nama domain, nama aplikasi, atau nama aliran untuk merekam semua aplikasi di bawah nama domain, semua streaming langsung dalam aplikasi, atau streaming langsung tertentu. Anda dapat mengatur AppName dan StreamName ke tanda bintang (*) untuk mewakili semua nama aplikasi dan semua nama aliran.
Saat Anda mengonfigurasi templat perekaman untuk menyimpan rekaman di OSS atau VOD, Anda dapat mengonfigurasi beberapa templat. Jika streaming langsung cocok dengan beberapa templat perekaman, aturan prioritas menentukan templat mana yang berlaku. Tabel berikut mencantumkan prioritasnya. Semakin rendah angkanya, semakin tinggi prioritasnya.
Prioritas | DomainName | AppName | StreamName |
1 | ✓ | ✓ | ✓ |
2 | ✓ | ✓ | * |
3 | ✓ | * | * |
Tanda centang (✓) menunjukkan bahwa parameter dikonfigurasi dengan nilai spesifik, bukan tanda bintang (*). Tanda bintang (*) menunjukkan bahwa parameter diatur agar cocok dengan semua nilai.
Rekam dan simpan di VOD
Prasyarat
Untuk menyimpan rekaman streaming langsung di ApsaraVideo VOD, Anda harus mengaktifkan layanan ApsaraVideo VOD dan mengelola bucket penyimpanan.
Rekaman disimpan di ApsaraVideo VOD dan dikenai biaya penyimpanan. Untuk informasi lebih lanjut, lihat Penagihan Layanan Dasar.
Saat Anda mengaktifkan bucket sistem VOD, wilayah bucket sistem VOD harus sama dengan wilayah pusat siaran langsung untuk nama domain yang ingin Anda konfigurasi.
ApsaraVideo Live tidak mendukung perekaman ke VOD untuk akun di cloud keuangan.
Konfigurasi fitur
ApsaraVideo Live menyediakan dua metode untuk menambahkan konfigurasi perekaman dan penyimpanan di VOD.
Setelah menyelesaikan konfigurasi, Anda harus me-restart ingest aliran agar konfigurasi perekaman berlaku.
Rekaman dihasilkan setelah aliran terputus selama 180 detik.
Metode 1: Gunakan konsol
Login ke Konsol ApsaraVideo Live.
Di panel navigasi sebelah kiri, pilih Feature Management > Recording. Di halaman Recording, klik tab VOD.
Pilih domain streaming yang ingin Anda konfigurasi dan klik Add.
Konfigurasikan templat perekaman.

Tabel berikut menjelaskan parameter untuk templat perekaman.
Parameter
Deskripsi
Application Name
Nama aplikasi untuk video. Application Name yang dimasukkan harus sama dengan Application Name untuk ingest aliran agar pengaturan berlaku. Jika Anda ingin merekam streaming langsung untuk semua aplikasi di bawah nama domain Anda, masukkan karakter wildcard (*).
Stream Name
Perekaman ke VOD mendukung perekaman tingkat aliran. Masukkan nama aliran spesifik. Untuk merekam semua aliran di bawah AppName yang ditentukan, masukkan tanda bintang (*).
CatatanParameter AppName dan StreamName dapat berisi huruf, angka, tanda hubung (-), dan garis bawah (_). Panjangnya dibatasi hingga 255 karakter.
Bucket
Anda dapat memilih alamat penyimpanan yang telah dibuat di layanan VOD di wilayah saat ini. Jika Anda tidak menemukan alamat penyimpanan, klik Refresh untuk menyinkronkan.
Recording Cycle
Recording Cycle adalah durasi maksimum file video sesuai permintaan (VOD) yang dihasilkan dari streaming langsung. Rentang yang valid adalah 15 hingga 360 menit. Jika siklus perekaman yang ditentukan terlampaui, sistem menghasilkan file baru berdasarkan aturan penamaan perekaman. Panjang segmen ts default adalah 30 detik.
Transcoding Settings
Pilih aturan transkoding dari daftar untuk mentranskode video yang direkam di layanan VOD. Anda dapat mentranskode video ke spesifikasi berbeda atau mempertahankan kualitas asli tanpa transkoding.
Untuk informasi lebih lanjut tentang operasi templat transkoding perekaman, lihat Konfigurasi transkoding ApsaraVideo VOD.
CatatanWilayah templat transkoding ApsaraVideo VOD harus sama dengan wilayah nama domain Anda saat ini. Misalnya, jika nama domain saat ini berada di wilayah China (Shanghai), templat transkoding ApsaraVideo VOD juga harus berada di wilayah China (Shanghai).
Auto Merge
Jika Anda mengaktifkan fitur ini, beberapa file epoch perekaman secara otomatis digabung menjadi satu rekaman dan disimpan di VOD setelah perekaman streaming langsung berakhir.
CatatanSetelah Anda mengaktifkan penggabungan otomatis rekaman dari beberapa siklus, fitur pengeditan dan produksi serta fitur transkoding ApsaraVideo VOD akan digunakan. Untuk detail penagihan, lihat Penagihan pengeditan dan produksi dan Penagihan transkoding aset media.
Transcoding Settings of Merged Video
Pilih templat transkoding dari daftar drop-down, yang diambil dari ApsaraVideo VOD. Sistem melakukan transkoding pada video yang digabung berdasarkan pengaturan templat transkoding. Untuk informasi lebih lanjut, lihat Templat Transkoding.
CatatanWilayah templat transkoding ApsaraVideo VOD harus sama dengan wilayah nama domain Anda saat ini. Misalnya, jika nama domain saat ini berada di wilayah China (Shanghai), templat transkoding ApsaraVideo VOD juga harus berada di wilayah China (Shanghai).
Klik OK.
Metode 2: Gunakan API
Anda dapat memanggil API Tambah Konfigurasi Perekaman Streaming Langsung ke VOD untuk menambahkan konfigurasi. Berikut ini contoh panggilan SDK:
// File ini di-generate otomatis, jangan diedit. Terima kasih.
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 AddLiveRecordVodConfig {
public static void main(String[] args) throws Exception {
// Konfigurasi HttpClient
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // Atur waktu timeout koneksi, default 10 detik
.responseTimeout(Duration.ofSeconds(10)) // Atur waktu timeout respons, default 20 detik
.maxConnections(128) // Atur ukuran kolam koneksi
.maxIdleTimeOut(Duration.ofSeconds(50)) // Atur timeout kolam koneksi, default 30 detik
// Konfigurasi proxy
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001))
.setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>"))
// Jika koneksi https, perlu konfigurasi sertifikat, atau abaikan sertifikat (.ignoreSSL(true))
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Konfigurasi informasi autentikasi Credential, termasuk ak, secret, token
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah diatur.
.accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
//.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // gunakan token STS
.build());
// Konfigurasi Client
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // ID Wilayah
//.httpClient(httpClient) // Gunakan HttpClient yang dikonfigurasi, jika tidak gunakan HttpClient default (Apache HttpClient)
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // Konfigurasi tingkat layanan
// Penimpaan konfigurasi tingkat klien, dapat mengatur Endpoint, parameter permintaan Http, dll.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// Untuk endpoint, lihat https://api.aliyun.com/product/live
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Pengaturan parameter untuk permintaan API
AddLiveRecordVodConfigRequest addLiveRecordVodConfigRequest = AddLiveRecordVodConfigRequest.builder()
.regionId("<Your RegionId>")
.domainName("<Your DomainNmae>")
.appName("<Your AppName>")
.streamName("<Your StreamName>")
.vodTranscodeGroupId("<Your VodTranscodeGroupId>")
// Penimpaan konfigurasi tingkat permintaan, dapat mengatur parameter permintaan Http, dll.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Dapatkan nilai kembali permintaan API secara asinkron
CompletableFuture<AddLiveRecordVodConfigResponse> response = client.addLiveRecordVodConfig(addLiveRecordVodConfigRequest);
// Dapatkan nilai kembali permintaan API secara sinkron
AddLiveRecordVodConfigResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Pemrosesan nilai kembali secara asinkron
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Penanganan pengecualian
System.out.println(throwable.getMessage());
return null;
});*/
// Akhirnya, tutup klien
client.close();
}
}Kode contoh di atas mengonfigurasi perekaman ke VOD untuk nama domain <DomainName>. AppName adalah <AppName>, dan StreamName adalah <StreamName>. Konten yang direkam tidak ditranskode (VOD_NO_TRANSCODE) dan disimpan di bucket sistem ApsaraVideo VOD <StorageLocation>.
Untuk detail konfigurasi AppName dan StreamName, lihat Aturan untuk perekaman otomatis.
Transkode konten yang direkam
VOD menyimpan rekaman dalam format M3U8 secara default. Untuk menyimpan rekaman dalam format lain, Anda dapat mengonfigurasi Recording Transcoding Template.
addLiveRecordVodConfigRequest.setVodTranscodeGroupId("<TranscodeGroupId>");Anda harus mengonfigurasi templat transkoding di sistem VOD. Untuk informasi lebih lanjut, lihat Templat transkoding.
<TranscodeGroupId> adalah Transcoding Template Group ID yang dikonfigurasi di VOD.
Setelah Anda mengonfigurasi transkoding, rekaman ditranskode dan URL transkoding dihasilkan. File asli tetap disimpan.
Rekam dan simpan di OSS
Prasyarat
Untuk mengonfigurasi perekaman streaming langsung agar menyimpan rekaman di OSS, Anda harus menyelesaikan operasi berikut:
Aktifkan OSS dan buat bucket. Untuk informasi lebih lanjut, lihat Buat bucket.
PentingMenyimpan file rekaman di OSS dikenai biaya penyimpanan. Untuk informasi lebih lanjut, lihat Biaya Penyimpanan.
Region bucket OSS untuk menyimpan rekaman harus sesuai dengan wilayah nama domain yang dikonfigurasi untuk perekaman. Misalnya, jika nama domain streaming langsung berada di wilayah China (Shanghai), bucket juga harus berada di wilayah China (Shanghai).
Konfigurasikan izin bagi ApsaraVideo Live untuk menulis data ke OSS. Otorisasi ini biasanya diberikan secara otomatis saat Anda mengaktifkan layanan ApsaraVideo Live.
PentingJika Anda tidak sengaja menghapus izin ini, Anda dapat mengklik Otorisasi Akses ke Sumber Daya Cloud untuk memberikannya kembali.
Kami menyarankan Anda menggunakan Akun Alibaba Cloud Anda untuk memberikan izin. Jika Anda menggunakan Pengguna RAM, pengguna tersebut harus memiliki izin berikut:
ram:CreateRole,ram:GetRole,ram:ListPoliciesForRole, danram:AttachPolicyToRole. Memberikan izin ini kepada Pengguna RAM menimbulkan risiko keamanan dan tidak disarankan.
Konfigurasi fitur
ApsaraVideo Live menyediakan dua metode untuk menambahkan konfigurasi perekaman dan penyimpanan di OSS.
Setelah menyelesaikan konfigurasi, Anda harus me-restart ingest aliran agar konfigurasi perekaman berlaku.
Rekaman dihasilkan setelah aliran terputus selama periode yang lebih lama dari durasi penggabungan yang dikonfigurasi untuk gangguan aliran (180 detik secara default).
Metode 1: Gunakan konsol
Login ke Konsol ApsaraVideo Live.
Di panel navigasi sebelah kiri, pilih Feature Management > Recording. Di halaman Recording, klik tab OSS.
Pilih domain streaming dan klik Add.
Konfigurasikan templat perekaman.

Tabel 1. Parameter templat perekaman
Parameter
Deskripsi
Application Name
Nama aplikasi. AppName yang Anda masukkan harus sama dengan AppName di URL ingest agar konfigurasi berlaku. Untuk merekam di tingkat nama domain, masukkan tanda bintang (*).
Stream Name
Perekaman ke OSS mendukung perekaman tingkat aliran. Masukkan nama aliran spesifik. Untuk merekam semua aliran di bawah AppName yang ditentukan, masukkan tanda bintang (*).
CatatanParameter AppName dan StreamName dapat berisi huruf, angka, tanda hubung (-), dan garis bawah (_). Panjangnya dibatasi hingga 255 karakter.
Tanda bintang (*) hanya dapat dimasukkan sebagai nilai tunggal dan tidak dapat digunakan sebagai karakter wildcard dalam string.
Storage Location
Anda dapat memilih bucket yang telah dibuat di OSS di wilayah saat ini.
CatatanAda dua jenis bucket penyimpanan:
Bucket standar: digunakan untuk penyimpanan file umum.
Bucket media: khusus untuk transkoding video. File yang disimpan di jenis bucket ini secara otomatis memicu pekerjaan transkoding MPS.
Sistem tidak membedakan jenis bucket. Untuk melakukan transkoding video, catat nama bucket media untuk memastikan file media yang ditranskode disimpan di lokasi yang benar.
Interruption Duration Threshold
Jika durasi gangguan aliran melebihi durasi splicing yang ditentukan, file baru dihasilkan. Durasi splicing untuk aliran yang terputus dapat diatur dari 15 hingga 21.600 detik.
Storage Format
Format yang didukung adalah flv, m3u8, mp4, dan cmaf.
CatatanAnda harus mengonfigurasi setidaknya satu format penyimpanan. Format CMAF tidak dapat dipilih bersamaan dengan format M3U8.
Naming Conventions
Jalur penyimpanan default adalah record/{AppName}/{StreamName}/{EscapedStartTime }_{EscapedEndTime }.
Contoh:
Jika AppName adalah liveApp**** dan StreamName adalah liveStream****, jalur penyimpanan untuk rekaman dalam format m3u8 adalah record/liveApp****/liveStream****/{EscapedStartTime}_{EscapedEndTime }.
TS File Duration
Durasi segmen tunggal. Nilai default adalah 30 detik. Nilainya dapat berkisar antara 5 hingga 30 detik.
Recording Cycle
Recording Cycle dapat diatur dari 15 hingga 360 menit. Durasi perekaman maksimum yang didukung adalah 6 jam. Jika siklus perekaman yang ditentukan terlampaui, sistem menghasilkan file baru berdasarkan aturan penamaan perekaman.
CatatanEpoch perekaman adalah durasi maksimum file VOD yang dikonversi dari streaming langsung.
Konfigurasikan perekaman aliran yang ditranskode. (Opsional)
PentingSaat Anda menggunakan fitur transkoding streaming langsung, Anda dikenai biaya berdasarkan standar transkoding, resolusi, dan panjang total aliran yang ditranskode. Untuk informasi lebih lanjut, lihat Biaya transkoding streaming langsung.

Tabel 2. Parameter untuk perekaman aliran yang ditranskode
Parameter
Deskripsi
Transcoded Stream Recording
Nyalakan sakelar Transcoded Stream Recording dan konfigurasikan parameter.
Storage Format
Format yang didukung adalah flv, m3u8, mp4, dan cmaf.
CatatanAnda harus mengonfigurasi setidaknya satu format penyimpanan. Format CMAF tidak dapat dipilih bersamaan dengan format M3U8.
Naming Conventions
Jalur penyimpanan default adalah transcodeRecord/{AppName}/{StreamName}_{Transcoding Template ID}/{EscapedStartTime }_{EscapedEndTime }.
Contoh:
Jika AppName adalah liveApp****, StreamName adalah liveStream****, dan Transcoding Template ID adalah lld, jalur penyimpanan aktual untuk rekaman dalam format m3u8 adalah transcodeRecord/liveApp****/liveStream****_lld/{EscapedStartTime}_{EscapedEndTime }.
TS File Duration
Durasi segmen tunggal. Nilai default adalah 30 detik. Nilainya dapat berkisar antara 5 hingga 30 detik.
Recording Cycle
Epoch Perekaman berkisar antara 15 hingga 360 menit. Durasi perekaman maksimum adalah 6 jam. Jika durasi melebihi 6 jam, sistem menghasilkan file baru berdasarkan konvensi penamaan perekaman.
CatatanEpoch perekaman adalah durasi maksimum file VOD yang dikonversi dari streaming langsung.
Transcoding Template ID
Anda dapat memilih templat transkoding spesifik (maksimal 10) atau semua templat transkoding.
Agar templat transkoding berlaku, AppName-nya harus sama dengan AppName templat perekaman. Jika Anda belum memiliki templat transkoding, tambahkan terlebih dahulu. Untuk informasi lebih lanjut, lihat transkoding default.
Klik OK.
Metode 2: Gunakan API
Anda dapat memanggil API Tambah Konfigurasi Perekaman untuk menambahkan konfigurasi. Berikut ini contoh panggilan SDK:
// File ini di-generate otomatis, jangan diedit. Terima kasih.
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 AddLiveAppRecordConfig {
public static void main(String[] args) throws Exception {
// Konfigurasi HttpClient
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // Atur waktu timeout koneksi, default 10 detik
.responseTimeout(Duration.ofSeconds(10)) // Atur waktu timeout respons, default 20 detik
.maxConnections(128) // Atur ukuran kolam koneksi
.maxIdleTimeOut(Duration.ofSeconds(50)) // Atur timeout kolam koneksi, default 30 detik
// Konfigurasi proxy
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001))
.setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>"))
// Jika koneksi https, perlu konfigurasi sertifikat, atau abaikan sertifikat (.ignoreSSL(true))
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Konfigurasi informasi autentikasi Credential, termasuk ak, secret, token
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah diatur.
.accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
//.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // gunakan token STS
.build());
// Konfigurasi Client
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // ID Wilayah
//.httpClient(httpClient) // Gunakan HttpClient yang dikonfigurasi, jika tidak gunakan HttpClient default (Apache HttpClient)
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // Konfigurasi tingkat layanan
// Penimpaan konfigurasi tingkat klien, dapat mengatur Endpoint, parameter permintaan Http, dll.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// Untuk endpoint, lihat https://api.aliyun.com/product/live
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Pengaturan parameter untuk permintaan API
AddLiveAppRecordConfigRequest addLiveAppRecordConfigRequest = AddLiveAppRecordConfigRequest.builder()
.domainName("<Your DomainName>")
.appName("<Your AppName>")
.ossEndpoint("<Your OSSEndpoint>")
.ossBucket("<Your OSSBucket>")
.streamName("<Your StreamName>")
// Penimpaan konfigurasi tingkat permintaan, dapat mengatur parameter permintaan Http, dll.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Dapatkan nilai kembali permintaan API secara asinkron
CompletableFuture<AddLiveAppRecordConfigResponse> response = client.addLiveAppRecordConfig(addLiveAppRecordConfigRequest);
// Dapatkan nilai kembali permintaan API secara sinkron
AddLiveAppRecordConfigResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Pemrosesan nilai kembali secara asinkron
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Penanganan pengecualian
System.out.println(throwable.getMessage());
return null;
});*/
// Akhirnya, tutup klien
client.close();
}
}Kode contoh di atas mengonfigurasi perekaman ke OSS untuk nama domain <DomainName>, dengan AppName <AppName>, StreamName <StreamName>, format penyimpanan m3u8, dan rekaman disimpan di <OssBucket>.
Anda dapat menemukan <OssEndpoint> untuk wilayah <OssBucket> Anda di dokumentasi OSS tentang Wilayah dan Endpoint.
Untuk detail konfigurasi AppName dan StreamName, lihat Aturan Perekaman Otomatis.
Rekam aliran yang ditranskode
Jika Anda ingin mengurangi ukuran rekaman, Anda dapat merekam aliran yang ditranskode. Proses ini melibatkan penyesuaian bitrate video dan peningkatan rasio kompresi video sambil mempertahankan kualitas video. Fitur perekaman ke OSS mendukung penyimpanan aliran yang ditranskode dan aliran asli secara bersamaan. Fitur ini juga mendukung penyimpanan hanya aliran yang ditranskode atau hanya aliran asli.
Saat Anda menggunakan fitur transkoding streaming langsung, Anda dikenai biaya berdasarkan standar transkoding, resolusi, dan panjang total aliran yang ditranskode. Untuk informasi lebih lanjut, lihat Biaya transkoding streaming langsung.
Kebijakan perekaman kustom
Saat fitur perekaman streaming langsung dikonfigurasi di Konfigurasi fitur, konten langsung secara otomatis direkam selama ingest aliran. Proses ini disebut Automatic Recording.
Namun, terkadang Anda mungkin ingin memutuskan apakah akan merekam streaming langsung tertentu berdasarkan logika bisnis Anda. Fitur perekaman streaming langsung menyediakan dua solusi untuk skenario ini:
Pusat siaran langsung mengirim callback ke sistem bisnis Anda untuk menanyakan apakah streaming langsung perlu direkam. Perekaman dimulai setelah pusat siaran langsung menerima respons yang menunjukkan bahwa perekaman diperlukan. Ini disebut perekaman sesuai permintaan.
Panggilan dari sistem bisnis Anda ke layanan streaming langsung untuk merekam konten langsung dikenal sebagai Manual Recording.
Perekaman sesuai permintaan

Untuk menerapkan perekaman sesuai permintaan, sistem bisnis Anda harus menyediakan URL untuk pemanggilan layanan streaming langsung, sebagaimana dijelaskan di Callback perekaman sesuai permintaan.
Kode contoh berikut menunjukkan cara mengonfigurasi perekaman sesuai permintaan:
// Atur field OnDemand ke 1 untuk mengaktifkan perekaman sesuai permintaan melalui callback HTTP.
addLiveAppRecordConfigRequest.setOnDemand(1);Anda juga dapat memanggil API Tambah konfigurasi callback perekaman tingkat domain untuk mengonfigurasi callback perekaman.
Perekaman manual
Untuk menerapkan perekaman manual, Anda harus menonaktifkan fitur perekaman otomatis. Kode contoh berikut menunjukkan cara melakukannya:
// Atur field OnDemand ke 7 untuk menonaktifkan perekaman otomatis.
addLiveAppRecordConfigRequest.setOnDemand(7);Kemudian, selama streaming langsung, Anda dapat memanggil API instruksi perekaman real-time untuk memulai perekaman sesuai kebutuhan.
Hentikan perekaman
Anda dapat menghentikan perekaman yang dimulai menggunakan Automatic Recording, On-demand Recording, atau Manual Recording dengan memanggil API instruksi perekaman real-time.
// File ini di-generate otomatis, jangan diedit. Terima kasih.
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 RealTimeRecordCommand {
public static void main(String[] args) throws Exception {
// Konfigurasi HttpClient
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // Atur waktu timeout koneksi, default 10 detik
.responseTimeout(Duration.ofSeconds(10)) // Atur waktu timeout respons, default 20 detik
.maxConnections(128) // Atur ukuran kolam koneksi
.maxIdleTimeOut(Duration.ofSeconds(50)) // Atur timeout kolam koneksi, default 30 detik
// Konfigurasi proxy
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001))
.setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>"))
// Jika koneksi https, perlu konfigurasi sertifikat, atau abaikan sertifikat (.ignoreSSL(true))
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Konfigurasi informasi autentikasi Credential, termasuk ak, secret, token
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah diatur.
.accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
//.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // gunakan token STS
.build());
// Konfigurasi Client
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // ID Wilayah
//.httpClient(httpClient) // Gunakan HttpClient yang dikonfigurasi, jika tidak gunakan HttpClient default (Apache HttpClient)
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // Konfigurasi tingkat layanan
// Penimpaan konfigurasi tingkat klien, dapat mengatur Endpoint, parameter permintaan Http, dll.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// Untuk endpoint, lihat https://api.aliyun.com/product/live
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Pengaturan parameter untuk permintaan API
RealTimeRecordCommandRequest realTimeRecordCommandRequest = RealTimeRecordCommandRequest.builder()
.regionId("<Your RegionId>")
.command("<Your Command>")
.domainName("<Your DomainName>")
.appName("<Your AppName>")
.streamName("<Your StreamName>")
// Penimpaan konfigurasi tingkat permintaan, dapat mengatur parameter permintaan Http, dll.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Dapatkan nilai kembali permintaan API secara asinkron
CompletableFuture<RealTimeRecordCommandResponse> response = client.realTimeRecordCommand(realTimeRecordCommandRequest);
// Dapatkan nilai kembali permintaan API secara sinkron
RealTimeRecordCommandResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Pemrosesan nilai kembali secara asinkron
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Penanganan pengecualian
System.out.println(throwable.getMessage());
return null;
});*/
// Akhirnya, tutup klien
client.close();
}
}setCommand("stop") menghentikan perekaman.
Saat Anda menghentikan perekaman, file rekaman dihasilkan setelah durasi penggabungan untuk gangguan aliran berlalu.
Jika Anda merekam aliran yang ditranskode, Anda harus mengatur <StreamName> ke format
StreamName_ID Templat Transkoding.
Konfigurasi nama domain akselerasi CDN
Jika Anda ingin mendistribusikan video streaming langsung yang direkam lebih cepat di seluruh jaringan, Anda dapat mengonfigurasi nama domain akselerasi CDN. CDN mendistribusikan video ke node di berbagai lokasi. Metode ini memungkinkan pengguna mengakses konten dari node terdekat, bukan terhubung ke origin OSS. Metode ini tidak hanya meningkatkan kecepatan akses dan pengalaman pengguna pinggiran, tetapi juga mengurangi biaya lalu lintas keluar hingga 50% dibandingkan akses OSS langsung, yang secara efektif menghemat biaya jaringan. Untuk informasi lebih lanjut, lihat Percepat akses ke OSS menggunakan CDN.
Referensi
Jika Anda mengalami masalah saat menggunakan perekaman streaming langsung, lihat FAQ Perekaman Streaming Langsung.
Untuk menggunakan Java SDK, lihat Petunjuk Penggunaan Java SDK.
Untuk informasi lebih lanjut tentang callback perekaman, lihat Callback perekaman streaming langsung dan Callback perekaman sesuai permintaan.








