Saat menggunakan fitur pengeditan online dari Intelligent Media Services (IMS), Anda dapat mengonfigurasi peristiwa callback untuk mendapatkan kemajuan dan status pekerjaan sedini mungkin. Dengan cara ini, Anda dapat melakukan operasi bisnis lain berdasarkan peristiwa tersebut. Topik ini menjelaskan cara mengonfigurasi pengaturan callback untuk pekerjaan pengeditan yang selesai.
Metode callback
Anda dapat menggunakan permintaan HTTP dan antrean SMQ untuk menerima notifikasi peristiwa. Untuk informasi lebih lanjut, lihat Metode Callback.
Implementasi
Anda dapat mengonfigurasi URL callback kustom untuk pekerjaan individu atau mengonfigurasi URL callback global.
URL callback kustom untuk satu pekerjaan: URL callback yang ditentukan saat Anda mengirimkan pekerjaan pengeditan dan produksi. Anda harus memanggil operasi SubmitMediaProducingJob untuk menentukan URL callback HTTP atau HTTPS atau URL callback Simple Message Queue (SMQ).
Jika Anda menggunakan callback HTTP atau HTTPS, Anda harus menyebarkan layanan HTTP untuk menerima pesan callback dan mengonfigurasi URL callback saat Anda mengirimkan pekerjaan pengeditan dan produksi. Saat pekerjaan selesai, server IMS mengirimkan permintaan HTTP POST ke URL tersebut. Kemajuan pekerjaan dikirim ke pengguna melalui badan permintaan HTTP.
Jika Anda memilih callback MNS, Anda harus mengonfigurasi antrian pesan yang dimulai dengan
ice-callbackdi wilayah tempat pekerjaan diselesaikan. Server IMS mengirimkan pesan ke antrian pesan.
URL callback global: Berlaku untuk notifikasi callback untuk semua pekerjaan pemrosesan media. Anda dapat menentukan titik akhir antrian pesan sebagai URL callback global di Pengaturan Global IMS. Saat pekerjaan selesai, IMS mengirimkan notifikasi ke URL callback global yang telah dikonfigurasi.
CatatanHanya antrian pesan SMQ yang didukung.
Struktur pesan
Untuk informasi lebih lanjut tentang struktur pesan saat pekerjaan pengeditan dan produksi selesai, lihat Daftar Peristiwa.
Prasyarat
IMS diberi otorisasi untuk mengakses SMQ jika metode SMQ queue digunakan. Untuk informasi lebih lanjut, lihat Aktifkan SMQ dan Otorisasi Pengguna RAM untuk Mengakses SMQ.
Konfigurasikan URL callback kustom untuk satu pekerjaan
Anda dapat mengonfigurasi URL callback kustom untuk satu pekerjaan untuk menerima notifikasi saat pekerjaan selesai. Saat Anda memanggil operasi SubmitMediaProducingJob untuk mengirimkan pekerjaan, Anda dapat menentukan URL callback HTTP, HTTPS, atau SMQ dalam parameter UserData. Contoh kode:
URL callback HTTP atau HTTPS
{"NotifyAddress":"http(s)://**.**.***"}URL callback SMQ (harus menjadi titik akhir antrian pesan yang dimulai dengan
ice-callback){"NotifyAddress":"ice-callback-****"}
Konfigurasikan URL callback global
Buat antrian pesan di konsol SMQ. Antrian pesan harus dimulai dengan
ice-callback. Untuk informasi lebih lanjut, lihat Buat Antrian.Panggil operasi SetEventCallback untuk mengonfigurasi callback peristiwa dan tentukan nama antrian pesan yang dibuat di Langkah 1 dalam parameter
CallbackQueueName.Dengarkan antrian pesan di Langkah 1 dan proses pesan. Kode contoh berikut memberikan contoh.
CatatanNomor versi SDK server yang diperkenalkan dalam kode contoh berikut hanya untuk referensi. Untuk informasi lebih lanjut tentang cara mendapatkan versi terbaru, lihat Server SDK.
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.9</version> </dependency> <dependency> <groupId>com.aliyun.mns</groupId> <artifactId>aliyun-sdk-mns</artifactId> <version>1.1.9</version> </dependency> </dependencies>import java.util.List; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyun.mns.client.CloudAccount; import com.aliyun.mns.client.CloudQueue; import com.aliyun.mns.client.MNSClient; import com.aliyun.mns.common.ClientException; import com.aliyun.mns.common.ServiceException; import com.aliyun.mns.common.utils.ServiceSettings; import com.aliyun.mns.model.Message; public class IceProduceMessageConsumerDemo { public static void main(String[] args) { // Baca konfigurasi SMQ dari file ~/.aliyun-mns.properties: // mns.accesskeyid, mns.accesskeysecret, mns.queue.endpoint // Pengguna RAM yang memiliki pasangan AccessKey memiliki izin baca dan tulis penuh pada SMQ. CloudAccount account = new CloudAccount( ServiceSettings.getMNSAccessKeyId(), ServiceSettings.getMNSAccessKeySecret(), ServiceSettings.getMNSAccountEndpoint()); MNSClient client = account.getMNSClient(); //this client need only initialize once // Demo untuk kode penerimaan pesan try{ CloudQueue queue = client.getQueueRef("ice-callback-test");// ganti dengan nama antrian Anda List<Message> messages = queue.batchPopMessage(10, 30); for(Message popMsg : messages) { if (popMsg != null){ System.out.println("handle pesan: " + popMsg.getReceiptHandle()); System.out.println("badan pesan: " + popMsg.getMessageBodyAsString()); System.out.println("id pesan: " + popMsg.getMessageId()); System.out.println("hitungan dequeue pesan:" + popMsg.getDequeueCount()); JSONObject jsonObject = JSON.parseObject(popMsg.getMessageBodyAsString()); // Proses hanya pesan tipe ProduceMediaComplete: if("ProduceMediaComplete".equals(jsonObject.getString("EventType"))){ JSONObject messageBody = jsonObject.getJSONObject("MessageBody"); System.out.println("ProjectId:" + messageBody.getString("ProjectId")); System.out.println("JobId:" + messageBody.getString("JobId")); System.out.println("Status:" + messageBody.getString("Status")); System.out.println("MediaId:" + messageBody.getString("MediaId")); System.out.println("MediaURL:" + messageBody.getString("MediaURL")); //<<tambahkan logika khusus Anda.>> //ingat untuk menghapus pesan ketika pesan berhasil dikonsumsi. //queue.deleteMessage(popMsg.getReceiptHandle()); System.out.println("hapus pesan berhasil.\n"); } } } } catch (ClientException ce) { System.out.println("Ada masalah dengan koneksi jaringan antara klien dan layanan MNS." + "Periksa koneksi jaringan dan ketersediaan DNS Anda."); ce.printStackTrace(); } catch (ServiceException se) { if (se.getErrorCode().equals("QueueNotExist")) { System.out.println("Antrian tidak ada. Buat antrian sebelum digunakan"); } else if (se.getErrorCode().equals("TimeExpired")) { System.out.println("Permintaan kedaluwarsa. Periksa jam lokal mesin Anda"); } /* */ se.printStackTrace(); } catch (Exception e) { System.out.println("Pengecualian tak dikenal terjadi!"); e.printStackTrace(); } client.close(); } }