Metrik Klien untuk WebRTC C SDK - Kinesis Video Streams

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

Metrik Klien untuk WebRTC C SDK

Aplikasi yang dibangun dengan Amazon Kinesis Video Streams dengan WebRTC terdiri dari berbagai bagian yang bergerak, termasuk jaringan, pensinyalan, pertukaran kandidat, koneksi rekan, dan pertukaran data. Kinesis Video Streams dengan WebRTC di C mendukung berbagai metrik sisi klien yang memungkinkan Anda memantau dan melacak kinerja dan penggunaan komponen ini dalam aplikasi Anda. Metrik yang didukung terbagi dalam dua kategori utama: metrik khusus yang didefinisikan secara khusus untuk implementasi sinyal dan jaringan Kinesis Video Streams, dan metrik spesifik protokol terkait media dan data yang berasal dari standar W3C. Perhatikan bahwa hanya sebagian dari metrik standar W3C yang saat ini didukung untuk Kinesis Video Streams dengan WebRTC di C.

Metrik Pensinyalan

Metrik pensinyalan dapat digunakan untuk memahami bagaimana klien pensinyalan berperilaku saat aplikasi Anda berjalan. Anda dapat menggunakan STATUS signalingClientGetMetrics (SIGNALING_CLIENT_HANDLE, PSignalingClientMetrics) API untuk mendapatkan metrik pensinyalan ini. Berikut adalah contoh pola penggunaan:

SIGNALING_CLIENT_HANDLE signalingClientHandle; SignalingClientMetrics signalingClientMetrics; STATUS retStatus = signalingClientGetMetrics(signalingClientHandle, &signalingClientMetrics); printf("Signaling client connection duration: %" PRIu64 " ms", (signalingClientMetrics.signalingClientStats.connectionDuration / HUNDREDS_OF_NANOS_IN_A_MILLISECOND));

Definisi signalingClientStats dapat ditemukan di Stats.h.

Metrik pensinyalan berikut saat ini didukung:

Metrik Deskripsi
cpApiCallLatensi Hitung latensi untuk panggilan API bidang kontrol. Perhitungan dilakukan dengan menggunakan Exponential Moving Average (EMA). Panggilan terkait meliputi: DescribeChannel, createChannel, dan deleteChannel. getChannelEndpoint
dpApiCallLatensi Hitung latensi untuk panggilan API bidang data. Perhitungan dilakukan dengan menggunakan Exponential Moving Average (EMA). Panggilan terkait meliputi: getIceConfig.
signalingClientUptime Ini menunjukkan waktu keberadaan objek klien. Setiap kali metrik ini dipanggil, nilai uptime terbaru dipancarkan.
KoneksiDurasi Jika koneksi dibuat, ini memancarkan durasi koneksi hidup. Lain, nilai 0 dipancarkan. Ini berbeda dengan memberi sinyal uptime klien karena, koneksi datang dan pergi, tetapi signalingClientUptime merupakan indikasi dari objek klien itu sendiri.
numberOfMessagesDikirim Nilai ini diperbarui ketika rekan mengirimkan penawaran, jawaban, atau kandidat ICE.
numberOfMessagesDiterima Tidak seperti numberOfMessages Terkirim, metrik ini diperbarui untuk semua jenis pesan pensinyalan. Jenis pesan pensinyalan tersedia diSIGNALING_MESSAGE_TYPE.
iceRefreshCount Ini bertambah saat getIceConfig dipanggil. Tingkat di mana ini dipanggil didasarkan pada TTL sebagai bagian dari konfigurasi ICE yang diterima. Setiap kali satu set konfigurasi ICE baru diterima, timer diatur untuk menyegarkan waktu berikutnya, mengingat validitas kredensil dalam konfigurasi dikurangi beberapa masa tenggang.
numberOfErrors Penghitung digunakan untuk melacak jumlah kesalahan yang dihasilkan dalam klien pensinyalan. Kesalahan yang dihasilkan saat mendapatkan konfigurasi ICE, mendapatkan status pensinyalan, melacak metrik pensinyalan, mengirim pesan pensinyalan, dan menghubungkan klien pensinyalan ke soket web untuk mengirim/menerima pesan dilacak.
numberOfRuntimeKesalahan Metrik mencakup kesalahan yang terjadi saat inti klien pensinyalan sedang berjalan. Skenario seperti kegagalan menyambung kembali, kegagalan penerimaan pesan, dan kesalahan penyegaran konfigurasi ICE dilacak di sini.
numberOfReconnects Metrik bertambah pada setiap penyambungan kembali. Ini adalah metrik yang berguna untuk memahami stabilitas koneksi jaringan dalam pengaturan.

