全部产品
Search
文档中心

ApsaraVideo Live:Perekaman streaming langsung

更新时间:Nov 28, 2025

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.

Penting

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

Catatan

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

  1. Aliran standar (memenuhi persyaratan encoding, laju frame dan timestamp stabil)✅ Rekaman dihasilkan 100%.

  2. Aliran dengan gangguan ringan (fluktuasi laju frame sesekali atau loncatan timestamp)✅ Sistem secara otomatis menangani masalah ini untuk kompatibilitas.

  3. 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

  • Perekaman otomatis: Mengaktifkan perekaman multi-level berdasarkan nama domain, AppName, dan StreamName.

  • TS/M3U8 (default)

Ideal untuk pasca-produksi konten yang direkam, seperti pengeditan video, pemutaran, dan pengaturan gambar mini video.

Rekam dan simpan di OSS

Aktifkan OSS

  • Perekaman otomatis: Merekam aliran di beberapa level berdasarkan nama domain, AppName, dan StreamName.

  • Perekaman sesuai permintaan: Konfigurasikan callback. Layanan streaming langsung mulai merekam setelah menerima respons untuk merekam.

  • Perekaman manual: Secara default, tidak ada perekaman yang dilakukan. Anda dapat memanggil API untuk melakukan perekaman manual.

  • TS/M3U8 (default)

  • MP4

  • FLV

  • CMAF

Ideal untuk mengelola konten yang direkam, dengan fokus pada penyimpanan.

Catatan
  • 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.

Penting
  • 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.

Catatan
  • 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

  1. Login ke Konsol ApsaraVideo Live.

  2. Di panel navigasi sebelah kiri, pilih Feature Management > Recording. Di halaman Recording, klik tab VOD.

  3. Pilih domain streaming yang ingin Anda konfigurasi dan klik Add.

  4. Konfigurasikan templat perekaman.

    image

    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 (*).

    Catatan

    Parameter 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.

    Catatan

    Wilayah 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.

    Catatan

    Setelah 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.

    Catatan

    Wilayah 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).

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

}
Catatan
  • 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>");
Catatan
  • 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.

Gabung rekaman

Rekaman dapat digabung dengan dua cara:

  1. Jika aliran yang sama terputus kurang dari 180 detik lalu ingest dilanjutkan, rekaman secara otomatis digabung menjadi satu file.

  2. Penggabungan file terjadi ketika durasi ingest aliran melebihi Recording Cycle. Akibatnya, file rekaman baru dihasilkan. (Misalnya, jika epoch perekaman diatur ke 5 menit dan durasi ingest aliran adalah 8 menit, satu kali ingest aliran menghasilkan dua file rekaman.)

    Untuk menggabungkan file dari beberapa epoch perekaman, Anda dapat mengonfigurasi fitur penggabungan.

    Penting

    Setelah Anda mengaktifkan penggabungan otomatis rekaman dari beberapa epoch, fitur pengeditan, produksi, dan transkoding ApsaraVideo VOD akan digunakan. Untuk detail penagihan, lihat Penagihan Layanan Nilai Tambah dan Penagihan Layanan Dasar.

    Kode contoh berikut menunjukkan cara mengonfigurasi penggabungan file rekaman di API Tambah konfigurasi untuk mengonversi rekaman langsung ke VOD:

    addLiveRecordVodConfigRequest.setAutoCompose("ON");
    addLiveRecordVodConfigRequest.setComposeVodTranscodeGroupId("<TranscodeGroupId>");
    Catatan
    • Setelah digabung, file baru dihasilkan. Rekaman asli tetap disimpan.

    • Anda harus mengonfigurasi templat transkoding di sistem video sesuai permintaan (VOD). Untuk informasi lebih lanjut, lihat Templat transkoding.

    • <TranscodeGroupId> adalah ID kelompok templat transkoding yang dikonfigurasi di sistem VOD.

    Kode contoh berikut menunjukkan cara mengatur durasi epoch perekaman:

    // Satuan: detik. Rentang nilai: 300 hingga 21600. Nilai default: 900.
    addLiveRecordVodConfigRequest.setCycleDuration(<300>);

