All Products
Search
Document Center

ApsaraVideo VOD:Fitur lanjutan

Last Updated:Mar 13, 2026

Topik ini menyediakan contoh cara menggunakan fitur lanjutan ApsaraVideo Player SDK untuk Flutter. Untuk daftar lengkap fitur, lihat referensi API.

Playback

Putar daftar video pendek

  1. Buat playlist.

    FlutterAliListPlayer fAliListPlayer = FlutterAliPlayerFactory.createAliListPlayer();
  2. Tambahkan dan hapus resource.

    Pemutar daftar hanya mendukung playback dari UrlSource atau VidSts.

    // Parameter uid menentukan ID unik sebuah video. Anda dapat menggunakan UID untuk mengidentifikasi video. Video yang memiliki UID yang sama dianggap identik.
    fAliListPlayer.addUrlSource(url,uid);
    fAliListPlayer.addVidSource(vid,uid);
    fAliListPlayer.removeSource(uid);
  3. Atur jumlah video yang dipramuat.

    Atur jumlah video yang dipramuat secara wajar untuk meningkatkan kecepatan startup. Contoh kodenya sebagai berikut:

    // Atur jumlah video yang dipramuat. Total jumlah video yang dimuat dihitung dengan rumus: 1 + count * 2.
    fAliListPlayer.setPreloadCount(count);
  4. Putar sumber video.

    // Parameter uid wajib diisi. Untuk playback berbasis URL, cukup tentukan uid saja. Untuk playback berbasis STS, tentukan informasi STS-nya.
    fAliListPlayer.moveTo();

Beralih antara decoding hardware dan software

ApsaraVideo Player SDK untuk Flutter mendukung decoding hardware untuk H.264 dan H.265. SDK ini juga menyediakan metode setEnableHardwareDecoder, yang secara default diaktifkan. Jika inisialisasi decoding hardware gagal, pemutar akan secara otomatis beralih ke decoding software untuk memastikan playback tidak terganggu. Contoh kodenya sebagai berikut:

// Aktifkan decoding hardware. Fitur ini diaktifkan secara default.
fAliplayer.setEnableHardwareDecoder(enable);

Beralih definisi video secara adaptif berdasarkan kondisi jaringan

ApsaraVideo Player SDK untuk Flutter mendukung streaming bitrate adaptif untuk aliran video HLS dan Dynamic Adaptive Streaming over HTTP (DASH). Setelah metode prepare berhasil, panggil getMediaInfo untuk mengambil informasi setiap aliran dalam bentuk objek TrackInfo. Contoh kodenya sebagai berikut:

fAliplayer.getMediaInfo().then((value) {
// Nilai value bertipe map. Anda dapat menggunakan value['tracks'] untuk mendapatkan daftar TrackInfos yang sesuai. Untuk informasi lebih lanjut tentang cara mengurai TrackInfo, lihat AVPMediaInfo info = AVPMediaInfo.fromJson(value); dalam demo.

});

Selama playback, Anda dapat memanggil metode selectTrack untuk mengganti aliran aktif. Masukkan nilai trackIndex dari objek TrackInfo sebagai parameter. Hasil pergantian tersebut akan dikembalikan dalam callback setelah listener OnTrackChangedListener dipicu.

// Ganti bitrate.
fAliplayer.selectTrack(index);
// Ganti bitrate dan aktifkan streaming adaptif.
fAliplayer.selectTrack(-1);

Ambil snapshot

ApsaraVideo Player SDK untuk Flutter menyediakan fitur pengambilan snapshot, yang diimplementasikan melalui metode setOnSnapShot.

// Listener untuk pengambilan snapshot yang berhasil.
fAliplayer.setOnSnapShot((path,playerId) {

});
// Ambil snapshot. path menentukan jalur tempat gambar disimpan.
fAliplayer.snapshot(path);

Pratinjau video