Metrik Standar W3C Didukung untuk WebRTC C SDK

Subset dari metrik standar W3C saat ini didukung untuk aplikasi yang dibangun dengan WebRTC C SDK. Ini termasuk dalam kategori berikut:

  • Jaringan:

    • Kandidat Es: metrik ini memberikan informasi tentang kandidat lokal dan jarak jauh yang dipilih untuk pertukaran data antara rekan-rekan. Ini termasuk sumber server kandidat, alamat IP, jenis kandidat yang dipilih untuk komunikasi, dan prioritas kandidat. Metrik ini berguna sebagai laporan snapshot.

    • Ice Server: metrik ini untuk mengumpulkan informasi operasional tentang berbagai server ICE yang didukung. Ini berguna ketika mencoba memahami server yang terutama digunakan untuk pemeriksaan komunikasi dan konektivitas. Dalam beberapa kasus, juga berguna untuk memeriksa metrik ini jika pengumpulan kandidat gagal.

    • Pasangan Kandidat Es: metrik ini untuk memahami jumlah byte/paket yang dipertukarkan antara rekan-rekan dan juga pengukuran terkait waktu.

  • Media dan data:

    • RTP Inbound Jarak Jauh: metrik ini mewakili perspektif titik akhir dari aliran data yang dikirim oleh pengirim.

    • Outbound RTP: metrik ini memberikan informasi tentang aliran RTP keluar. Mereka juga bisa sangat berguna saat menganalisis streaming berombak atau streaming berhenti.

    • RTP masuk: metrik ini memberikan informasi tentang media yang masuk.

    • Metrik saluran data: metrik ini dapat membantu Anda menganalisis jumlah pesan dan byte yang dikirim dan diterima melalui saluran data. Metrik dapat ditarik dengan menggunakan ID saluran.

Anda dapat menggunakan STATUS rtcPeerConnectionGetMetrics (PRtcPeerConnection, PRtcRtpTransceiver, PRtcStats) API untuk mengumpulkan metrik yang terkait dengan ICE, RTP, dan saluran data. Berikut adalah contoh penggunaan:

RtcStats rtcStats; rtcStats.requestedTypeOfStats = RTC_STATS_TYPE_LOCAL_CANDIDATE; STATUS retStatus = rtcPeerConnectionGetMetrics (pRtcPeerConnection, NULL, &rtcStats); printf(“Local Candidate address: %s\n”, rtcStats.rtcStatsObject.localIceCandidateStats.address);

Berikut contoh lain yang menunjukkan pola penggunaan untuk mendapatkan statistik terkait transceiver:

RtcStats rtcStats; PRtcRtpTransceiver pVideoRtcRtpTransceiver; rtcStats.requestedTypeOfStats = RTC_STATS_TYPE_OUTBOUND_RTP; STATUS retStatus = rtcPeerConnectionGetMetrics (pRtcPeerConnection, pVideoRtcRtpTransceiver, &rtcStats); printf(“Number of packets discarded on send: %s\n”, rtcStats.rtcStatsObject.outboundRtpStreamStats.packetsDiscardedOnSend);

Dalam contoh di atas, jika argumen kedua untuk rtcPeerConnection GetMetrics () adalah NULL, data untuk transceiver pertama dalam daftar dikembalikan.

Definisi untuk rtcStatsObject dapat ditemukan di Stats.h. dan definisi untuk RtcStats dapat ditemukan di Include.h.

Contoh penggunaan API dan metrik yang berbeda dapat ditemukan di direktori sampel di repositori WebRTC C SDK dan di repositori demo Kinesis Video Stream.