Kelola rekaman

Anda dapat menggunakan konsol ApsaraVideo Live untuk View rekaman yang disimpan di VOD, dan layanan ApsaraVideo VOD untuk kelola rekaman tersebut. Untuk informasi lebih lanjut, lihat Manajemen Media.

Lihat rekaman yang disimpan di VOD di konsol ApsaraVideo Live

  1. Login ke Konsol ApsaraVideo Live.

  2. Di panel navigasi sebelah kiri, pilih Feature Management > Recording. Di halaman Recording, klik tab Recording Management.

  3. Pilih domain streaming yang telah Anda konfigurasi.

  4. Klik tab VOD.

    image

  5. Untuk mengelola rekaman tertentu, klik Go to VOD Console to Manage, atau kelola rekaman di bagian Audio/Video di VOD console.

    image

Rekam dan simpan di OSS

Prasyarat

Untuk mengonfigurasi perekaman streaming langsung agar menyimpan rekaman di OSS, Anda harus menyelesaikan operasi berikut:

  1. Aktifkan OSS dan buat bucket. Untuk informasi lebih lanjut, lihat Buat bucket.

    Penting
    • Menyimpan 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).

  2. Konfigurasikan izin bagi ApsaraVideo Live untuk menulis data ke OSS. Otorisasi ini biasanya diberikan secara otomatis saat Anda mengaktifkan layanan ApsaraVideo Live.

    Penting

    Jika 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, dan ram: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.

Catatan
  • 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

  1. Login ke Konsol ApsaraVideo Live.

  2. Di panel navigasi sebelah kiri, pilih Feature Management > Recording. Di halaman Recording, klik tab OSS.

  3. Pilih domain streaming dan klik Add.

  4. Konfigurasikan templat perekaman.

    image

    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 (*).

    Catatan
    • Parameter 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.

    Catatan

    Ada dua jenis bucket penyimpanan:

    1. Bucket standar: digunakan untuk penyimpanan file umum.

    2. 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.

    Catatan

    Anda 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.

    Catatan

    Epoch perekaman adalah durasi maksimum file VOD yang dikonversi dari streaming langsung.

  5. Konfigurasikan perekaman aliran yang ditranskode. (Opsional)

    Penting

    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.

    image

    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.

    Catatan

    Anda 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.

    Catatan

    Epoch 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.

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

}
Catatan
  • 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.

Penting

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.

Kode contoh berikut menunjukkan cara mengonfigurasi perekaman aliran yang ditranskode:

        // Ganti isi di <> dengan nilai aktual Anda.        
        List<AddLiveAppRecordConfigRequest.TranscodeRecordFormat> transcodeFormatList=new ArrayList<AddLiveAppRecordConfigRequest.TranscodeRecordFormat>();
        AddLiveAppRecordConfigRequest.TranscodeRecordFormat m3u8TranscodeFormat=new AddLiveAppRecordConfigRequest.TranscodeRecordFormat();
        m3u8TranscodeFormat.setFormat("m3u8");
        // Nama file rekaman untuk aliran yang telah dikodekan ulang yang disimpan di OSS.
        m3u8TranscodeFormat.setOssObjectPrefix("<transcodeRecord/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}>");
        // Nama segmen dari rekaman aliran yang telah dikodekan ulang.
        m3u8TranscodeFormat.setSliceOssObjectPrefix("<transcodeRecord/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence}>");
        transcodeFormatList.add(m3u8TranscodeFormat);
        addLiveAppRecordConfigRequest.setTranscodeRecordFormats(transcodeFormatList);
        List<String> transcodeTemplateList=new ArrayList<String>();
        // ID template transkoding.
        transcodeTemplateList.add("<lld>");
        addLiveAppRecordConfigRequest.setTranscodeTemplatess(transcodeTemplateList);
