全部产品
Search
文档中心

ApsaraVideo Live:Kirim dan terima pesan SEI

更新时间:Nov 05, 2025

SDK ApsaraVideo Real-time Communication (ARTC) mendukung pengiriman dan penerimaan pesan Supplemental Enhancement Information (SEI). Anda dapat menggunakan fitur ini untuk mentransmisikan pesan kustom dari sistem ARTC ke live streaming Alibaba Cloud CDN atau platform live streaming pihak ketiga.

Pengenalan fitur

Dalam pengkodean video, SEI adalah bagian dari standar pengkodean video seperti H.264/AVC dan H.265/HEVC. SEI digunakan untuk mentransmisikan informasi tambahan yang terkait dengan konten video. Informasi ini memberikan fitur bagi penerima, seperti aksesibilitas, sinkronisasi, dan pemulihan kesalahan. SEI dapat digunakan dalam skenario umum seperti tata letak video yang presisi, sinkronisasi lirik jarak jauh, dan kuis langsung.

Kami merekomendasikan Anda menggunakan SEI untuk mengirim pesan kustom. Pesan kustom tersebut disambungkan ke aliran data video dan ditransmisikan bersama data video kepada pengguna lain di saluran.

  • Kelebihan:

    • Kinerja real-time yang tinggi. Pesan teks disinkronkan dengan aliran media.

    • Tidak ada batasan jumlah penerima. Siapa pun yang menarik aliran dapat menerima pesan.

  • Kekurangan:

    • Untuk menghindari mempengaruhi transmisi aliran video, setiap pesan dapat mentransmisikan maksimal 4 KB data.

Contoh kode

ARTC menyediakan proyek demo open-source sebagai referensi. Anda dapat mengunduh proyek atau melihat kode sumbernya. Untuk informasi lebih lanjut tentang kode contoh, lihat tautan berikut:

Kirim dan Terima Pesan SEI di Android: Android/ARTCExample/BasicUsage/src/main/java/com/aliyun/artc/api/basicusage/SEIUsage/SEIActivity.java.

Kirim dan Terima Pesan SEI di iOS: iOS/ARTCExample/BasicUsage/SEIUsage/SEIUsageVC.swift.

Prasyarat

Sebelum mengimplementasikan fitur SEI, pastikan persyaratan berikut telah terpenuhi:

  • Anda memiliki Akun Alibaba Cloud yang valid dan telah membuat aplikasi ApsaraVideo Real-time Communication. Untuk informasi lebih lanjut, lihat Buat Aplikasi. Dapatkan App ID dan App Key di Management Console.

  • Anda telah mengintegrasikan SDK ARTC ke dalam proyek Anda dan mengimplementasikan fitur audio dan video real-time dasar. Untuk mengintegrasikan SDK, lihat Unduh/Integrasi SDK. Untuk mengimplementasikan fitur audio dan video, lihat Implementasikan Panggilan Audio dan Video.

Prosedur

Kirim pesan SEI

Setelah pengguna memulai pengambilan aliran, mereka dapat memanggil operasi sendMediaExtensionMsg untuk mengirim data SEI.

Informasi API

SDK ARTC menyediakan dua operasi untuk mengirim pesan SEI.

Operasi API

Deskripsi

sendMediaExtensionMsg

Parameter:

  • message: Pesan ekstensi media. Panjang maksimum adalah 4.096 byte. Kami merekomendasikan Anda menggunakan JSON atau string murni.

  • repeatCount: Jumlah pengulangan. Parameter ini mewakili redundansi pesan dan digunakan untuk mencegah kehilangan pesan akibat paket jaringan hilang. Nilai -1 menunjukkan transmisi tanpa batas.

  • delay: Latensi dalam milidetik. Parameter ini menentukan waktu minimum yang harus berlalu sebelum pesan ekstensi dikirim setelah operasi API dipanggil.

  • isKeyFrame: Menentukan apakah akan menyambungkan pesan ekstensi hanya pada keyframe. Nilai true menunjukkan bahwa pesan ekstensi hanya disambungkan pada keyframe.

sendMediaExtensionMsgEx