Metrik standar W3C berikut saat ini didukung untuk aplikasi yang dibangun dengan WebRTC C SDK.

Jaringan

Metrik Server ICE:

Metrik Deskripsi
URL URL server STUN/TURN sedang dilacak
Pelabuhan Nomor port yang digunakan oleh klien
Protokol Protokol transportasi diekstrak dari URI ICE Server. Jika nilainya UDP, ICE mencoba TURN over UDP, jika tidak ICE mencoba TURN over TCP/TLS. Jika URI tidak mengandung transport, ICE mencoba TURN over UDP dan TCP/TLS. Dalam kasus STUN server, bidang ini kosong.
Total Permintaan Terkirim Nilai diperbarui untuk setiap permintaan kandidat srflx dan saat mengirim permintaan yang mengikat dari kandidat giliran.
Total Tanggapan Diterima Nilai diperbarui setiap kali respons pengikatan STUN diterima.
Total Waktu Perjalanan Pulang Pergi Nilai diperbarui setiap kali respons yang setara diterima untuk permintaan. Paket permintaan dilacak dalam peta hash dengan checksum sebagai kuncinya.

Statistik Kandidat ICE: Hanya informasi tentang kandidat yang dipilih (lokal dan jarak jauh) yang disertakan.

Metrik Deskripsi
alamat Ini menunjukkan alamat IP kandidat lokal dan jarak jauh.
pelabuhan Nomor port kandidat
protokol Protokol digunakan untuk mendapatkan kandidat. Nilai yang valid adalah UDP/TCP.
Jenis KandidateType Jenis kandidat yang dipilih - host, srflx atau relay.
prioritas Prioritas kandidat lokal dan jarak jauh yang dipilih.
url Sumber kandidat lokal yang dipilih. Ini memberikan indikasi apakah kandidat yang dipilih diterima dari server STUN atau server TURN.
RelayProtocol Jika server TURN digunakan untuk mendapatkan kandidat lokal yang dipilih, bidang ini menunjukkan protokol apa yang digunakan untuk mendapatkannya. Nilai yang valid adalah TCP/UDP.

Statistik Pasangan Calon ICE: Hanya informasi tentang pasangan calon yang dipilih yang disertakan.