Catatan
  • Untuk merekam hanya aliran yang ditranskode, aliran asli does not need to be set (setRecordFormats).

  • Saat Anda merekam aliran yang ditranskode (setTranscodeRecordFormats), Anda juga harus menentukan ID templat transkoding yang telah dikonfigurasi (setTranscodeTemplatess). Untuk informasi lebih lanjut, lihat Transkoding streaming langsung.

  • Untuk merekam aliran yang ditranskode, Anda harus mengatur konfigurasi transkoding ke Triggered By Stream Ingest di templat transkoding.

  • Untuk rekaman aliran yang ditranskode, StreamName diubah ke format StreamName_ID Templat Transkoding.

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:

  1. 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.

  2. 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.

Kode contoh berikut menunjukkan cara menambahkan konfigurasi callback perekaman:

// 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 AddLiveRecordNotifyConfig {
    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
        AddLiveRecordNotifyConfigRequest addLiveRecordNotifyConfigRequest = AddLiveRecordNotifyConfigRequest.builder()
                .domainName("<Your DomainName>")
                .notifyUrl("<Your NotifyUrl>")
                // 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<AddLiveRecordNotifyConfigResponse> response = client.addLiveRecordNotifyConfig(addLiveRecordNotifyConfigRequest);
        // Dapatkan nilai kembali permintaan API secara sinkron
        AddLiveRecordNotifyConfigResponse 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();
    }

}
Penting
  • <OnDemandUrl> adalah URL permintaan untuk callback perekaman sesuai permintaan. <NotifyUrl> adalah URL untuk callback perekaman, termasuk callback event dan status perekaman.

  • Karena parameter <NotifyUrl> tidak boleh kosong, Anda harus mengaturnya. Jika Anda hanya perlu menerima permintaan perekaman sesuai permintaan dan tidak memerlukan callback event dan status perekaman, Anda dapat mengonfigurasi <NotifyUrl> dengan URL placeholder.

Related API operations

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.

Kode contoh: Mulai perekaman

        // Ganti konten dalam <> dengan nilai aktual Anda. 
        RealTimeRecordCommandRequest realTimeRecordCommandRequest=new RealTimeRecordCommandRequest();
        realTimeRecordCommandRequest.setCommand("start");
        realTimeRecordCommandRequest.setAppName("<AppName>");
        realTimeRecordCommandRequest.setStreamName("<StreamName>");
        realTimeRecordCommandRequest.setDomainName("<DomainName>");
        RealTimeRecordCommandResponse realTimeRecordCommandResponse = null;
        try {
            realTimeRecordCommandResponse = client.getAcsResponse(realTimeRecordCommandRequest);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println(new Gson().toJson(realTimeRecordCommandResponse));
Catatan
  • Jika Anda merekam aliran yang ditranskode, Anda harus mengatur <StreamName> ke format StreamName_ID Templat Transkoding.

  • setCommand("start") memulai perekaman.

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

}
Catatan
  • 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.

Splicing untuk aliran yang terputus

Jika ingest aliran terputus dan dilanjutkan kembali dalam Interruption Duration Threshold (default: 180 detik), konten yang direkam secara otomatis digabung menjadi satu rekaman.

Catatan

Karena sistem menunggu aliran untuk digabung, rekaman dihasilkan setelah durasi penggabungan berlalu.

Anda dapat menyesuaikan durasi penggabungan untuk gangguan aliran sesuai kebutuhan. Kode berikut menunjukkan cara mengatur durasi ini:

// Satuan: detik. Rentang nilai: 15 hingga 21600.
addLiveAppRecordConfigRequest.setDelayTime(<180>);

Kami menyarankan Anda menggunakan nilai default 180 detik. Jika waktu untuk menghasilkan rekaman diatur terlalu singkat, banyak rekaman mungkin dihasilkan karena fluktuasi jaringan, gangguan aliran, dan re-ingest aliran. Jika waktu diatur terlalu lama, rekaman mungkin tidak tersedia untuk waktu yang lama setelah streaming langsung berakhir (aliran terputus).

