全部产品
Search
文档中心

ApsaraVideo VOD:Atur gambar mini video

更新时间:Jul 06, 2025

Saat mengunggah video di Konsol ApsaraVideo VOD, Anda dapat menentukan gambar mini untuk video tersebut. Jika tidak ditentukan, ApsaraVideo VOD secara otomatis memilih salah satu cuplikan video sebagai gambar mini. Gambar mini ini dapat diubah setelah video diunggah.

Ikhtisar

Setiap video yang diunggah ke ApsaraVideo VOD memiliki gambar mini.

Jika Anda menentukan gambar saat mengunggah video, gambar tersebut akan digunakan sebagai gambar mini. Jika tidak, ApsaraVideo VOD menangkap hingga delapan cuplikan dari video dan memilih salah satunya sebagai gambar mini. Untuk informasi lebih lanjut, lihat Cuplikan Video. Gambar mini dapat diubah setelah video diunggah.

Prasyarat

  • ApsaraVideo VOD telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktivasi ApsaraVideo VOD.

  • Pengguna RAM atau Peran RAM yang digunakan harus memiliki izin yang diperlukan untuk mengakses ApsaraVideo VOD. Untuk meningkatkan keamanan akun Alibaba Cloud dan sumber daya Anda, disarankan menggunakan pengguna RAM atau Peran RAM untuk mengatur gambar mini video. Untuk informasi lebih lanjut, lihat Buat Pengguna RAM dan Berikan Izin kepada Pengguna RAM.

  • Jika Anda telah mengonfigurasi nama domain akselerasi di ApsaraVideo VOD, pastikan sertifikat dikonfigurasi untuk nama domain tersebut. Untuk informasi lebih lanjut, lihat Akselerasi Keamanan HTTPS.

Atur gambar mini selama pengunggahan

ApsaraVideo VOD mendukung beberapa metode pengunggahan. Untuk informasi lebih lanjut, lihat Ikhtisar Pengunggahan Media. Gambar mini kustom hanya dapat diatur jika Anda mengunggah video menggunakan API atau SDK ApsaraVideo VOD. Berikut adalah deskripsi konfigurasinya:

Penting

Setelah menentukan URL untuk parameter CoverURL, ApsaraVideo VOD menyimpan dan mengembalikan URL tersebut kepada pengguna. Pastikan URL yang ditentukan untuk CoverURL dapat diakses.

  • Tentukan URL gambar mini untuk parameter CoverURL saat memanggil operasi CreateUploadVideo.

  • Tentukan URL gambar mini untuk parameter CoverURL saat memanggil operasi UploadMediaByURL.

Ubah gambar mini setelah video diunggah

Setelah video diunggah ke ApsaraVideo VOD, Anda dapat menggunakan salah satu metode berikut untuk mengubah gambar mini video.

Atur gambar mini reguler

Gunakan konsol ApsaraVideo VOD

Setelah video diunggah ke ApsaraVideo VOD, Anda dapat mengubah gambar mini video di Konsol ApsaraVideo VOD. Anda dapat menggunakan gambar lokal atau cuplikan video sebagai gambar mini.

  1. Masuk ke Konsol ApsaraVideo VOD.

  2. Di panel navigasi kiri, pilih File Media > Audio/Video.

  3. Temukan video yang ingin diubah gambarnya mini dan klik Manage di kolom Tindakan.

  4. Di tab Basic Information, klik Editing Video Information.

    • Anda dapat memilih salah satu cuplikan otomatis sebagai gambar mini.

    • Anda juga dapat mengklik Upload untuk menggunakan gambar lokal sebagai gambar mini.

      Catatan

      Anda dapat mengunggah gambar dalam format JPG atau PNG. Ukuran gambar tidak boleh melebihi 1 MB dan resolusi tidak boleh melebihi 1920 × 1080 piksel.

      设置智能封面2

  5. Klik Save.

    Anda dapat memeriksa apakah gambar mini telah diubah di halaman Video dan Audio.

Gunakan API ApsaraVideo VOD

Setelah video diunggah ke ApsaraVideo VOD, Anda dapat memanggil operasi berikut untuk mengubah gambar mini video. Anda dapat menentukan URL yang dapat diakses sebagai URL gambar mini.

Penting