Metrik Deskripsi
localCandidateId ID dari kandidat lokal yang dipilih dalam pasangan.
remoteCandidateId ID kandidat jarak jauh yang dipilih dalam pasangan.
negara Keadaan pasangan calon yang sedang diperiksa.
dinominasikan Setel ke TRUE karena statistik ditarik untuk pasangan kandidat yang dipilih.
PaketsEnt Jumlah paket yang dikirim Ini dihitung dalam . panggilan dalam writeFrame panggilan. Informasi ini juga dapat diekstraksi dari Statistik RTP keluar, tetapi karena pasangan kandidat Ice menyertakan lastPacketSent stempel waktu, mungkin berguna untuk menghitung jumlah paket yang dikirim antara dua titik waktu.
PaketDiterima Ini diperbarui setiap kali incomingDataHandler dipanggil.
olehTessent Ini dihitung iceAgentSendPacket() dalam writeFrame() panggilan. Ini berguna saat menghitung bit rate. Saat ini, ini juga termasuk header dan padding karena lapisan ICE tidak menyadari format paket RTP.
BytesDiterima Ini diperbarui setiap kali incomingDataHandler dipanggil. Saat ini, ini juga termasuk header dan padding karena lapisan ICE tidak menyadari format paket RTP.
lastPacketSentStempel waktu Ini diperbarui setiap kali paket dikirim. Ini dapat digunakan bersama dengan PacketsSent dan waktu mulai yang direkam dalam aplikasi ke laju transfer paket saat ini.
lastPacketReceivedStempel waktu Ini diperbarui saat menerima data diincomingDataHandler(). Ini dapat digunakan bersama dengan PacketsReceived untuk menyimpulkan tingkat penerimaan paket saat ini. Waktu mulai harus direkam di lapisan aplikasi di transceiverOnFrame() callback.
firstRequestTimestamp Terekam ketika permintaan pengikatan STUN pertama berhasil dikirim masuk. iceAgentSendStunPacket() Ini dapat digunakan bersama dengan lastRequestTimestamp dan requestsSent untuk menemukan waktu rata-rata antara permintaan pengikatan STUN.
lastRequestTimestamp Direkam setiap kali permintaan pengikatan STUN berhasil dikirim masuk. iceAgentSendStunPacket()
lastResponseTimestamp Direkam setiap kali respons pengikatan STUN diterima.
totalRoundTripWaktu Diperbarui saat respons yang mengikat diterima untuk permintaan. Permintaan dan respons dipetakan dalam tabel hash berdasarkan checksum.
currentRoundTripWaktu Waktu perjalanan pulang pergi terbaru diperbarui ketika tanggapan yang mengikat diterima untuk permintaan pada pasangan kandidat.
PermintaanDiterima Penghitung yang diperbarui pada setiap permintaan pengikatan STUN yang diterima.
PermintaanSent Penghitung yang diperbarui pada setiap permintaan pengikatan STUN yang dikirim masukiceAgentSendStunPacket().
TanggapanTerkirim Penghitung yang diperbarui pada setiap respons pengikatan STUN yang dikirim sebagai tanggapan atas permintaan yang mengikat dihandleStunPacket().
TanggapanDiterima Penghitung yang diperbarui pada setiap respons pengikatan STUN yang diterima dihandleStunPacket().
packetsDiscardedOnKirim Diperbarui saat pengiriman paket gagal. Dengan kata lain, ini diperbarui ketika iceUtilsSendData() gagal. Ini berguna untuk menentukan persentase paket yang dijatuhkan dalam durasi tertentu.
bytesDiscardedOnKirim Diperbarui saat pengiriman paket gagal. Dengan kata lain, ini diperbarui ketika iceUtilsSendData() gagal. Ini berguna saat menentukan persentase paket yang dijatuhkan dalam durasi tertentu. Perhatikan bahwa penghitung juga menyertakan header paket.

Media

Statistik RTP Keluar