Dalam beberapa skenario, Anda mungkin tidak ingin menunggu penyambungan aliran dan malah ingin rekaman dihasilkan segera setelah streaming langsung berakhir. Untuk melakukan ini, Anda dapat mengatur Callbacks untuk ingest aliran. Untuk informasi lebih lanjut, lihat Callback ingest aliran. Saat Anda menerima notifikasi bahwa ingest aliran telah berakhir, Anda dapat memanggil API Instruksi Perekaman Real-time untuk membatalkan penyambungan aliran.

        // Ganti konten dalam <> dengan nilai aktual Anda.
        RealTimeRecordCommandRequest realTimeRecordCommandRequest=new RealTimeRecordCommandRequest();
        realTimeRecordCommandRequest.setCommand("cancel_delay");
        realTimeRecordCommandRequest.setAppName("<AppName>");
        realTimeRecordCommandRequest.setStreamName("<StreamName>");
        realTimeRecordCommandRequest.setDomainName("<DomainName>");
        RealTimeRecordCommandResponse realTimeRecordCommandResponse = null;
        try {
            realTimeRecordCommandResponse = client.getAcsResponse(realTimeRecordCommandRequest);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println(new Gson().toJson(realTimeRecordCommandResponse));
Catatan
  • Jika Anda merekam aliran yang ditranskode, Anda harus mengatur <StreamName> ke format StreamName_ID Templat Transkoding.

  • setCommand("cancel_delay") membatalkan penundaan penggabungan, sepenuhnya menghentikan perekaman, dan segera menghasilkan file rekaman.

Konfigurasi epoch perekaman

Jika durasi streaming langsung melebihi epoch perekaman yang ditetapkan, file baru dihasilkan. Misalnya, jika streaming langsung berdurasi 20 menit dan epoch perekaman diatur ke 15 menit, dua rekaman dihasilkan. Epoch perekaman dapat diatur dari 15 hingga 360 menit.

Kode contoh berikut menunjukkan cara mengatur epoch perekaman:

        List<AddLiveAppRecordConfigRequest.RecordFormat> formatList=new ArrayList<AddLiveAppRecordConfigRequest.RecordFormat>();
        AddLiveAppRecordConfigRequest.RecordFormat m3u8Format=new AddLiveAppRecordConfigRequest.RecordFormat();
        m3u8Format.setFormat("m3u8");
        m3u8Format.setOssObjectPrefix("<record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}>");
        m3u8Format.setSliceOssObjectPrefix("<record/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence}>");
       // Atur epoch perekaman dalam detik.
        m3u8Format.setCycleDuration(<900>);
        AddLiveAppRecordConfigRequest.RecordFormat mp4Format=new AddLiveAppRecordConfigRequest.RecordFormat();
        mp4Format.setFormat("mp4");
        mp4Format.setOssObjectPrefix("<record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}>");
        // Atur epoch perekaman dalam detik.
        mp4Format.setCycleDuration(<1500>);
        formatList.add(mp4Format);
        formatList.add(m3u8Format);
        addLiveAppRecordConfigRequest.setRecordFormats(formatList);
Catatan

Dalam contoh di atas, dua format penyimpanan dikonfigurasi, masing-masing dengan epoch perekaman yang berbeda. Jika Anda mengingest aliran selama 20 menit dengan konfigurasi ini, tiga rekaman dihasilkan (satu MP4 dan dua M3U8).

Jika durasi streaming langsung tidak melebihi epoch perekaman, rekaman dihasilkan setelah streaming langsung berakhir. Untuk melihat rekaman sebelum streaming langsung berakhir, Anda dapat memanggil API Instruksi Perekaman Real-time untuk memaksa restart proses perekaman. Jika perekaman sedang berlangsung sebelum restart, file rekaman dihasilkan segera.

Kode contoh berikut menunjukkan cara merestart perekaman:

        // Ganti konten dalam <> dengan nilai aktual Anda. 
        RealTimeRecordCommandRequest realTimeRecordCommandRequest=new RealTimeRecordCommandRequest();
        realTimeRecordCommandRequest.setCommand("restart");
        realTimeRecordCommandRequest.setAppName("<AppName>");
        realTimeRecordCommandRequest.setStreamName("<StreamName>");
        realTimeRecordCommandRequest.setDomainName("<DomainName>");
        RealTimeRecordCommandResponse realTimeRecordCommandResponse = null;
        try {
            realTimeRecordCommandResponse = client.getAcsResponse(realTimeRecordCommandRequest);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println(new Gson().toJson(realTimeRecordCommandResponse));
Catatan
  • setCommand("restart") merestart perekaman.

  • Jika Anda merekam aliran yang ditranskode, Anda harus mengatur <StreamName> ke format StreamName_ID Templat Transkoding.

  • Jika perekaman streaming langsung Anda dikonfigurasi dengan beberapa format penyimpanan, operasi ini merestart perekaman untuk semuanya.

Gabung dan ambil rekaman

ApsaraVideo Live memungkinkan Anda membuat file indeks untuk ambil rekaman dari periode waktu tertentu atau untuk gabung beberapa rekaman dari periode waktu menjadi satu file.

Catatan
  • Terlepas dari format penyimpanan akhir, perekaman streaming langsung pertama-tama membagi streaming langsung menjadi file TS lalu mengemasnya menjadi rekaman dalam format kontainer yang ditentukan. Fitur ini memungkinkan Anda membuat file indeks M3U8 untuk menggabungkan file segmen TS, sehingga menggabungkan dan mengambil konten yang direkam.

  • Konten yang direkam harus menyertakan format penyimpanan M3U8 agar dapat digabung atau diambil.

Anda dapat memanggil API Buat File Indeks Perekaman untuk membuat file indeks.

Kode contoh berikut menunjukkan cara membuat file indeks untuk konten yang direkam:

// 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 CreateLiveStreamRecordIndexFiles {
    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
        CreateLiveStreamRecordIndexFilesRequest createLiveStreamRecordIndexFilesRequest = CreateLiveStreamRecordIndexFilesRequest.builder()
                .domainName("<Your domainName>")
                .appName("<Your appName>")
                .streamName("<Your streamName>")
                .ossEndpoint("<Your ossEndpoint>")
                .ossBucket("<Your ossBucket>")
                .ossObject("<Your ossObject>")
                .startTime("<Your startTime>")
                .endTime("<Your endTime>")
                // 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<CreateLiveStreamRecordIndexFilesResponse> response = client.createLiveStreamRecordIndexFiles(createLiveStreamRecordIndexFilesRequest);
        // Dapatkan nilai kembali permintaan API secara sinkron
        CreateLiveStreamRecordIndexFilesResponse 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();
    }

}
Catatan
  • Contoh di atas membuat file indeks baru untuk konten yang direkam dari streaming langsung <AppName> <StreamName> dari <StartTime> hingga <EndTime>. File indeks disimpan di <OssBucket> di <OssEndpoint>, dan nama file indeks adalah <IndexFiles/OssObject.m3u8>.

  • Format untuk <StartTime> dan <EndTime> adalah yyyy-MM-ddTHH:mm:ssZ (UTC).

