SDKCallback produser - Amazon Kinesis Video Streams

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

SDKCallback produser

Kelas dan metode di Produser Amazon Kinesis Video SDK Streams 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 API metode publik dan tanda tangan di lapisan C++.

  • StreamCallbackProviderdan ClientCallbackProvider — Objek ini mengekspos callback khusus aliran dan khusus klien, dan lapisan C++ dari mengekspos sisa callback. SDK Ini adalah pola callback yang disukai untuk berinteraksi dengan Produser. 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) dan berisi danPIC. StreamCallbackProvider ClientCallbackProvider

ClientCallbackProvider

ClientCallbackProviderObjek mengekspos fungsi callback tingkat klien. Rincian fungsi dijelaskan di ClientCallbacks struktur 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 aliran.

  • 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 PIC dipanggil 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(...);
Peristiwa
Fungsi Deskripsi Jenis
CreateDeviceFunc Saat ini tidak diterapkan di backend. Panggilan ini gagal saat dipanggil dari Java atau C++. Klien lain melakukan inisialisasi khusus platform. Backend API
CreateStreamFunc Disebut saat aliran dibuat. Backend API
DescribeStreamFunc Disebut saat DescribeStream dipanggil. Backend API
GetStreamingEndpointFunc Disebut saat GetStreamingEndpoint dipanggil. Backend API
GetStreamingTokenFunc Disebut saat GetStreamingToken dipanggil. Backend API
PutStreamFunc Disebut saat PutStream dipanggil. Backend API
TagResourceFunc Disebut saat TagResource dipanggil. Backend API
     
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 fragmen ACK (buffering, diterima, bertahan, dan kesalahan) 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. PICSecara 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 backendAPI. 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 kredensi (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 latency pressure callback - mekanisme callback ini akan dimulai ketika SDK menemukan kondisi latensi aliran. Ini terjadi ketika ukuran buffer akumulasi lebih besar dari LATENCY nilai MAX _. 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) kembali tepat waktu (ACKdefault 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-streamsConnectionStaleStateMachine-producer-c/blob/master/src/source/ .c sesuai kebutuhan.

  • Stream error callback - callback ini akan dimulai ketika SDK menemukan batas waktu pada koneksi jaringan atau kesalahan lainnya selama panggilan ke panggilan layanan. KVS API

  • 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.