Metrik Deskripsi
voiceActivityFlag Ini saat ini merupakan bagian dari RtcEncoderStats didefinisikan dalam Include.h. Bendera diatur ke TRUE jika paket audio terakhir berisi suara. Bendera saat ini tidak diatur dalam sampel.
PaketsEnt Ini menunjukkan jumlah total paket RTP yang dikirim untuk SSRC yang dipilih. Ini adalah bagian dari https://www.w3.org/TR/webrtc-stats/#sentrtpstats-dict * dan disertakan sebagai bagian dari statistik keluar. Ini bertambah setiap kali writeFrame () dipanggil.
olehTessent Jumlah total byte tidak termasuk header RTP dan padding yang dikirim. Ini diperbarui pada setiap panggilan WriteFrame.
EncoderImplementasi Ini diperbarui oleh lapisan aplikasi sebagai bagian dari RtcEncoderStats objek.
packetsDiscardedOnKirim Bidang ini diperbarui jika agen ICE gagal mengirim paket RTP terenkripsi karena alasan apa pun dalam panggilan. iceAgentSendPacket
bytesDiscardedOnKirim Bidang ini juga diperbarui jika agen ICE gagal mengirim paket RTP terenkripsi karena alasan apa pun dalam panggilan tersebut. iceAgentSendPacket
FrameSent Ini bertambah hanya jika jenis taktik aliran media adalah MEDIA_STREAM_TRACK_KIND_VIDEO.
hugeFramesSent Penghitung ini diperbarui untuk bingkai yang 2,5 kali ukuran rata-rata bingkai. Ukuran frame diperoleh dengan menghitung fps (berdasarkan waktu hitungan frame terakhir yang diketahui dan jumlah frame yang dikodekan dalam interval waktu) dan menggunakan targetBitRate yang RtcEncoderStats ditetapkan oleh aplikasi.
FrameDisandikan Penghitung ini diperbarui hanya untuk trek video setelah pengkodean frame berhasil. Ini diperbarui pada setiap panggilan WriteFrame.
keyFramesEncoded Penghitung ini diperbarui hanya untuk trek video setelah berhasil menyandikan bingkai kunci. Ini diperbarui pada setiap panggilan WriteFrame.
framesDiscardedOnKirim Ini diperbarui ketika pengiriman bingkai gagal karena kegagalan iceAgentSendPacket panggilan. Sebuah frame terdiri dari sekelompok paket dan saat ini, framesDiscardedOn Send gagal jika ada paket yang dibuang saat mengirim karena kesalahan.
FrameWidth Ini idealnya mewakili lebar bingkai dari bingkai yang dikodekan terakhir. Saat ini, ini diatur ke nilai oleh aplikasi sebagai bagian dari RtcEncoderStats * * dan tidak terlalu penting.
FrameHeight Ini idealnya mewakili ketinggian bingkai dari bingkai yang dikodekan terakhir. Saat ini, ini diatur ke nilai oleh aplikasi sebagai bagian dari RtcEncoderStats dan tidak terlalu penting.
frameBitDepth Ini mewakili kedalaman bit per lebar piksel dari bingkai yang dikodekan terakhir. Saat ini, ini diatur oleh aplikasi sebagai bagian dari RtcEncoderStats dan diterjemahkan ke dalam statistik keluar.
NackCount Nilai ini diperbarui setiap kali NACK diterima pada paket RTP dan upaya ulang untuk mengirim paket dilakukan. Tumpukan mendukung transmisi ulang paket saat menerima NACK.
FirCount Nilai diperbarui saat menerima paket FIR (onRtcpPacket-> onrtcpfirpacket). Ini menunjukkan seberapa sering aliran tertinggal dan harus melewati bingkai untuk mengejar ketinggalan. Paket FIR saat ini tidak diterjemahkan untuk mengekstrak bidang, jadi, meskipun hitungan diatur, tidak ada tindakan yang diambil.
PliCount Nilai diperbarui saat menerima paket PLI (-> onrtcpplipacket)onRtcpPacket. Ini menunjukkan bahwa sejumlah data video yang dikodekan telah hilang untuk satu atau lebih frame.
SliCount Nilai diperbarui saat menerima paket SLI (-> onRTCPSlipacket)onRtcpPacket. Ini menunjukkan seberapa sering kehilangan paket mempengaruhi satu frame.
qualityLimitationResolutionPerubahan Saat ini, tumpukan mendukung metrik ini, namun, lebar dan tinggi bingkai tidak dipantau untuk setiap bingkai yang dikodekan.
lastPacketSentStempel waktu Stempel waktu di mana paket terakhir dikirim. Ini diperbarui pada setiap panggilan WriteFrame.
headerBytesSent Jumlah total header RTP dan byte padding yang dikirim untuk SSRC ini tidak termasuk muatan RTP yang sebenarnya.
bytesDiscardedOnKirim Ini diperbarui ketika pengiriman bingkai gagal karena kegagalan panggilan iceAgentSend paket. Sebuah frame terdiri dari sekelompok paket, yang pada gilirannya terdiri dari byte dan saat ini, bytesDiscardedOn Send gagal jika ada paket yang dibuang saat mengirim karena kesalahan.
retransmittedPacketsSent Jumlah paket yang ditransmisikan kembali pada penerimaan PLI/SLI/NACK. Saat ini, tumpukan hanya menghitung paket resent NACK karena transmisi ulang berbasis PLI dan SLI tidak didukung.
retransmittedBytesSent Jumlah byte yang ditransmisikan kembali pada penerimaan PLI/SLI/NACK. Saat ini, tumpukan hanya menghitung byte resent dari NACK karena transmisi ulang berbasis PLI dan SLI tidak didukung.
TargetBitrate Ini diatur dalam tingkat aplikasi.
totalEncodedBytesTarget Ini ditingkatkan dengan ukuran frame target dalam byte setiap kali frame dikodekan. Ini diperbarui menggunakan parameter ukuran dalam struktur Frame.
framesPerSecond Ini dihitung berdasarkan waktu yang direkam untuk bingkai terenkode terakhir yang diketahui dan jumlah frame yang dikirim dalam satu detik.
totalEncodeTime Ini diatur ke nilai arbitrer dalam aplikasi dan diterjemahkan ke statistik keluar secara internal.
totalPacketSendKeterlambatan Ini saat ini diatur ke 0 karena iceAgentSend Packet mengirim paket segera.