ApsaraVideo Player SDK untuk Flutter bekerja sama dengan konfigurasi ApsaraVideo VOD untuk mendukung pratinjau video. Metode playback VidAuth (disarankan) dan VidSts mendukung fitur ini. Untuk informasi lebih lanjut tentang konfigurasi dan penggunaan pratinjau video, lihat Pratinjau video.

Setelah Anda mengonfigurasi fitur pratinjau, panggil metode previewTime pada antarmuka setVidAuth untuk mengatur durasi pratinjau. Contoh kodenya sebagai berikut:

// previewTime menentukan durasi pratinjau dalam detik.
// Playback berbasis VidAuth
fAliplayer.setVidAuth(
 vid: "Masukkan VID resource",
 region: "Masukkan wilayah resource",
 playAuth: "Masukkan PlayAuth resource",
 previewTime: "Masukkan durasi pratinjau dalam detik");

 // Playback berbasis VidSts
 fAliplayer.setVidSts(
 vid: "Masukkan VID resource",
 region: "Masukkan wilayah resource",
 accessKeyId: "Masukkan ID AccessKey resource",
 accessKeySecret: "Masukkan Rahasia AccessKey resource",
 securityToken: "Masukkan token keamanan resource",
 previewTime: "Masukkan durasi pratinjau dalam detik");

Konfigurasi lainnya

Anda dapat mengonfigurasi pengaturan playback tambahan untuk ApsaraVideo Player SDK untuk Flutter. Tetapkan konfigurasi ini sebelum memanggil metode prepare().

var configMap = {
 'mStartBufferDuration':_mStartBufferDurationController.text,// Durasi buffer sebelum playback dimulai. Satuan: milidetik.
 'mHighBufferDuration':_mHighBufferDurationController.text,// Durasi buffer tinggi. Satuan: milidetik.
 'mMaxBufferDuration':_mMaxBufferDurationController.text,// Durasi buffer maksimum. Satuan: milidetik.
 'mMaxDelayTime': _mMaxDelayTimeController.text,// Latensi maksimum untuk streaming langsung. Satuan: milidetik. Catatan: Parameter ini hanya berlaku untuk streaming langsung.
 'mNetworkTimeout': _mNetworkTimeoutController.text,// Periode timeout jaringan. Satuan: milidetik.
 'mNetworkRetryCount':_mNetworkRetryCountController.text,// Jumlah percobaan ulang setelah timeout jaringan.
 'mMaxProbeSize': _mMaxProbeSizeController.text,// Ukuran probe maksimum.
 'mReferrer': _mReferrerController.text,// Referrer.
 'mHttpProxy': _mHttpProxyController.text,// Proxy HTTP.
 'mEnableSEI': mEnableSEI,// Menentukan apakah akan mengaktifkan Supplemental Enhancement Information (SEI).
 'mClearFrameWhenStop': !mShowFrameWhenStop,// Menentukan apakah frame akan dihapus saat playback berhenti.
 'mDisableVideo': mDisableVideo,// Menentukan apakah video dinonaktifkan.
 'mDisableAudio': mDisableAudio,// Menentukan apakah audio dinonaktifkan.
 'mUserAgent':mUserAgent,// User-Agent.
};
// Terapkan konfigurasi.
fAliplayer.setConfig(configMap);

Performa

Pre-rendering

ApsaraVideo Player SDK untuk Flutter mendukung rendering cepat frame video pertama sebelum playback dimulai.

Catatan
  1. Fitur ini dinonaktifkan secara default.

  2. Anda harus mengatur View sebelum memanggil Prepare agar frame dirender ke View segera setelah siap.

  3. Mengaktifkan fitur ini memengaruhi urutan pemicuan event keberhasilan persiapan dan rendering frame pertama. Saat dinonaktifkan, event keberhasilan persiapan dipicu sebelum event rendering frame pertama. Saat diaktifkan, event rendering frame pertama mungkin dipicu sebelum event keberhasilan persiapan karena perbedaan kecepatan decoding dan rendering. Hal ini tidak memengaruhi playback.