Setelah menentukan URL untuk parameter CoverURL, ApsaraVideo VOD menyimpan dan mengembalikan URL tersebut kepada pengguna. Pastikan bahwa URL yang ditentukan untuk CoverURL dapat diakses.

  • Tentukan URL gambar mini untuk parameter CoverURL saat memanggil operasi UpdateVideoInfo.

  • Tentukan URL gambar mini untuk parameter CoverURL di UpdateContent saat memanggil operasi UpdateVideoInfos.

  • Jika Anda ingin mengubah gambar mini video yang disimpan di bucket Object Storage Service (OSS), tentukan URL gambar mini untuk parameter CoverURL di RegisterMetadata saat memanggil operasi RegisterMedia.

Contoh - Atur frame pertama video sebagai gambar mini

Proses konfigurasi

  1. Buat template snapshot untuk menangkap frame pertama video.

  2. Buat tugas snapshot untuk menangkap frame pertama video.

  3. Ubah gambar mini video menjadi frame pertama video.

Prosedur

Gunakan konsol ApsaraVideo VOD

  1. Buat template snapshot untuk menangkap frame pertama video.

    1. Masuk ke Konsol ApsaraVideo VOD.

    2. Di panel navigasi kiri, pilih Configuration Management > Media Processing > Snapshot Templates.

    3. Di halaman Template Snapshot, klik Add Template. Di halaman yang muncul, konfigurasikan parameter untuk menangkap frame pertama video.

      Tentukan nama template kustom untuk Template Name, atur Snapshot Type ke Normal Snapshot, Start Time ke 00:00:00, dan Snapshot Count ke 1. Tentukan parameter lainnya berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang parameter, lihat Kelola Template Snapshot.首帧截图1.png

    4. Klik Save.

  2. Buat tugas snapshot untuk menangkap frame pertama video.

    Catatan
    • Untuk membuat tugas snapshot di Konsol ApsaraVideo VOD, Anda harus membuat alur kerja, tambahkan node Snapshots di alur kerja, lalu tentukan template snapshot yang Anda buat untuk menangkap frame pertama video. Untuk informasi lebih lanjut tentang cara membuat alur kerja, lihat Kelola Alur Kerja.

    • Kami sarankan Anda mengonfigurasi notifikasi peristiwa SnapshotComplete sebelum membuat tugas snapshot. Dengan cara ini, Anda dapat memperoleh informasi seperti status tugas dan URL snapshot dari callback setelah tugas selesai. Untuk informasi lebih lanjut tentang cara mengonfigurasi notifikasi peristiwa, lihat Konfigurasikan Callback.

    • Skenario 1: Tangkap Snapshot Selama Pengunggahan

      1. Masuk ke Konsol ApsaraVideo VOD. Di panel navigasi kiri, pilih Media Files > Audio/Video.

      2. Di halaman Video dan Audio, klik Upload. Di halaman Unggah Media, klik Add Media.

      3. Di kotak dialog Tambah Media, tentukan metode pengunggahan, alamat penyimpanan, dan file yang ingin diunggah. Lalu, pilih Use Workflow dari daftar drop-down dan alur kerja yang Anda buat untuk menangkap frame pertama video.

      4. Klik Upload.

    • Skenario 2: Tangkap Snapshot Setelah Pengunggahan

      1. Masuk ke Konsol ApsaraVideo VOD. Di panel navigasi kiri, pilih Media Files > Audio/Video.

      2. Di halaman Video dan Audio, temukan file yang ingin ditangkap snapshothnya dan klik Media Processing di kolom Tindakan.

      3. Di kotak dialog Pemrosesan Media, atur Processing Type ke Use Workflow dan Workflow ke alur kerja yang Anda buat untuk menangkap frame pertama video.

      4. Klik OK.

    • Peroleh Hasil Tugas Snapshot

      • Jika Anda mengonfigurasi notifikasi peristiwa SnapshotComplete sebelum membuat tugas snapshot, Anda dapat memperoleh informasi seperti status tugas dan URL snapshot dari callback setelah tugas selesai.

      • Jika Anda tidak mengonfigurasi notifikasi peristiwa SnapshotComplete sebelum membuat tugas snapshot, Anda dapat menggunakan metode round-robin untuk memanggil operasi ListSnapshots untuk memperoleh informasi seperti status tugas dan URL snapshot.

  3. Ubah gambar mini video menjadi frame pertama video.

    Catatan

    Anda hanya dapat mengubah gambar mini video di Konsol ApsaraVideo VOD setelah video diunggah. Untuk menggunakan frame pertama video sebagai gambar mini, Anda harus menyimpan snapshot yang ditangkap di Langkah 2 ke perangkat lokal Anda.

    1. Masuk ke Konsol ApsaraVideo VOD. Di panel navigasi kiri, pilih Media Files > Audio/Video.

    2. Di halaman Video dan Audio, temukan video yang ingin diubah gambarnya mini dan klik Manage di kolom Tindakan.

    3. Di tab Basic Information, klik Editing Video Information.

    4. Di halaman yang muncul, klik Upload, pilih snapshot yang ditangkap di Langkah 2 dari perangkat lokal Anda, lalu klik Open.

    5. Klik Save.

      Anda dapat memeriksa apakah gambar mini video telah diubah di halaman Video dan Audio.

