Membuat langganan event untuk pencampuran dan penerusan aliran.
Deskripsi operasi
Membuat langganan event untuk pencampuran dan penerusan aliran. Saat membuat langganan, Anda dapat mengonfigurasi parameter seperti URL callback, aplikasi yang berlangganan, dan informasi saluran.
Batas QPS
Batas QPS per pengguna tunggal untuk operasi ini adalah 50 panggilan per detik. Jika batas terlampaui, panggilan API akan dibatasi (throttled), yang dapat memengaruhi bisnis Anda. Panggil operasi ini dengan tepat.
Coba sekarang
Test
RAM authorization
|
Action |
Access level |
Resource type |
Condition key |
Dependent action |
|
live:CreateRtcMPUEventSub |
create |
*Semua sumber daya.
|
None | None |
Parameter permintaan
|
Parameter |
Type |
Required |
Description |
Example |
| AppId |
string |
Yes |
ID aplikasi yang berlangganan. Anda dapat melihat ID aplikasi dengan menavigasi ke ApsaraVideo Live > Live+ > ApsaraVideo Real-time Communication > Manajemen Aplikasi. Jika tidak ada aplikasi, buat satu dengan mengklik Buat Aplikasi. Catatan
ID aplikasi terdiri dari huruf besar dan kecil, angka, garis bawah, dan tanda hubung (-), dengan maksimal 64 karakter. |
yourAppId |
| ChannelIds |
string |
No |
ID saluran tugas pencampuran aliran yang ingin Anda terima callback-nya. Anda dapat menentukan beberapa ID saluran yang dipisahkan oleh koma (,). Catatan
|
yourChannelIds |
| CallbackUrl |
string |
Yes |
URL callback. Untuk format URL, lihat spesifikasi konten callback di bawah ini. Catatan
Protokol URL callback harus HTTP atau HTTPS. URL hanya boleh berisi karakter berikut: a-z, A-Z, 0-9, -, _, ?, %, =, #, ., /, dan +. URL tidak boleh melebihi 2083 karakter. |
http://****.com/callback |
Contoh konten callback
Konten callback dikirim ke server bisnis Anda sebagai permintaan HTTP/HTTPS POST. Enkoding karakter adalah UTF-8, dan body permintaan adalah struktur JSON. Ketika server bisnis Anda merespons dengan kode status HTTP 200, callback dianggap berhasil. Berikut adalah contoh konten callback:
Untuk menentukan apakah pencampuran dan penerusan aliran berfungsi dengan baik, gunakan notifikasi callback dan status aliran online yang disediakan oleh vendor CDN terkait.
{
"EventType": 1,
"MsgId": "42bba8b5-94ab-468c-9dae-9b501dd****",
"AppId": "rtcdev",
"SubId": "Sub-9799B2C45009799B2*****",
"TaskId": "mpucallbacktest",
"CallbackTs": 1712656430476,
"Payload": {
"DstUrl": "rtmp://domain/app/stream?auth",
"EventTs": 1712656430384,
"EventCode": 1,
"ErrorCode": 0,
"ErrorMessage": ""
}
}
Informasi callback
Header callback berisi bidang berikut:
| Bidang | Deskripsi |
| Content-Type | Tipe data. Nilai tetap: application/json |
| Ali-Rtc-Timestamp | Timestamp. |
| Ali-Rtc-Signature | Nilai tanda tangan. |
Body callback berisi bidang berikut:
| Bidang | Tipe | Deskripsi | Contoh |
| EventType | Integer | Tipe event callback. Untuk callback pencampuran dan penerusan aliran, nilainya tetap 1. | 1 |
| MsgId | String | ID callback yang secara unik mengidentifikasi callback ini. | *****973C-4529-A334***** |
| AppId | String | ID aplikasi yang berlangganan. | yourAppId |
| SubId | String | ID langganan. | Sub-******9799B2C4500****** |
| TaskId | String | ID tugas penerusan. | yourTaskId |
| CallbackTs | Integer | Timestamp dalam milidetik saat permintaan callback dimulai. | 1712656430476 |
| Payload | Objek JSON | Informasi event callback. | - |
Informasi event callback (Payload)
| Bidang | Tipe | Deskripsi | Contoh |
| DstUrl | String | URL tujuan untuk penerusan. | rtmp://domain/app/stream?auth |
| EventTs | Integer | Timestamp dalam milidetik saat event callback terjadi. | 1712656430384 |
| EventCode | Integer | Kode event callback. | 1 |
| ErrorCode | Integer | Kode error event callback. | 10001 |
| ErrorMessage | String | Pesan error event callback. | rtmp server init failed |
Kode event callback
| Bidang | Nilai | Deskripsi | Frekuensi callback |
| MPU_STATE_PREPARING | 0 | Tugas penerusan dibuat dan dipicu. | Dipanggil kembali hanya sekali. |
| MPU_STATE_ESTABLISHING | 1 | Tugas penerusan sedang membangun koneksi. | Dipanggil kembali setiap 5 detik. |
| MPU_STATE_RUNNING | 2 | Tugas penerusan sedang berjalan. | Dipanggil kembali hanya sekali. |
| MPU_STATE_RECOVERING | 3 | Tugas penerusan terputus dan sedang pulih. | Dipanggil kembali setiap 5 detik. |
| MPU_STATE_TERMINATED | 4 | Tugas penerusan telah berakhir, termasuk penghentian normal, kegagalan startup, atau keluar abnormal. Alasan spesifik ditunjukkan oleh ErrorCode dan ErrorMessage. | Dipanggil kembali hanya sekali. |
Gambar berikut menunjukkan contoh transisi state untuk event callback:
Catatan:
Pesan callback mungkin tiba di server bisnis Anda tidak berurutan. Anda dapat mengurutkan event berdasarkan EventTs di Payload. Jika Anda hanya memerlukan state terbaru dari event callback, abaikan event kedaluwarsa yang tiba kemudian.
Untuk tugas pencampuran dan penerusan aliran yang dibuat dengan memanggil CreateMixStreamRelayTask (baru), tugas akan berhenti secara otomatis setelah semua pengguna meninggalkan room selama periode waktu tertentu, dan callback MPU_STATE_TERMINATED dikirim.
Konfigurasi callback hanya memengaruhi tugas baru dan tidak memengaruhi tugas yang sudah ada:
a. Tugas yang dimulai sebelum konfigurasi callback diaktifkan tidak mengirim callback.
b. Tugas yang dimulai setelah konfigurasi callback diaktifkan mengirim callback.
c. Tugas yang dimulai sebelum konfigurasi callback dihapus terus mengirim callback hingga tugas berakhir.
d. Tugas yang dimulai setelah konfigurasi callback dihapus tidak mengirim callback.
Kode error callback
Ketika tugas penerusan berakhir, ErrorCode dan ErrorMessage menunjukkan alasan penghentian.
| Kode error | Pesan error | Deskripsi |
| 0 | Tugas berhenti secara normal. | |
| 10001 | rtmp server init failed | Pembentukan koneksi gagal. Tugas berakhir secara abnormal. |
| 10002 | rtmp server internal error | Terjadi error server internal. Tugas berakhir secara abnormal. |
| 10003 | task idle timeout | Tugas berakhir karena idle terlalu lama. |
Autentikasi callback
Autentikasi event callback diaktifkan secara default. Logika autentikasi adalah sebagai berikut:
Saat ApsaraVideo Live memulai permintaan callback, header permintaan HTTP(S) berisi bidang Ali-Rtc-Timestamp dan Ali-Rtc-Signature untuk verifikasi tanda tangan oleh server penerima pesan callback. Nilai Ali-Rtc-Signature dihitung sebagai berikut: Ali-Rtc-Signature=MD5SUM(MD5CONTENT), di mana MD5CONTENT=URL Callback|Nilai Ali-Rtc-Timestamp|Kunci Autentikasi. URL callback adalah URL callback lengkap yang Anda konfigurasikan. Kunci autentikasi adalah AppKey yang dihasilkan saat Anda membuat AppId.
Saat server penerima pesan callback menerima pesan callback, server tersebut menggabungkan URL callback, nilai Ali-Rtc-Timestamp, dan kunci autentikasi, menghitung nilai MD5 untuk memperoleh string terenkripsi, lalu membandingkan string terenkripsi yang dihitung dengan nilai bidang Ali-Rtc-Signature di header permintaan HTTP(S) yang dikirim oleh ApsaraVideo Real-time Communication. Jika nilai tidak cocok, permintaan tidak valid.
Percobaan ulang callback saat gagal
Saat Alibaba Cloud memulai permintaan callback, callback dianggap berhasil hanya ketika server bisnis Anda merespons dengan kode status HTTP 200. Jika callback gagal, Alibaba Cloud akan mencoba ulang 7 kali dengan interval 1 detik, 2 detik, 5 detik, 10 detik, 1 menit, 2 menit, dan 5 menit. Setiap percobaan ulang menghasilkan catatan callback yang sesuai.
Elemen respons
|
Element |
Type |
Description |
Example |
|
object |
|||
| RequestId |
string |
ID permintaan. |
******3B-0E1A-586A-AC29-742247****** |
| SubId |
string |
ID langganan. |
Sub-******9799B2C4500****** |
Contoh
Respons sukses
JSONformat
{
"RequestId": "******3B-0E1A-586A-AC29-742247******",
"SubId": "Sub-******9799B2C4500******"
}
Kode kesalahan
|
HTTP status code |
Error code |
Error message |
Description |
|---|---|---|---|
| 400 | InvalidParam | %s. | Validasi parameter gagal. |
| 400 | MissingParam | %s, please check and try again later. | Parameter yang diperlukan tidak ada. Periksa dan coba lagi. |
| 400 | InvalidAppId | %s, please check and try again later. | AppId tidak valid. Periksa dan coba lagi. |
| 500 | InternalError | InternalError | |
| 403 | OperationDenied | Your account has not enabled the Live service | |
| 403 | Forbidden | %s, please check and try again later. | Anda tidak memiliki izin yang diperlukan. Periksa dan coba lagi. |
Lihat Error Codes untuk daftar lengkap.
Catatan rilis
Lihat Release Notes untuk daftar lengkap.