Statistik RTP masuk jarak jauh:

Metrik Deskripsi
roundTripTime Nilai diekstraksi dari laporan penerima RTCP saat menerima paket RTCP tipe 201 (laporan penerima). Laporan tersebut terdiri dari rincian seperti laporan pengirim terakhir dan penundaan sejak laporan pengirim terakhir untuk menghitung waktu pulang pergi. Laporan pengirim dihasilkan kira-kira setiap 200 milidetik yang terdiri dari informasi seperti jumlah paket yang dikirim dan byte yang dikirim yang diekstraksi dari statistik keluar.
totalRoundTripWaktu Jumlah waktu perjalanan pulang pergi dihitung
FraksiHilang Merupakan fraksi paket RTP yang hilang untuk SSRC sejak pengirim/penerima ReporFractionLost sebelumnya dikirim.
LaporanDiterima Diperbarui setiap kali paket jenis laporan penerima diterima.
roundTripTimePengukuran Menunjukkan jumlah total laporan yang diterima untuk SSRC yang berisi waktu pulang pergi yang valid. Namun, saat ini nilai ini bertambah terlepas sehingga artinya sama dengan ReportsReceived.

Statistik RTP Masuk:

Metrik Deskripsi
PaketDiterima Penghitung diperbarui ketika paket diterima untuk SSRC tertentu.
jitter Metrik ini menunjukkan paket Jitter yang diukur dalam hitungan detik untuk SSRC tertentu.
jitterBufferDelay Metrik ini menunjukkan jumlah waktu yang dihabiskan oleh setiap paket dalam buffer jitter.
jitterBufferEmittedHitung Jumlah total sampel audio atau bingkai video yang keluar dari buffer jitter.
PaketDibuang Penghitung diperbarui ketika buffer Jitter penuh dan paket tidak dapat didorong ke dalamnya. Ini dapat digunakan untuk menghitung persentase paket yang dibuang dalam durasi tetap.
BingkaiDijatuhkan Nilai ini diperbarui saat onFrameDroppedFunc() dipanggil.
lastPacketReceivedStempel waktu Merupakan stempel waktu di mana paket terakhir diterima untuk SSRC ini.
headerBytesReceived Penghitung diperbarui saat menerima paket RTP.
BytesDiterima Jumlah byte yang diterima. Ini tidak termasuk byte header. Metrik ini dapat digunakan untuk menghitung bit rate yang masuk.
packetsFailedDecryption Ini bertambah ketika dekripsi paket SRTP gagal.

Saluran Data

Metrik Saluran Data

Metrik Deskripsi
label Label adalah nama saluran data yang sedang diperiksa.
protokol Karena tumpukan kami menggunakan SCTP, protokol diatur ke SCTP konstan.
dataChannelIdentifier Pengidentifikasi genap atau ganjil digunakan untuk mengidentifikasi saluran data secara unik. Ini diperbarui ke nilai ganjil jika SDK adalah penawaran dan nilai genap jika SDK adalah penjawab.
negara Status saluran data saat statistik ditanyakan. Saat ini, dua status yang didukung adalah RTC_DATA_CHANNEL_STATE_CONNECTING (saat saluran dibuat) dan RTC_DATA_CHANNEL_STATE_OPEN (Set dalam acara onOpen ()).
PesanSent Penghitung diperbarui saat SDK mengirim pesan melalui saluran data.
olehTessent Penghitung diperbarui dengan byte dalam pesan yang dikirim. Ini dapat digunakan untuk memahami berapa banyak byte yang tidak dikirim karena kegagalan, yaitu, untuk memahami persentase byte yang dikirim.
PesanDiterima Metrik bertambah dalam onMessage() callback.
BytesDiterima Metrik dihasilkan dalam onMessage() callback.