Gunakan API ApsaraVideo VOD

Catatan

Berikut ini menjelaskan cara memanggil operasi API untuk mengatur gambar mini video dan memberikan contoh kode. SDK ApsaraVideo VOD untuk Java digunakan sebagai contoh.

Prosedur

  1. Buat template snapshot untuk menangkap frame pertama video.

    Panggil operasi AddVodTemplate untuk membuat template snapshot untuk menangkap frame pertama video. Contoh kode:

    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.vod.model.v20170321.AddVodTemplateRequest;
    import com.aliyuncs.vod.model.v20170321.AddVodTemplateResponse;
    
    
    /**
     * Catatan:
     * 1. Kode sampel berikut digunakan untuk membuat template snapshot untuk menangkap frame pertama video dan mengekspor gambar. 
     * 2. Kami sarankan Anda membuat template snapshot di konsol ApsaraVideo VOD. 
     */
    public class AddSnapshotTemplate {
    
        // Pasangan AccessKey dari akun Alibaba Cloud memiliki izin pada semua operasi API. Kami sarankan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan pemeliharaan rutin. 
        // Kami sarankan Anda tidak menyertakan pasangan AccessKey (AccessKey ID dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya dalam akun Anda mungkin terganggu. 
        // Dalam contoh ini, ApsaraVideo VOD membaca pasangan AccessKey dari variabel lingkungan untuk menerapkan verifikasi identitas untuk akses API. Sebelum Anda menjalankan kode sampel, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
        public static String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        public static String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    
        public static void main(String[] args) {
    
            try{
                DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);
                AddVodTemplateResponse response = addSnapshotTemplate(vodClient);
                System.out.println("RequestId is:" + response.getRequestId());
                System.out.println("TemplateId is:" + response.getVodTemplateId());
            }catch (Exception e){
    
            }
        }
    
        public static AddVodTemplateResponse addSnapshotTemplate(DefaultAcsClient vodClient) throws ClientException {
            AddVodTemplateRequest request = new AddVodTemplateRequest();
            request.setName("Template snapshot frame pertama");
            request.setTemplateType("Snapshot");
            request.setTemplateConfig("{\"SnapshotType\":\"NormalSnapshot\",\"SnapshotConfig\":{\"FrameType\":\"normal\",\"Count\":1,\"Interval\":1,\"SpecifiedOffsetTime\":0}}");
    
            return vodClient.getAcsResponse(request);
        }
    
        public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
            // Wilayah tempat ApsaraVideo VOD diaktifkan.
            String regionId = "cn-shanghai";  
            DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
            DefaultAcsClient client = new DefaultAcsClient(profile);
    
            return client;
        }
    }
    
  2. Buat tugas snapshot untuk menangkap frame pertama video.

    Panggil operasi SubmitSnapshotJob untuk mengirimkan tugas snapshot. Contoh kode:

    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.vod.model.v20170321.*;
    
    /**
     * Catatan:
     * 1. Kode sampel berikut digunakan untuk membuat tugas snapshot setelah Anda membuat template snapshot untuk menangkap frame pertama video. 
     * 2. Setelah Anda mengunggah video ke ApsaraVideo VOD, Anda dapat membuat tugas snapshot untuk video tersebut hanya setelah callback peristiwa VideoAnalysisComplete dikembalikan. Ini tidak diperlukan untuk video yang sudah ada dalam status normal. 
     * 3. Tugas snapshot diproses secara asinkron. Kami sarankan Anda memeriksa URL snapshot setelah callback peristiwa SnapshotComplete dikembalikan. 
     * 4. Anda dapat memperoleh URL keluaran snapshot dari parameter SnapshotRegular di callback. Untuk informasi lebih lanjut, lihat bagian "Pembuatan URL snapshot" dari topik SnapshotComplete. 
     * 5. Jika Anda tidak mengaktifkan fitur callback, Anda dapat memanggil operasi ListSnapshots untuk memeriksa informasi snapshot terbaru. Untuk informasi lebih lanjut, lihat ListSnapshots. 
     */
    public class SubmitSnapshotJob {
    
        // Pasangan AccessKey dari akun Alibaba Cloud memiliki izin pada semua operasi API. Kami sarankan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan pemeliharaan rutin. 
        // Kami sarankan Anda tidak menyertakan pasangan AccessKey (AccessKey ID dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya dalam akun Anda mungkin terganggu. 
        // Dalam contoh ini, ApsaraVideo VOD membaca pasangan AccessKey dari variabel lingkungan untuk menerapkan verifikasi identitas untuk akses API. Sebelum Anda menjalankan kode sampel, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
        public static String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        public static String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    
        public static void main(String[] args) {
    
            try{
                DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);
                SubmitSnapshotJobResponse response = submitSnapshotJob(vodClient);
                System.out.println("RequestId is:" + response.getRequestId());
                System.out.println("JobId is:" + response.getSnapshotJob().getJobId());
            }catch (Exception e){
    
            }
        }
    
        public static SubmitSnapshotJobResponse submitSnapshotJob(DefaultAcsClient vodClient) throws ClientException {
            SubmitSnapshotJobRequest request = new SubmitSnapshotJobRequest();
            request.setVideoId("a42b**********633b79f0102");
            request.setSnapshotTemplateId("1f27a7**********eba2756");
            // Opsional. Parameter pass-through kustom. Parameter ini digunakan untuk mengidentifikasi snapshot frame pertama. Anda dapat menggunakan parameter ini dalam callback peristiwa.
            request.setUserData("{\"Extend\":{\"SnapshotType\":\"FirstFrame\",\"VideoId\":\"a42bf540********33b79f0102\"}}");
            return vodClient.getAcsResponse(request);
        }
    
        public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
            // Wilayah tempat ApsaraVideo VOD diaktifkan.
            String regionId = "cn-shanghai";  
            DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
            DefaultAcsClient client = new DefaultAcsClient(profile);
    
            return client;
        }
    
        // Panggil operasi ListSnapshots untuk memeriksa snapshot.
        public static ListSnapshotsResponse listSnapshots(DefaultAcsClient vodClient) throws ClientException {
            ListSnapshotsRequest request = new ListSnapshotsRequest();
            request.setVideoId("a42bf540b1b371ed804a6633b79****");
            request.setSnapshotType("NormalSnapshot");
    
            ListSnapshotsResponse response = vodClient.getAcsResponse(request);
            System.out.println("RequestId is:" + response.getRequestId());
            System.out.println("SnapshotUrl is:" + response.getMediaSnapshot().getSnapshots().get(0).getUrl());
            return vodClient.getAcsResponse(request);
        }
    
    }
    
  3. Ubah gambar mini video menjadi frame pertama video.

    Berikut ini menjelaskan cara mengubah gambar mini setelah video diunggah. Untuk informasi lebih lanjut tentang cara mengatur gambar mini video dalam skenario lainnya, lihat Atur Gambar Mini Selama Pengunggahan dan Ubah Gambar Mini Setelah Video Diunggah.

    Untuk mengubah gambar mini video yang telah diunggah, panggil operasi UpdateVideoInfo dan konfigurasikan parameter CoverURL. Contoh kode:

    package com.alibaba.bltest.transcode;
    
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.vod.model.v20170321.UpdateVideoInfoRequest;
    import com.aliyuncs.vod.model.v20170321.UpdateVideoInfoResponse;
    
    /**
     * Catatan:
     * 1. Kode sampel berikut digunakan untuk mengubah gambar mini video. Untuk informasi lebih lanjut tentang cara memodifikasi parameter video lainnya, lihat dokumentasi operasi UpdateVideoInfo. 
     * 2. Pastikan bahwa URL gambar mini yang Anda tentukan dapat diakses. 
     */
    public class UpdateVideoInfo {
    
        // Pasangan AccessKey dari akun Alibaba Cloud memiliki izin pada semua operasi API. Kami sarankan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan pemeliharaan rutin. 
        // Kami sarankan Anda tidak menyertakan pasangan AccessKey (AccessKey ID dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya dalam akun Anda mungkin terganggu. 
        // Dalam contoh ini, ApsaraVideo VOD membaca pasangan AccessKey dari variabel lingkungan untuk menerapkan verifikasi identitas untuk akses API. Sebelum Anda menjalankan kode sampel, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
        public static String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        public static String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    
        public static void main(String[] args) {
    
            try{
                DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);
                UpdateVideoInfoResponse response = updateVideoInfo(vodClient);
                System.out.println("RequestId is:" + response.getRequestId());
            }catch (Exception e){
    
            }
        }
    
        public static UpdateVideoInfoResponse updateVideoInfo(DefaultAcsClient vodClient) throws ClientException {
            UpdateVideoInfoRequest request = new UpdateVideoInfoRequest();
            request.setVideoId("a42b***********33b79f0102");
            // Atur CoverURL ke URL gambar yang dihasilkan oleh tugas snapshot untuk menangkap frame pertama video.
            request.setCoverURL("http://demo.aliyuncdn.com/a42bf5******40b1b37/snapshots/normal/41B7AF54-18672BB301D-1748-0984-309-112420****.jpg");
    
            return vodClient.getAcsResponse(request);
        }
    
        public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
            // Tentukan wilayah tempat ApsaraVideo VOD diaktifkan.
            String regionId = "cn-shanghai";  
            DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
            DefaultAcsClient client = new DefaultAcsClient(profile);
            return client;
        }
    }
    