Contoh kodenya sebagai berikut:

fAliplayer.setOption(FlutterAvpdef.ALLOW_PRE_RENDER, 1);

Cache lokal

ApsaraVideo Player SDK untuk Flutter menyediakan cache lokal untuk menyimpan video selama playback. Ini membantu mengurangi traffic ketika pengguna memutar ulang video. Untuk menggunakan fitur ini, aktifkan enableLocalCache pada pemutar sebelum memanggil prepare. Contoh kodenya sebagai berikut:

/**
 *  Aktifkan cache lokal. Setelah fitur ini diaktifkan, video akan di-cache ke file lokal.
 *
 *  @param enable - Saklar untuk fitur cache lokal. true: mengaktifkan cache lokal. false: menonaktifkan cache lokal. Nilai default: false.
 *  @param maxBufferMemoryKB - Parameter ini sudah tidak digunakan dan tidak berpengaruh pada v5.4.7.1 dan versi selanjutnya.
 *  @param localCacheDir - Direktori file cache. Harus berupa jalur mutlak.
 *  @param mDocTypeForIOS - Jenis direktori sandbox pada perangkat iOS Anda.
 */
FlutterAliplayer.enableLocalCache(bool enable,String maxBufferMemoryKB,String localCacheDir,DocTypeForIOS mDocTypeForIOS);

/**
  * Konfigurasi untuk membersihkan file cache lokal.
  *
  * @param expireMin - Parameter ini sudah tidak digunakan dan tidak berpengaruh pada v5.4.7.1 dan versi selanjutnya.
  * @param maxCapacityMB - Ukuran cache maksimum. Satuan: MB. Nilai default: 20 GB. Saat sistem membersihkan cache, jika total ukuran cache melebihi batas ini, sistem akan mengurutkan item cache berdasarkan waktu akses terakhir dan menghapus file cache tertua satu per satu hingga total ukuran cache kurang dari atau sama dengan batas tersebut.
  * @param freeStorageMB - Ruang disk kosong minimum. Satuan: MB. Nilai default: 0. Saat sistem membersihkan cache, jika ruang disk kosong saat ini kurang dari nilai ini, sistem juga akan menghapus file cache satu per satu sesuai aturan hingga ruang disk kosong lebih besar dari atau sama dengan nilai ini atau semua file cache dihapus.
  */
FlutterAliplayer.setCacheFileClearConfig(String expireMin,String maxCapacityMB,String freeStorageMB);

Aktifkan atau nonaktifkan cache lokal untuk satu URL

Untuk mengaktifkan atau menonaktifkan cache lokal untuk URL tertentu, atur parameter yang sesuai dalam konfigurasi pemutar. Contoh kodenya sebagai berikut:

// Dapatkan konfigurasi.
fAliplayer.getPlayConfig().then((config){
  // Nonaktifkan atau aktifkan cache lokal.
  config.enableLocalCache = false;
  // Terapkan konfigurasi.
  fAliplayer.setPlayConfig(config);
});

Pramuat

ApsaraVideo Player SDK untuk Flutter menyediakan fitur pramuat, peningkatan dari cache lokal yang meningkatkan kecepatan startup video dengan memungkinkan Anda menentukan ukuran memori yang dialokasikan untuk cache video.