Penting
  • Streaming langsung harus telah diingest selama waktu yang ditentukan untuk membuat indeks rekaman. Jika tidak ada streaming langsung selama waktu yang ditentukan, atau jika nama streaming langsung salah, pembuatan indeks rekaman akan gagal.

  • Konten yang direkam terdiri dari dua bagian: informasi file (termasuk AppName, StreamName, dan jalur penyimpanan OSS) dan file itu sendiri. Informasi file (informasi file segmen TS dan informasi file indeks M3U8 yang dibuat) disimpan di ApsaraVideo Live. File (file segmen TS dan file indeks M3U8) disimpan di OSS.

  • Periode retensi untuk file yang disimpan di OSS ditentukan oleh konfigurasi penyimpanan OSS Anda.

  • Informasi file segmen TS disimpan di sistem ApsaraVideo Live hanya selama tiga bulan. Anda hanya dapat membuat file indeks M3U8 untuk konten yang direkam dalam tiga bulan terakhir.

  • Informasi file indeks M3U8 disimpan di sistem ApsaraVideo Live hanya selama enam bulan. Anda hanya dapat mengkueri informasi tentang file indeks yang dibuat dalam enam bulan terakhir.

  • Untuk menggabung atau mengambil aliran yang ditranskode, Anda harus mengatur StreamName ke format StreamName_ID Templat Transkoding.

  • <OssBucket> harus berada di wilayah yang sama dengan pusat siaran langsung. Jika tidak, Anda tidak dapat mengkueri informasi file indeks M3U8 yang dibuat berdasarkan nama domain.

