Callback SDK produsen - Amazon Kinesis Video Streams

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Callback SDK produsen

Kelas dan metode di Amazon Kinesis Video Streams Producer SDK tidak mempertahankan prosesnya sendiri. Sebaliknya, mereka menggunakan panggilan fungsi masuk dan acara untuk menjadwalkan callback untuk berkomunikasi dengan aplikasi.

Ada dua pola callback yang dapat digunakan aplikasi untuk berinteraksi dengan SDK:

  • CallbackProvider— Objek ini mengekspos setiap callback dari komponen platform-independent code (PIC) ke aplikasi. Pola ini memungkinkan fungsionalitas penuh, tetapi juga berarti bahwa implementasi harus menangani semua metode API publik dan tanda tangan di lapisan C++.

  • StreamCallbackProviderdan ClientCallbackProvider — Objek ini mengekspos callback khusus aliran dan spesifik klien, dan lapisan C++ SDK mengekspos sisa callback. Ini adalah pola callback yang disukai untuk berinteraksi dengan Producer SDK.

Diagram berikut menggambarkan model objek dari objek callback:


                Diagram yang menunjukkan interaksi produsen dan konsumen di Kinesis Video Streams.

Dalam diagram sebelumnya, DefaultCallbackProvider berasal dari CallbackProvider (yang mengekspos semua callback di PIC) dan berisi dan. StreamCallbackProvider ClientCallbackProvider

ClientCallbackProvider

ClientCallbackProviderObjek mengekspos fungsi callback tingkat klien. Rincian fungsi dijelaskan di ClientCallbacks bagian ini.

Metode callback:

  • getClientReadyCallback— Melaporkan keadaan siap untuk klien.

  • getStorageOverflowPressureCallback— Melaporkan limpahan penyimpanan atau tekanan. Callback ini dipanggil ketika pemanfaatan penyimpanan turun di bawah STORAGE_PRESSURE_NOTIFICATION_THRESHOLD nilai, yaitu 5 persen dari ukuran penyimpanan keseluruhan. Untuk informasi selengkapnya, lihat StorageInfo.

StreamCallbackProvider

StreamCallbackProviderObjek mengekspos fungsi callback tingkat aliran.

Metode callback:

  • getDroppedFragmentReportCallback: Melaporkan fragmen yang dijatuhkan.

  • getDroppedFrameReportCallback— Melaporkan bingkai yang jatuh.

  • getFragmentAckReceivedCallback— Melaporkan bahwa sebuah fragmen ACK diterima untuk streaming.

  • getStreamClosedCallback— Melaporkan kondisi aliran tertutup.

  • getStreamConnectionStaleCallback— Melaporkan kondisi koneksi basi. Dalam kondisi ini, produsen mengirim data ke layanan tetapi tidak menerima pengakuan.

  • getStreamDataAvailableCallback— Melaporkan bahwa data tersedia di aliran.

  • getStreamErrorReportCallback— Melaporkan kondisi kesalahan aliran.

  • getStreamLatencyPressureCallback— Melaporkan kondisi latensi aliran, yaitu ketika ukuran buffer akumulasi lebih besar dari nilaimax_latency. Untuk informasi selengkapnya, lihat StreamDefinition/StreamInfo.

  • getStreamReadyCallback: —Melaporkan kondisi siap streaming.

  • getStreamUnderflowReportCallback— Melaporkan kondisi aliran underflow. Fungsi ini saat ini tidak digunakan dan dicadangkan untuk penggunaan masa depan.

Untuk kode sumbernyaStreamCallbackProvider, lihat StreamCallbackProvider.h.

ClientCallbacks struktur

ClientCallbacksStruktur berisi titik entri fungsi callback yang dipanggil PIC ketika peristiwa tertentu terjadi. Struktur juga berisi informasi versi di CALLBACKS_CURRENT_VERSION bidang, dan customData bidang untuk data yang ditentukan pengguna yang dikembalikan dengan fungsi callback individual.

Aplikasi klien dapat menggunakan this pointer untuk custom_data bidang untuk memetakan fungsi anggota ke ClientCallback fungsi statis saat runtime, seperti yang ditunjukkan dalam contoh kode berikut:

STATUS TestStreamCallbackProvider::streamClosedHandler(UINT64 custom_data, STREAM_HANDLE stream_handle, UINT64 stream_upload_handle) { LOG_INFO("Reporting stream stopped."); TestStreamCallbackProvider* streamCallbackProvider = reinterpret_cast<TestStreamCallbackProvider*> (custom_data); streamCallbackProvider->streamClosedHandler(...);
Kejadian
Fungsi Deskripsi Tipe
CreateDeviceFunc Saat ini tidak diterapkan di backend. Panggilan ini gagal saat dipanggil dari Java atau C++. Klien lain melakukan inisialisasi khusus platform. API Backend
CreateStreamFunc Disebut saat aliran dibuat. API Backend
DescribeStreamFunc Disebut saat DescribeStream dipanggil. API Backend
GetStreamingEndpointFunc Disebut saat GetStreamingEndpoint dipanggil. API Backend
GetStreamingTokenFunc Disebut saat GetStreamingToken dipanggil. API Backend
PutStreamFunc Disebut saat PutStream dipanggil. API Backend
TagResourceFunc Disebut saat TagResource dipanggil. API Backend
     
CreateMutexFunc Membuat mutex sinkronisasi. Sinkronisasi
FreeMutexFunc Membebaskan mutex. Sinkronisasi
LockMutexFunc Mengunci mutex sinkronisasi. Sinkronisasi
TryLockMutexFunc Mencoba mengunci mutex. Saat ini tidak diimplementasikan. Sinkronisasi
UnlockMutexFunc Membuka kunci mutex. Sinkronisasi
     
ClientReadyFunc Dipanggil ketika klien memasuki keadaan siap. Notifikasi
DroppedFrameReportFunc Melaporkan saat bingkai dijatuhkan. Notifikasi
DroppedFragmentReportFunc Melaporkan saat fragmen dijatuhkan. Fungsi ini saat ini tidak digunakan dan dicadangkan untuk penggunaan masa depan. Notifikasi
FragmentAckReceivedFunc Dipanggil ketika sebuah fragmen ACK (buffering, received, persisted, dan error) diterima. Notifikasi
StorageOverflowPressureFunc Disebut ketika pemanfaatan penyimpanan turun di bawah STORAGE_PRESSURE_NOTIFICATION_THRESHOLD nilai, yang didefinisikan sebagai 5 persen dari ukuran penyimpanan keseluruhan. Notifikasi
StreamClosedFunc Disebut ketika bit terakhir dari frame yang tersisa dialirkan. Notifikasi
StreamConnectionStaleFunc Dipanggil ketika aliran memasuki status koneksi basi. Dalam kondisi ini, produsen mengirimkan data ke layanan tetapi tidak menerima pengakuan. Notifikasi
StreamDataAvailableFunc Dipanggil saat data streaming tersedia. Notifikasi
StreamErrorReportFunc Dipanggil ketika terjadi kesalahan aliran. PIC secara otomatis menutup aliran dalam kondisi ini. Notifikasi
StreamLatencyPressureFunc Dipanggil ketika aliran memasuki kondisi latensi, yaitu ketika ukuran buffer akumulasi lebih besar dari nilaimax_latency. Untuk informasi selengkapnya, lihat StreamDefinition/StreamInfo. Notifikasi
StreamReadyFunc Dipanggil ketika aliran memasuki keadaan siap. Notifikasi
StreamUnderflowReportFunc Fungsi ini saat ini tidak digunakan dan dicadangkan untuk penggunaan masa depan. Notifikasi
     
DeviceCertToTokenFunc Mengembalikan sertifikat koneksi sebagai token. Integrasi platform
GetCurrentTimeFunc Mengembalikan waktu saat ini. Integrasi platform
GetDeviceCertificateFunc Mengembalikan sertifikat perangkat. Fungsi ini saat ini tidak digunakan dan dicadangkan untuk penggunaan masa depan. Integrasi platform
GetDeviceFingerprintFunc Mengembalikan sidik jari perangkat. Fungsi ini saat ini tidak digunakan dan dicadangkan untuk penggunaan masa depan. Integrasi platform
GetRandomNumberFunc Mengembalikan nomor acak antara 0 danRAND_MAX. Integrasi platform
GetSecurityTokenFunc Mengembalikan token keamanan yang diteruskan ke fungsi yang berkomunikasi dengan API backend. Implementasi dapat menentukan serialAccessKeyId,SecretKeyId, dan token sesi. Integrasi platform
LogPrintFunc Log baris teks dengan tag dan tingkat log. Untuk informasi selengkapnya, lihat PlatformUtils.h. Integrasi platform

Untuk fungsi integrasi platform di tabel sebelumnya, parameter terakhir adalah ServiceCallContext struktur, yang memiliki bidang berikut:

  • version: Versi struct.

  • callAfter: Waktu absolut setelah itu untuk memanggil fungsi.

  • timeout: Batas waktu operasi dalam 100 unit nanodetik.

  • customData: Nilai yang ditentukan pengguna untuk diteruskan kembali ke klien.

  • pAuthInfo: Kredensi untuk panggilan tersebut. Untuk informasi selengkapnya, lihat struktur (__AuthInfo) berikut.

Informasi otorisasi disediakan menggunakan __AuthInfo struktur, yang dapat berupa kredensyal serial atau token otentikasi khusus penyedia. Struktur ini memiliki bidang-bidang berikut:

  • version: Versi __AuthInfo struktur.

  • type: AUTH_INFO_TYPE Nilai yang menentukan jenis kredensyal (sertifikat atau token keamanan).

  • data: Sebuah array byte yang berisi informasi otentikasi.

  • size: Ukuran data parameter.

  • expiration: Kedaluwarsa kredensil dalam 100 unit nanodetik.

Implementasi callback untuk mencoba lagi streaming

Kinesis Video Producer SDK menyediakan status streaming melalui fungsi callback. Kami menyarankan Anda menerapkan mekanisme callback berikut untuk memulihkan dari masalah jaringan sesaat yang dihadapi selama streaming.

  • Streaming tekanan latensi callback - mekanisme callback ini akan dimulai saat SDK menemukan kondisi latensi aliran. Ini terjadi ketika ukuran buffer akumulasi lebih besar dari nilai MAX_LATENCY. Saat streaming dibuat, aplikasi streaming menetapkan MAX_LATENCY ke nilai default 60 detik. Implementasi khas untuk panggilan balik ini adalah mengatur ulang koneksi. Anda dapat menggunakan implementasi sampel di https://github.com/awslabs/ amazon-kinesis-video-streams - producer-sdk-cpp /blob/master/ kinesis-video-c-producer /src/source/ StreamLatencyStateMachine .c sesuai kebutuhan. Perhatikan bahwa tidak ada opsi untuk menyimpan frame yang tidak terkirim karena pemadaman jaringan ke penyimpanan sekunder untuk pengisian ulang.

  • Streaming staleness callback - callback ini akan dimulai ketika produsen dapat mengirim data ke layanan Amazon Kinesis Data Streams (uplink) tetapi tidak bisa mendapatkan pengakuan (buffer ACK) kembali tepat waktu (default adalah 60 detik). Bergantung pada pengaturan jaringan, panggilan balik tekanan latensi aliran atau callback staleness aliran, atau keduanya dapat dimulai. Mirip dengan implementasi coba ulang panggilan balik tekanan latensi aliran, implementasi tipikal adalah mengatur ulang koneksi dan memulai koneksi baru untuk streaming. Anda dapat menggunakan implementasi sampel di https://github.com/awslabs/ amazon-kinesis-video-streams ConnectionStaleStateMachine -producer-c/blob/master/src/source/ .c sesuai kebutuhan.

  • Panggilan balik kesalahan aliran - panggilan balik ini dimulai saat SDK mengalami batas waktu pada koneksi jaringan atau kesalahan lainnya selama panggilan ke panggilan layanan API KVS.

  • Panggilan balik bingkai yang dijatuhkan - panggilan balik ini dimulai ketika ukuran penyimpanan penuh baik karena kecepatan jaringan yang lambat atau kesalahan aliran. Jika kecepatan jaringan menghasilkan frame yang turun, Anda dapat meningkatkan ukuran penyimpanan, mengurangi ukuran bingkai video, atau kecepatan bingkai agar sesuai dengan kecepatan jaringan.