全部产品
Search
文档中心

ApsaraVideo Live:Gunakan API untuk mengimplementasikan studio produksi dalam mode daftar putar

更新时间:Nov 28, 2025

Topik ini menjelaskan cara memanggil operasi API untuk menggunakan studio produksi dalam mode daftar putar untuk streaming langsung. Studio produksi dalam mode daftar putar memungkinkan Anda menggabungkan beberapa video secara cepat untuk streaming langsung di berbagai jenis konten dan skenario. Fitur ini mendukung pemutaran otomatis pada waktu yang dijadwalkan, menyediakan konten yang lebih beragam, serta meningkatkan stabilitas pengguna. Iklan dapat dimasukkan secara real-time atau pada waktu tertentu untuk membantu meningkatkan pendapatan.

Ikhtisar

Berikut adalah langkah-langkah untuk menggunakan studio produksi dalam mode daftar putar untuk streaming langsung:

  1. Aktifkan bucket video-on-demand (VOD): Setelah mengaktifkan ApsaraVideo VOD, Anda akan diberikan bucket VOD independen di setiap wilayah. Aktifkan bucket tersebut sebelum mengunggah dan mengelola sumber daya media di wilayah tersebut. Tidak diperlukan konfigurasi tambahan.

  2. Unggah video: Unggah video ke bucket VOD sesuai urutan pemutaran yang diinginkan.

  3. Tambahkan domain streaming: Domain streaming menyediakan URL streaming untuk siaran langsung. Penonton dapat menonton siaran langsung menggunakan URL ini.

  4. Panggil operasi API untuk mengonfigurasi studio produksi dalam mode daftar putar: Gunakan operasi API untuk menentukan jumlah pemutaran setiap video dan frekuensi pengulangan daftar episode. Misalnya, video A diputar sekali, B dua kali, dan C tiga kali. Setelah menyelesaikan langkah-langkah ini, kueri informasi pemutaran tentang daftar episode dan mulai pemutaran.

Prasyarat

  • Akun Alibaba Cloud telah dibuat dan lulus verifikasi identitas.

  • Aktifkan layanan ApsaraVideo VOD, ApsaraVideo Live, dan Cloud Production Studio. Untuk informasi lebih lanjut, lihat Aktifkan ApsaraVideo VOD, Aktifkan ApsaraVideo Live dan beli paket sumber daya, dan Aktifkan layanan Cloud Production Studio.

    Catatan

    Fitur studio produksi saat ini hanya didukung di wilayah China (Shanghai), China (Beijing), Singapura, dan Indonesia (Jakarta). Dukungan untuk lebih banyak wilayah akan tersedia di masa mendatang.

  • Anda telah menyiapkan domain streaming. Untuk memulai dengan cepat, kami merekomendasikan agar Anda mengatur live center ke wilayah di luar daratan Tiongkok dan wilayah akselerasi ke Outside Chinese Mainland. Dengan demikian, Anda tidak perlu mengajukan pendaftaran Internet Content Provider (ICP) untuk domain streaming tersebut.

  • Kebijakan AliyunFCFullAccess, AliyunLiveFullAccess, dan AliyunVODFullAccess dilampirkan ke Pengguna Resource Access Management (RAM). Untuk informasi lebih lanjut, lihat Buat dan berikan izin kepada Pengguna RAM.

Langkah 1: Aktifkan bucket VOD

Di Konsol ApsaraVideo VOD, pilih Configuration Management > Media Management Configuration > Storage, lalu klik Enable VOD buckets untuk bucket sistem VOD.

Catatan

Tunggu hingga bucket diaktifkan. Bucket hanya dapat digunakan setelah sistem menampilkan pesan Bucket Enabled Successfully dan status bucket adalah Normal.

image

Langkah 2: Unggah video

  1. Di halaman Media Files > Audio/Video pada Konsol ApsaraVideo VOD, klik Upload.

  2. Di halaman Upload Media, klik Add Media.

    image

  3. Di kotak dialog Add Media, pilih Local Upload, pilih tiga file video yang telah disiapkan dari perangkat lokal Anda, lalu klik Upload.

    image

  4. Setelah unggahan berhasil, lihat dan catat ID resource di halaman Audio/Video. Kemudian, di kolom Actions, klik More > Make Available on Cloud Studio agar konten tersedia untuk ditampilkan secara real-time di studio produksi ApsaraVideo Live. Untuk informasi tentang fitur studio produksi, lihat Pengantar Area Fungsional.

    image