Dibandingkan dengan sendMediaExtensionMsg, operasi ini menyediakan parameter payloadType tambahan untuk menyetel jenis pesan SEI. Nilainya bisa 5 atau nilai dalam rentang [100, 254]. Jika Anda menyetel payloadType ke 5, operasi ini setara dengan operasi sendMediaExtensionMsg.

Catatan

Hanya satu pesan ekstensi media yang dapat ditransmisikan pada satu waktu. Jika Anda memanggil sendMediaExtensionMsg beberapa kali, data dari pemanggilan terbaru akan menimpa data dari pemanggilan sebelumnya.

Contoh panggilan

Contoh berikut menunjukkan cara memanggil operasi sendMediaExtensionMsgEx untuk mengirim pesan string sebagai pesan SEI.

Android

// Prasyarat: Anda telah bergabung dengan saluran dan memulai pengambilan aliran (pengambilan otomatis secara default).
mSendSEIButton.setOnClickListener(v -> {
    if(mAliRtcEngine == null) {
        return;
    }
    String seiMessage = mEditText.getText().toString();
    if (TextUtils.isEmpty(seiMessage)) {
        return;
    }
    byte[] seiData = seiMessage.getBytes();
    mAliRtcEngine.sendMediaExtensionMsg(seiData,1,0,false);
    // mAliRtcEngine.sendMediaExtensionMsgEx(seiData,1,0,false, 5);
});

iOS

// Kirim pesan SEI
func sendSEI(seiMessage: String) -> Bool {
    guard let data = seiMessage.data(using: .utf8) else {
        return false
    }
    let repeatCount: Int32 = 1
    let delay: Int32 = 0
    let payloadType: Int32 = 5
    let isKeyFrameOnly = false
    let ret = self.rtcEngine?.sendMediaExtensionMsg(data, repeatCount: repeatCount, delay: delay, isKeyFrame: isKeyFrameOnly)
    // let ret = self.rtcEngine?.sendMediaExtensionMsgEx(data, repeatCount: repeatCount, delay: delay, isKeyFrame: isKeyFrameOnly, payloadType: payloadType)
    debugPrint("sendSEI: \(ret ?? -1)")
    return ret == 0
}

Windows

/* Tentukan parameter berikut sesuai kebutuhan. */
char * data = "xxxxx";
int length = strlen(data);
mAliRtcEngine->SendMediaExtensionMsg(data, length, 1,0,true);

Terima pesan SEI

Setelah pengguna berlangganan aliran video di saluran, mereka dapat menerima data SEI dari saluran jika callback untuk menerima data SEI telah didaftarkan.

Informasi API

Operasi Callback

Deskripsi

onMediaExtensionMsgReceived

Callback untuk menerima pesan SEI.

Parameter:

  • uid: ID pengguna yang mengirim pesan.

  • payloadType: Jenis pesan SEI saat dikirim. Operasi sendMediaExtensionMsg mengembalikan 5. Operasi sendMediaExtensionMsgEx mengembalikan jenis spesifik.

  • message: Pesan SEI yang diterima.

Contoh panggilan

Android

@Override
public void onMediaExtensionMsgReceived(String uid, int payloadType, byte[]message) {
    super.onMediaExtensionMsgReceived(uid,payloadType, message);

    handler.post(new Runnable() {
        @Override
        public void run() {
            // Proses pesan.
            String receivedMsg = new String(message);
            ToastHelper.showToast(SEIActivity.this, receivedMsg, Toast.LENGTH_SHORT);
            
        }
    });
}

iOS

extension SEIUsageMainVC: AliRtcEngineDelegate {
    
    // Callback untuk menerima pesan SEI.
    // terima pesan SEI
    func onMediaExtensionMsgReceived(_ uid: String, payloadType: Int32, message data: Data) {
        // Proses pesan.
        guard let message = String(data: data, encoding: .utf8) else {
            print("Gagal mengurai pesan")
            return
        }
        self.showToast(message: "Menerima SEI: \(message), dari uid: \(uid), payloadType: \(payloadType)")
    }
    // Callback lainnya...

}

Windows

public:
virtual void OnMediaExtensionMsgReceived(const char* uid, const int8_t * message, uint32_t size) override {
    /* TODO: Tulis logika pemrosesan sesuai kebutuhan. */
}