Fitur pramuat memiliki batasan berikut:

  • Mendukung pemuatan file media tunggal, seperti file MP4, MP3, FLV, dan HLS.

  • Hanya mendukung pramuat untuk video yang diputar menggunakan metode UrlSource. Pramuat tidak didukung untuk video yang diputar menggunakan metode VidAuth atau VidSts.

  1. Aktifkan fitur cache lokal. Untuk informasi lebih lanjut, lihat Cache lokal.

  2. Buat instans FlutterAliMediaLoaderV2.

    FlutterAliMediaLoaderV2 loaderV2 = FlutterAliMediaLoaderV2();
  3. Atur listener untuk tugas pramuat.

    1. onError: Listener untuk error.

      loaderV2.onError = (ErrorInfo error) {
      };
    2. onCompleted: Listener untuk penyelesaian tugas.

      loaderV2.onCompleted = (taskId, urlOrVid) {
      };
    3. onCanceled: Listener untuk pembatalan tugas.

      loaderV2.onCanceled = (taskId, urlOrVid) {
      };
  4. Opsional: Atur parameter untuk tugas pramuat. Langkah ini hanya berlaku untuk streaming bitrate adaptif.

    Anda hanya perlu mengatur salah satu dari parameter berikut: defaultQuality, defaultBandWidth, atau defaultResolution.

    PreloadConfig config = PreloadConfig();
    config.duration = 1000;  // Nilai default: 1000
    config.defaultQuality = "FD";
    config.defaultBandWidth = 200000;
    config.defaultResolution  = 1920 * 1080;
    loaderV2.setPreloadConfig(config);
  5. Tambahkan tugas pramuat dan ambil ID tugasnya.

    VidAuth (Disarankan)

    VidAuth auth = VidAuth(
       vid: "your videoId",
       playAuth: "your playAuth",
       region: "your region",
    );
    loaderV2.addTask(auth).then((taskId) {
        print("MediaLoaderV2: taskId: $taskId");
    });

    VidSts

    VidSts vidSts = VidSts(
        vid: "your vid",
        accessKeyId: "your accessKeyId",
        accessKeySecret: "your accessKeySecret",
        securityToken: "your securityToken",
    );
    loaderV2.addTask(vidSts).then((taskId) {
       print("MediaLoaderV2: taskId: $taskId");
    });

    UrlSource

    loaderV2.addTask(UrlSource(videoUrl: "videoUrl")).then((taskId) {
       print("MediaLoaderV2: taskId: $taskId");
    });
  6. Jeda tugas pramuat.

    loaderV2.pauseTask(taskId);
  7. Lanjutkan tugas pramuat.

    loaderV2.resumeTask(taskId);
  8. Batalkan tugas pramuat.

    loaderV2.cancelTask(taskId);
  9. Hancurkan instans FlutterAliMediaLoaderV2.

    loaderV2.dispose();

Unduh video

ApsaraVideo Player SDK untuk Flutter mendukung pengunduhan video on-demand untuk playback offline. Tersedia dua mode unduhan: unduhan normal dan unduhan aman.

  • Unduhan normal

    Video yang diunduh dengan mode ini tidak dienkripsi oleh Alibaba Cloud dan dapat diputar menggunakan pemutar pihak ketiga.

  • Unduhan aman

    Video yang diunduh dengan mode ini dienkripsi oleh Alibaba Cloud dan hanya dapat diputar menggunakan ApsaraVideo Player SDK.

Petunjuk Penggunaan

  • Fitur unduhan video hanya tersedia untuk metode VidSts dan VidAuth.

  • Untuk menggunakan fitur unduhan video, Anda harus mengaktifkannya dan mengonfigurasi mode unduhan di Konsol ApsaraVideo VOD. Untuk informasi lebih lanjut, lihat Unduhan offline.

  • Unduhan yang dapat dilanjutkan didukung.