Langkah 3: Tambahkan domain streaming

  1. Di Konsol ApsaraVideo Live, buka halaman Domain Names, lalu klik Add Domain Name.

  2. Konfigurasikan nama domain sesuai kebutuhan. Klik Next. Untuk informasi lebih lanjut tentang parameter, lihat Tambahkan nama domain yang dipercepat.

    image

  3. Catat CNAME yang dihasilkan untuk digunakan selanjutnya.

    image

  4. Di halaman Alibaba Cloud DNS - Public Authoritative Resolution, temukan nama domain yang ingin dikonfigurasi, lalu klik Settings di kolom Actions.

  5. Klik Add Record, lengkapi konfigurasi CNAME, lalu klik Confirm. Untuk informasi selengkapnya, lihat Konfigurasikan resolusi CNAME untuk nama domain.

    image

Langkah 4: Panggil operasi API untuk mengonfigurasi studio produksi dalam mode daftar putar

  1. Buka Intellij IDEA dan buat proyek Maven. Di file pom.xml, buat tag <dependencies></dependencies> dan tambahkan dependensi berikut:

     <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>live20161101</artifactId>
        <version>2.0.0</version>
     </dependency>
     <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.76</version>
     </dependency>
    
  2. Di direktori src/main/java, klik kanan `java` dan buat kelas Java. Dalam contoh ini, beri nama kelas Java bodan.

  3. Konfigurasikan parameter berikut dan jalankan kode sampel.

    package com.alibaba.aliyundebug.common;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.aliyun.live20161101.Client;
    import com.aliyun.live20161101.models.*;
    import com.aliyun.teaopenapi.models.Config;
    import org.apache.commons.codec.digest.DigestUtils;
    
    import java.util.List;
    import java.util.Random;
    import java.util.UUID;
    
    public class Bodan {
        private final static String ACCESS_KEY_ID = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        private final static String ACCESS_KEY_SECRET = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    
        private static class LiveClient {
            private static volatile Client instance;
    
            private LiveClient() {
            }
    
            public static Client getInstance(String endpoint, String accessKeyId, String accessKeySecret) {
                if (instance == null) {
                    synchronized (LiveClient.class) {
                        if (instance == null) {
                            try {
                                Config config = new Config();
                                config.setEndpoint(endpoint);
                                config.setAccessKeyId(accessKeyId);
                                config.setAccessKeySecret(accessKeySecret);
                                instance = new Client(config);
                            } catch (Exception e) {
                                throw new RuntimeException("Inisialisasi klien live gagal: " + e.getMessage(), e);
                            }
                        }
                    }
                }
                return instance;
            }
        }
    
        private static CreateCasterResponse createCaster(Client client) throws Exception {
            CreateCasterRequest request = new CreateCasterRequest();
    
            Random random = new Random();
            int i = random.nextInt(100000);
            request.setCasterName("casterName" + i);
    
            UUID uuid = UUID.randomUUID();
            String token = "thisIsaToken";
            String clientToken = DigestUtils.sha256Hex(token + uuid);
            request.setClientToken(clientToken);
    
            // Untuk menggunakan daftar episode, Anda hanya perlu membuat studio produksi dalam mode daftar putar.
            request.setNormType(6);
            request.setChargeType("PostPaid");
    
            CreateCasterResponse response = client.createCaster(request);
    
            System.out.println("Studio produksi dibuat. Tanggapan: " + JSON.toJSONString(response));
            return response;
        }
    
        private static void setCasterConfig(Client client, String casterId,String domainName) throws Exception {
            SetCasterConfigRequest request = new SetCasterConfigRequest();
            request.setCasterId(casterId);
    
            // Konfigurasikan nama domain.
            request.setDomainName(domainName);
            JSONObject transcodeConfig = new JSONObject();
            JSONArray liveTemplate = new JSONArray();
            //Konfigurasikan template untuk studio produksi.
            liveTemplate.add("lld");
            transcodeConfig.put("LiveTemplate", liveTemplate);
            //Konfigurasikan template transkoding.
            transcodeConfig.put("CasterTemplate", "lp_sd");
            request.setTranscodeConfig(transcodeConfig.toJSONString());
    
            SetCasterConfigResponse response = client.setCasterConfig(request);
            System.out.println("Studio produksi dikonfigurasi. Tanggapan: " + JSON.toJSONString(response));
        }
    
        private static StartCasterResponse startCaster(Client client, String casterId) throws Exception {
            StartCasterRequest startCasterRequest = new StartCasterRequest();
            startCasterRequest.setCasterId(casterId);
            StartCasterResponse acsResponse = client.startCaster(startCasterRequest);
            System.out.println("Studio produksi dimulai.");
            return acsResponse;
        }
    
        private static StopCasterResponse stopCaster(Client client, String casterId) throws Exception {
            StopCasterRequest stopCasterRequest = new StopCasterRequest();
            stopCasterRequest.setCasterId(casterId);
            StopCasterResponse acsResponse = client.stopCaster(stopCasterRequest);
            System.out.println("Studio produksi dihentikan.");
            return acsResponse;
        }
    
        private static AddShowIntoShowListResponse addShowIntoShowList(Client client, String showName, String resourceId, String resourceUrl,
                                                                       String resourceType, Integer spot, Integer repeatTimes,
                                                                       String casterId, Long duration) throws Exception {
            AddShowIntoShowListRequest addShowIntoShowListRequest = new AddShowIntoShowListRequest();
    
            if (casterId == null || resourceType == null) {
                return null;
            }
            if (resourceId == null && resourceUrl == null) {
                return null;
            }
            addShowIntoShowListRequest.setCasterId(casterId);
            addShowIntoShowListRequest.setResourceType(resourceType);
            if (showName != null) {
                addShowIntoShowListRequest.setShowName(showName);
            }
            if (resourceUrl != null) {
                addShowIntoShowListRequest.setResourceUrl(resourceUrl);
            }
            if (resourceId != null) {
                addShowIntoShowListRequest.setResourceId(resourceId);
            }
            if (spot != null) {
                addShowIntoShowListRequest.setSpot(spot);
            }
            if (repeatTimes != null) {
                addShowIntoShowListRequest.setRepeatTimes(repeatTimes);
            }
            if (duration != null) {
                addShowIntoShowListRequest.setDuration(duration);
            }
            return client.addShowIntoShowList(addShowIntoShowListRequest);
        }
    
        private static void removeShowFromShowList(Client client, String casterId, String showId) throws Exception {
            RemoveShowFromShowListRequest removeShowFromShowList = new RemoveShowFromShowListRequest();
            removeShowFromShowList.setShowId(showId);
            removeShowFromShowList.setCasterId(casterId);
            RemoveShowFromShowListResponse removeShowFromShowListFromShowListResponse = client.removeShowFromShowList(removeShowFromShowList);
            System.out.println("removeShowFromShowListFromShowListResponse:" + JSON.toJSONString(removeShowFromShowListFromShowListResponse));
        }
    
        private static void modifyShowList(Client client, String casterId, String showId, Integer repeatTimes, Integer spot,
                                                             String highPriorityShowId, String highPriorityShowStartTime) throws Exception {
            ModifyShowListRequest modifyShowListRequest = new ModifyShowListRequest();
            if (casterId != null) {
                modifyShowListRequest.setCasterId(casterId);
            }
            if (showId != null) {
                modifyShowListRequest.setShowId(showId);
            }
            if (repeatTimes != null) {
                modifyShowListRequest.setRepeatTimes(repeatTimes);
            }
            if (spot != null) {
                modifyShowListRequest.setSpot(spot);
            }
            if (highPriorityShowId != null) {
                modifyShowListRequest.setHighPriorityShowId(highPriorityShowId);
            }
            if (highPriorityShowStartTime != null) {
                modifyShowListRequest.setHighPriorityShowStartTime(highPriorityShowStartTime);
            }
            ModifyShowListResponse modifyShowListResponse = client.modifyShowList(modifyShowListRequest);
            System.out.println("Daftar episode dimodifikasi. Tanggapan: " + JSON.toJSONString(modifyShowListResponse));
        }
    
        private static void describeShowList(Client client, String casterId) throws Exception {
            DescribeShowListRequest describeShowListRequest = new DescribeShowListRequest();
            if (casterId != null) {
                describeShowListRequest.setCasterId(casterId);
            }
            DescribeShowListResponse describeShowListRequestResponse = client.describeShowList(describeShowListRequest);
            System.out.println("Kueri daftar episode selesai. Parameter tanggapan:" + JSON.toJSONString(describeShowListRequestResponse));
    
            DescribeShowListResponseBody showListBody = describeShowListRequestResponse.getBody();
            JSONObject showList = JSON.parseObject(showListBody.getShowList());
            JSONArray shows = showList.getJSONArray("Shows");
            //Tampilkan informasi daftar episode.
            for (int i = 0; i < shows.size(); i++) {
                JSONObject show = (JSONObject) shows.get(i);
                String showId = show.getString("ShowId");
                String resourceType = show.getString("ResourceType");
                String resourceInfo = show.getString("ResourceInfo");
                Integer repeatTimes = show.getInteger("RepeatTimes");
                Long duration = show.getLong("Duration");
                String showInfo = String.format("show%d: showId: %s \n resourceType: %s  \n  resourceInfo: %s \n RepeatTimes: %d \n Duration: %d",
                        i + 1, showId, resourceType, resourceInfo, repeatTimes, duration);
                System.out.println(showInfo);
            }
        }
    
        private static void playChoosenShow(Client client, String casterId, String showId) throws Exception {
            PlayChoosenShowRequest playChoosenShow = new PlayChoosenShowRequest();
            playChoosenShow.setCasterId(casterId);
            playChoosenShow.setShowId(showId);
            PlayChoosenShowResponse playChoosenShowResponse = client.playChoosenShow(playChoosenShow);
            System.out.println("Berhasil beralih ke showId: " + showId + ".");
        }
    
        private static List<DescribeCasterStreamUrlResponseBody.DescribeCasterStreamUrlResponseBodyCasterStreamsCasterStream> describeCasterStreamUrl(Client client, String casterId) throws Exception {
            DescribeCasterStreamUrlRequest describeCasterStreamUrlRequest = new DescribeCasterStreamUrlRequest();
            describeCasterStreamUrlRequest.setCasterId(casterId);
            DescribeCasterStreamUrlResponse response = client.describeCasterStreamUrl(describeCasterStreamUrlRequest);
            return response.getBody().getCasterStreams().getCasterStream();
        }
    
    
        public static void main(String[] args) throws Exception {
            Client client = LiveClient.getInstance("live.aliyuncs.com", ACCESS_KEY_ID, ACCESS_KEY_SECRET);
            // Buat studio produksi.
            CreateCasterResponse caster = createCaster(client);
            String casterId = caster.getBody().getCasterId();
            // Konfigurasikan studio produksi.
            String domainName = "example.aliyundoc.com"; // Atur nama domain.
            setCasterConfig(client, casterId,domainName);
    
            // Tambahkan tiga file VOD ke daftar episode secara berurutan. Putar file VOD pertama sekali, file VOD kedua dua kali, dan file VOD ketiga tiga kali.
            String[] resourceIds = new String[]{"698d2b23581f476ea71107703e64****", "9c97e83e211a435b9f797e4e20ee****", "76c6addaa41c438985666a8a964f****"};
            for (int i = 0; i < resourceIds.length; i++) {
                String showName = "ShowName#" + i;
                Integer repeatTimes = i;
                addShowIntoShowList(client, showName, resourceIds[i], null, "vod", null, repeatTimes, casterId, null);
            }
            modifyShowList(client, casterId, null, 10, null, null, null);
            describeShowList(client, casterId);
            startCaster(client, casterId);
    
            Thread.sleep(500000);
    
            stopCaster(client, casterId);
        }
    
    }
    

    Deskripsi parameter:

    Informasi konfigurasi parameter

    Deskripsi

    private final static String ACCESS_KEY_ID = "ID AccessKey";
    private final static String ACCESS_KEY_SECRET = "Rahasia AccessKey";

    Anda harus menggunakan pasangan AccessKey untuk menyelesaikan verifikasi identitas. Pasangan AccessKey terdiri dari ID AccessKey dan rahasia AccessKey.

    • ID AccessKey digunakan untuk memverifikasi identitas pengguna.

    • Rahasia AccessKey digunakan untuk mengotentikasi kunci pengguna. Anda harus menjaga kerahasiaan rahasia AccessKey Anda.

    Untuk informasi lebih lanjut, lihat Buat pasangan AccessKey.

    request.setDomainName("example.aliyundoc.com");

    Nama domain streaming.

    String[] resourceIds = new String[]{"698d2b23581f476ea71107703e64****", "9c97e83e211a435b9f797e4e20ee****", "76c6addaa41c438985666a8a964f****"};

    ID sumber daya. Untuk informasi lebih lanjut, lihat 2. Unggah video.

  4. Lihat hasilnya.

    image

  5. Di halaman Production Studios, temukan studio produksi yang telah Anda buat, lalu klik Enter di kolom Actions. Ketiga file video-on-demand ditambahkan ke daftar putar secara berurutan dan diputar sesuai konfigurasi yang ditentukan.

    image

    image

Apa yang harus dilakukan selanjutnya

Untuk memutar aliran, klik Streaming URL di studio produksi untuk menyalin URL tersebut. Anda kemudian dapat menggunakan VLC media player, demo siaran langsung, atau SDK pemutar untuk pemutaran. Untuk informasi selengkapnya, lihat Pemutaran Siaran Langsung.

image