Related API operations

Kelola rekaman

Lihat rekaman

ApsaraVideo Live menyediakan tiga cara untuk melihat rekaman.

Metode 1: Gunakan konsol

  1. Login ke Konsol ApsaraVideo Live.

  2. Di panel navigasi sebelah kiri, buka Feature Management > Recording. Di halaman Recording, klik tab Recordings.

  3. Pilih domain streaming untuk dikonfigurasi.

  4. Klik tab OSS.

    image

Metode 2: Gunakan API

Anda dapat memanggil API DescribeLiveStreamRecordIndexFiles - Kueri semua file indeks dalam periode waktu tertentu. Kode contoh berikut memberikan contoh:

// 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 DescribeLiveStreamRecordIndexFiles {
    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
        DescribeLiveStreamRecordIndexFilesRequest describeLiveStreamRecordIndexFilesRequest = DescribeLiveStreamRecordIndexFilesRequest.builder()
                .domainName("<Your DomainName>")
                .appName("<Your AppName>")
                .streamName("<Your StreamName>")
                .startTime("<Your StartTime>")
                .endTime("<Your EndTime>")
                .order("<Your Order>")
                // 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<DescribeLiveStreamRecordIndexFilesResponse> response = client.describeLiveStreamRecordIndexFiles(describeLiveStreamRecordIndexFilesRequest);
        // Dapatkan nilai kembali permintaan API secara sinkron
        DescribeLiveStreamRecordIndexFilesResponse 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();
    }

}
Penting
  • Anda dapat mengkueri data dalam 6 months terakhir.

  • Format untuk EndTime dan StartTime adalah yyyy-MM-ddTHH:mm:ssZ (UTC). Interval tidak boleh melebihi empat hari.

Metode 3: Gunakan OSS

Saat Anda mengonfigurasi fitur perekaman streaming langsung, Anda perlu menentukan lokasi penyimpanan rekaman di OSS. Untuk melihat rekaman di OSS, lihat Daftar file di OSS.

Hapus rekaman

ApsaraVideo Live menyimpan informasi rekaman, seperti AppName, StreamName, dan jalur penyimpanan file OSS. Files sebenarnya disimpan di OSS. Jika Anda ingin menghapus file di OSS saat menghapus rekaman, Anda harus membuat peran layanan AliyunMTSVideoLifecycleRole dan Input and Attach kebijakan sistem AliyunMTSVideoLifecycleRolePolicy ke peran ini.

Proses otorisasi terperinci

Sebelum Anda dapat menghapus rekaman di konsol ApsaraVideo Live, Anda harus memberikan izin. Anda perlu membuat dan mengotorisasi peran RAM di konsol RAM, lalu login ke konsol ApsaraVideo Live untuk menghapus rekaman.

Buat peran layanan

  1. Login ke Konsol RAM sebagai administrator RAM.

  2. Di panel navigasi sebelah kiri, pilih Identities > Roles.

  3. Di halaman Roles, klik Create Role.

    image

  4. Di halaman Create Role, atur Principal Type ke Cloud Service. Lalu, pilih layanan tepercaya dan klik OK.

    image

    Catatan

    Dari daftar drop-down Principal Name, pilih ApsaraVideo Media Processing.

  5. Di kotak dialog Create Role, masukkan "AliyunMTSVideoLifecycleRole" di bidang Role Name dan klik OK.image

  6. Setelah peran dibuat, di halaman Basic Information, klik tab Permissions.

  7. Klik Precise Permissions. Konfigurasikan parameter sebagai berikut:

    • Jenis Kebijakan: Kebijakan Sistem

    • Nama Kebijakan: AliyunMTSVideoLifecycleRolePolicy

    Setelah konfigurasi selesai, klik OK.image