Prosedur

  1. Opsional: Konfigurasikan file keamanan untuk verifikasi enkripsi. Langkah ini hanya diperlukan untuk unduhan aman. Anda dapat melewati langkah ini untuk unduhan normal.

    Catatan

    Pastikan file keamanan yang dikonfigurasi sesuai dengan informasi aplikasi. Jika tidak, unduhan video akan gagal.

    Jika Anda menggunakan unduhan aman, Anda harus mengonfigurasi file kunci yang dihasilkan di Konsol ApsaraVideo VOD ke dalam ApsaraVideo Player SDK. File kunci ini digunakan untuk dekripsi dan verifikasi selama unduhan dan playback video. Untuk informasi lebih lanjut tentang pembuatan file kunci, lihat Unduhan aman.

    Berikut adalah konfigurasi satu kali:

    FlutterAliPlayerFactory.initService(byteData);
  2. Buat dan konfigurasikan downloader.

    Contoh kodenya sebagai berikut:

    FlutterAliDownloader downloader = FlutterAliDownloader.init();
    /// Atur jalur penyimpanan.
    downloader.setSaveDir(path)
  3. Mulai unduhan.

    Setelah Anda memulai unduhan, listener akan terdaftar secara otomatis dan informasi callback akan dikembalikan. Contoh kodenya sebagai berikut:

    /// 1. prepare
     /// Deskripsi parameter: Parameter type dapat diatur ke FlutterAvpdef.DOWNLOADTYPE_STS atau FlutterAvpdef.DOWNLOADTYPE_AUTH. Jika Anda mengatur type ke DOWNLOADTYPE_STS, parameter vid, accessKeyId, accessKeySecret, dan securityToken wajib diisi. Jika Anda mengatur type ke DOWNLOADTYPE_AUTH, parameter vid dan playAuth wajib diisi.
     downloader.prepare(type, vid).then((value) {
     // Nilai value bertipe map. Nilai ini sesuai dengan kelas unduhan kustom DownloadModel dalam demo.
     DownloadModel downloadModel = DownloadModel.fromJson(value);
     // 2. selectItem. Pilih definisi video yang akan diunduh berdasarkan trackInfo.
     List<TrackInfoModel> trackInfos = downloadModel.trackInfos;
     downloader.selectItem(vid,trackInfos[0].index);
     // 3. start
     downloader.start(vid, trackInfos[0].index).listen((event) {
     // Catatan: Parameter event dapat berisi berbagai jenis informasi. Untuk informasi lebih lanjut, lihat FlutterAvpdef.EventChanneldef. Bagian berikut menjelaskan detailnya.
     if (event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_PROGRESS){
     // Progres unduhan dalam persentase. Dapatkan progres unduhan: event[EventChanneldef.DOWNLOAD_PROGRESS].
     }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_PROCESS){
     // Progres pemrosesan dalam persentase. Dapatkan progres pemrosesan: event[EventChanneldef.DOWNLOAD_PROCESS].
     }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_COMPLETION){
     // Unduhan selesai. Anda dapat menggunakan event['vid'] dan event['index'] untuk mendapatkan vid dan indeks yang sesuai guna mengidentifikasi video mana yang telah diunduh. Anda dapat menggunakan event['savePath'] untuk mendapatkan jalur lokal video yang diunduh.
     }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_ERROR){
     // Unduhan gagal. Anda dapat menggunakan event['vid'] dan event['index'] untuk mendapatkan vid dan indeks yang sesuai guna mengidentifikasi video mana yang gagal diunduh. Anda dapat menggunakan event['errorCode'] dan event['errorMsg'] untuk mendapatkan kode kesalahan dan pesan kesalahan.
     }
     });
     });
  4. Hentikan unduhan.

    Contoh kodenya sebagai berikut:

    downloader.stop(vid, index)
  5. Hapus unduhan.

    Opsi penghapusan unduhan juga akan menghapus file lokal yang telah diunduh. Berikut contohnya:

    downloader.delete(vid, index)
  6. Lepaskan objek unduhan.

    Saat objek unduhan tidak lagi diperlukan, panggil metode release untuk melepaskannya dan mencegah kebocoran memori. Contoh kodenya sebagai berikut:

    downloader.release(vid, index)

Playback video terenkripsi

ApsaraVideo VOD mendukung enkripsi HLS, Enkripsi privat Alibaba Cloud, dan enkripsi Digital Rights Management (DRM). Untuk informasi lebih lanjut tentang playback terenkripsi, lihat Putar video terenkripsi.