Kode Sampel Lengkap

package com.alibaba.bltest.transcode;


import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.*;
import org.apache.commons.lang3.StringUtils;

/**
 * Catatan:
 * 1. Kode sampel berikut digunakan untuk menangkap snapshot video dan mengubah gambar mini video. Anda dapat memodifikasi kode berdasarkan kebutuhan bisnis Anda. 
 * 2. Anda harus menambahkan logika spesifik ke kode sampel berikut sebelum Anda dapat menggunakan kode tersebut. 
 * 3. Kode sampel berikut hanya untuk referensi. Anda dapat menggunakan metode lain untuk menangkap snapshot video dan memodifikasi gambar mini video. 
 */
public class SnapshotAndUpdateCover {

    // Pasangan AccessKey dari akun Alibaba Cloud memiliki izin pada semua operasi API. Kami sarankan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan pemeliharaan rutin. 
    // Kami sarankan Anda tidak menyertakan pasangan AccessKey (AccessKey ID dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya dalam akun Anda mungkin terganggu. 
    // Dalam contoh ini, ApsaraVideo VOD membaca pasangan AccessKey dari variabel lingkungan untuk menerapkan verifikasi identitas untuk akses API. Sebelum Anda menjalankan kode sampel, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
    public static String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    public static String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    public static void main(String[] args) {


        try{
            DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);
            // ID video.
            String videoId = "a42bf540b1b37*******b79f0102";

            // Skenario 1: Fitur callback diaktifkan atau Message Service (MNS) diaktifkan
            // Anda dapat mengatur gambar mini video yang baru diunggah hanya setelah callback VideoAnalysisComplete dikembalikan.
            // Untuk mengatur gambar mini video yang sudah ada, panggil operasi submitSnapshotJob.
            submitSnapshotJob(vodClient,videoId);

            // Setelah callback SnapshotComplete dikembalikan, peroleh tipe snapshot dan URL snapshot.
            JSONObject callBackMessage = new JSONObject();  // Tentukan pesan callback.
            String snapshotType = callBackMessage.getJSONObject("UserData").getJSONObject("Extend").getString("SnapshotType");
            if("FirstFrame".equals(snapshotType)){

                // Tentukan jalur penyimpanan snapshot berdasarkan kebutuhan bisnis Anda.
                String coverUrl = callBackMessage.getJSONArray("SnapshotInfos").getJSONObject(0).getString("SnapshotRegular").replace("{SnapshotCount}","00001");
                // Ubah gambar mini video.
                updateVideoInfo(vodClient,videoId,coverUrl);
            }

            // Skenario 2: Fitur callback tidak diaktifkan dan MNS tidak diaktifkan
            // Untuk mengatur gambar mini video yang baru diunggah, gunakan metode round-robin untuk memperoleh status video.
            String videoStatus = "";
            while(!"Normal".equals(videoStatus)){
                videoStatus = getVideoInfo(vodClient,videoId);
                Thread.sleep(1000);
            }

            // Untuk mengatur gambar mini video yang sudah ada, panggil operasi submitSnapshotJob.
            submitSnapshotJob(vodClient,videoId);

            // Gunakan metode round-robin untuk memperoleh hasil tugas snapshot.
            String coverUrl = "";
            while(StringUtils.isBlank(coverUrl)){
                coverUrl = listSnapshots(vodClient,videoId);
                Thread.sleep(1000);
            }

            // Ubah gambar mini video.
            updateVideoInfo(vodClient,videoId,coverUrl);
        }catch (Exception e){

        }
    }

    /**
     * Kirim tugas snapshot
     */
    public static SubmitSnapshotJobResponse submitSnapshotJob(DefaultAcsClient vodClient, String vid) throws ClientException {
        SubmitSnapshotJobRequest request = new SubmitSnapshotJobRequest();
        request.setVideoId(vid);
        request.setSnapshotTemplateId("1f27a7f*********70eba2756");
        // Opsional. Parameter pass-through kustom. Parameter ini digunakan untuk mengidentifikasi snapshot frame pertama. Anda dapat menggunakan parameter ini dalam callback peristiwa.
        request.setUserData("{\"Extend\":{\"SnapshotType\":\"FirstFrame\",\"VideoId\":\"a42bf540********33b79f0102\"}}");

        return vodClient.getAcsResponse(request);
    }

    /**
     * Ubah gambar mini video
     */
    public static UpdateVideoInfoResponse updateVideoInfo(DefaultAcsClient vodClient, String vid, String coverUrl) throws ClientException {
        UpdateVideoInfoRequest request = new UpdateVideoInfoRequest();
        request.setVideoId(vid);
        // Atur CoverURL ke URL gambar yang dihasilkan oleh tugas snapshot untuk menangkap frame pertama video.
        request.setCoverURL(coverUrl);

        return vodClient.getAcsResponse(request);
    }

    /**
     * Inisialisasi instance SDK
     */
    public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
        // Tentukan wilayah tempat ApsaraVideo VOD diaktifkan.
        String regionId = "cn-shanghai";  
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);

        return client;
    }

    /**
     * Periksa snapshot yang ditangkap.
     */
    public static String listSnapshots(DefaultAcsClient vodClient, String vid) throws ClientException {
        ListSnapshotsRequest request = new ListSnapshotsRequest();
        request.setVideoId(vid);
        request.setSnapshotType("NormalSnapshot");

        ListSnapshotsResponse response = vodClient.getAcsResponse(request);
        String coverUrl = "";
        System.out.println("RequestId is:" + response.getRequestId());
        try{
            coverUrl = response.getMediaSnapshot().getSnapshots().get(0).getUrl();
            System.out.println("SnapshotUrl is:" + response.getMediaSnapshot().getSnapshots().get(0).getUrl());
        }catch (NullPointerException e){

        }
        return coverUrl;
    }

    /**
     * Periksa informasi video.
     */
    public static String getVideoInfo(DefaultAcsClient vodClient, String vid) throws ClientException {
        GetVideoInfoRequest request = new GetVideoInfoRequest();
        request.setVideoId(vid);

        GetVideoInfoResponse response = vodClient.getAcsResponse(request);
        System.out.println("RequestId is:" + response.getRequestId());
        String videoStatus = "";
        try{
            videoStatus = response.getVideo().getStatus();
            System.out.println("Video Status is:" + response.getVideo().getStatus());
        }catch (NullPointerException e){

        }

        return videoStatus;
    }
}