Ada tiga cara untuk menghapus rekaman.

Metode 1: Gunakan konsol

  1. Login ke Konsol ApsaraVideo Live.

  2. Di panel navigasi sebelah kiri, pilih Recordings.

  3. Pilih nama domain rekaman yang akan dihapus.

  4. Klik tab OSS dan pilih Delete.

    删除录制文件

  5. Klik OK.

    Opsi penghapusan sinkron tidak dipilih secara default. Jika Anda memilih opsi ini, file rekaman di OSS dihapus bersamaan dengan metadata rekaman di Konsol ApsaraVideo Live.确定删除

Metode 2: Gunakan API

Anda dapat memanggil API Hapus file rekaman streaming langsung. Berikut ini contoh kode 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 DeleteLiveStreamRecordIndexFiles {
    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
        DeleteLiveStreamRecordIndexFilesRequest deleteLiveStreamRecordIndexFilesRequest = DeleteLiveStreamRecordIndexFilesRequest.builder()
                .regionId("<Your RegionId>")
                .recordId(java.util.Arrays.asList(
                    "<Your RecordId_1>"
                ))
                .domainName("<Your DomainName>")
                .appName("<Your AppName>")
                .streamName("<Your StreamName>")
                .removeFile("<Your RemoveFile>")
                // 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<DeleteLiveStreamRecordIndexFilesResponse> response = client.deleteLiveStreamRecordIndexFiles(deleteLiveStreamRecordIndexFilesRequest);
        // Dapatkan nilai kembali permintaan API secara sinkron
        DeleteLiveStreamRecordIndexFilesResponse 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();
    }

}
Penting
  • <recordId> adalah ID manifes. Untuk mendapatkan ID manifes, lihat Lihat rekaman.

Metode 3: Penghapusan OSS

Dalam kebanyakan kasus, kami tidak menyarankan Anda menghapus langsung file rekaman yang disimpan di OSS. Jika Anda ingin menghapus file rekaman yang disimpan di OSS, Anda dapat memilih opsi "Juga hapus file rekaman yang disimpan di OSS" saat menghapus rekaman di konsol ApsaraVideo Live. Jika Anda harus menghapus langsung file rekaman yang disimpan di OSS karena alasan bisnis, lihat Hapus File dari OSS.

Metode lain untuk menghapus file

Karena sumber daya media disimpan di bucket OSS, Anda harus memberikan izin akses untuk menghapus rekaman. Anda dapat klik untuk otorisasi untuk otorisasi satu klik.

Hapus file yang lebih tua dari enam bulan: Anda hanya dapat mengkueri informasi untuk rekaman dalam enam bulan terakhir. Untuk menghapus file yang lebih lama, Anda harus menggunakan OSS. Untuk informasi lebih lanjut, lihat Hapus file di OSS.

Hapus rekaman yang kedaluwarsa: Setelah Anda memberikan otorisasi, kirim tiket. Kami kemudian akan mengonfigurasi waktu kedaluwarsa yang Anda butuhkan. Untuk informasi tentang cara mengirim tiket, lihat Hubungi kami. Setelah periode validitas dikonfigurasi, ApsaraVideo Live dapat secara otomatis menghapus file rekaman yang kedaluwarsa yang disimpan di OSS.

Catatan

Otorisasi akses ke sumber daya cloud memberikan izin kepada peran yang dibuat sistem, yang digunakan oleh ApsaraVideo Live, untuk mengakses sumber daya cloud. Jika Anda tidak sengaja menghapus peran setelah otorisasi, Anda dapat memberikan izin lagi.

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.