本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
WebRTC C SDK 的用戶端度量
使用具有 WebRTC 的 Amazon Kinesis Video Streams 建置的應用程式由各種移動零件組成,包括聯網、信號、候選人交換、對等連線和資料交換。使用 C 語言 WebRTC 的 Kinesis Video Streams 支援各種用戶端指標,可讓您監控並追蹤這些元件在應用程式中的效能和使用情況。支援的指標分為兩大類:專為 Kinesis Video Streams 實作信號和網路而定義的自訂量度,以及衍生自 W3C 標準的媒體和資料相關通訊協定特定度量。
訊號指標
信號指標可用於了解應用程序運行時信令客戶端的行為。您可以使用 STATUS signalingClientGetMetrics
(SIGNALING_CLIENT_HANDLE, PSignalingClientMetrics)
API 取得這些訊號指標。這是一個示例使用模式:
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));
的定義signalingClientStats
可以在 Stats.
目前支援下列訊號指標:
指標 | 描述 |
---|---|
cpApiCall延遲 | 計算控制平面 API 呼叫的延遲。使用指數移動平均線 (EMA) 進行計算。相關的呼叫包括:描述頻道、CreaTech 通道和代理通道。 getChannelEndpoint |
dpApiCall延遲 | 計算資料平面 API 呼叫的延遲。使用指數移動平均線 (EMA) 進行計算。相關聯的呼叫包括: getIceConfig。 |
signalingClientUptime | 這表示客戶端對象存在的時間。每次調用此指標時,都會發出最新的正常運行時間值。 |
連線持續時間 | 如果已建立連線,則會發出連線存在的持續時間。否則,0 的值被發射。這與信令客戶端正常運行時間不同,因為連接來來去去,但 signalingClientUptime 表示客戶端對象本身。 |
numberOfMessages已傳送 | 當對等傳送選件、答案或 ICE 候選項時,會更新此值。 |
numberOfMessages已收到 | 與 Send 不同,此量度 numberOfMessages會針對任何類型的信號訊息進行更新。中SIGNALING_MESSAGE_TYPE 提供信令訊息的類型。 |
iceRefreshCount | 這在調用時 getIceConfig 遞增。呼叫此速率是以接收之 ICE 組態的一部分 TTL 為基礎。每次接收到一組新的 ICE 設定時,計時器就會設定為下次重新整理,考慮到組態中認證的有效性減去一些寬限期。 |
numberOfErrors | 計數器用於跟踪信令客戶端中生成的錯誤的數量。追蹤取得 ICE 組態、取得訊號狀態、追蹤訊號指標、傳送訊號訊息,以及將信號用戶端連接至 Web 通訊端以傳送/接收訊息時產生的錯誤。 |
numberOfRuntime錯誤 | 此測量結果包括信令從屬端核心執行時所發生的錯誤。這裡會追蹤重新連線失敗、訊息接收失敗和 ICE 組態重新整理錯誤等案例。 |
numberOfReconnects | 每次重新連線時,量度都會遞增。這是了解設置中網絡連接穩定性的有用指標。 |
支援的 WebRTC 3C 標準度量
目前,使用 WebRTC C SDK 構建的應用程序支持 W3C
-
網路:
-
Ice Queate: 這些量度提供有關所選本機和遠端候
選人的資訊,以便在對等之間進行資料交換。這包括候選人的伺服器來源、IP 位址、為通訊選取的候選人類型,以及候選優先順序。這些量度可做為快照報表。 -
Ice Server
:這些指標用於收集有關支持的不同 ICE 服務器的操作信息。這在嘗試了解主要用於通訊和連線檢查的伺服器時非常有用。在某些情況下,如果候選人的收集失敗,檢查這些指標也很有用。 -
冰候選對
:這些指標用於了解對等之間正在交換的字節/數據包的數量以及與時間有關的測量。
-
-
媒體和數據:
您可以使用 STATUS rtcPeerConnectionGetMetrics (PRtcPeerConnection,
PRtcRtpTransceiver, PRtcStats)
API 收集與 ICE、RTP 和資料通道相關的指標。這是一個用法示例:
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);
以下是另一個示例,顯示了獲取收發器相關統計信息的使用模式:
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);
在上面的例子中,如果第二個參數 to rtcPeerConnection GetMetrics () 是 NULL,則返回列表中第一個收發器的數據。
的定義 rtcStatsObject 可以在 Stats.h
您可以在 WebRTC C SDK 存放庫的範例目錄和 Kinesis 影片串流
目前,使用 WebRTC C SDK 構建的應用程序支持以下 W3C
聯網
ICE 伺服器度量:
指標 | 描述 |
---|---|
URL | 正在追蹤的 STUN/Turn 伺服器的網址 |
連接埠 | 用戶端使用的連接埠號碼 |
通訊協定 | 從 ICE 伺服器 URI 擷取的傳輸通訊協定。如果該值是 UDP,ICE 嘗試翻轉 UDP,否則 ICE 嘗試翻轉 TCP/TLS。如果 URI 不包含傳輸,ICE 會嘗試翻轉 UDP 和 TCP/TLS。在 STUN 伺服器的情況下,此欄位是空的。 |
傳送的要求總數 | 該值被更新為每個 srflx 候選請求,同時從回合候選發送綁定請求。 |
收到的回覆總數 | 每次收到 STUN 繫結回應時,都會更新該值。 |
總往返時間 | 每次收到請求的等效回應時,都會更新該值。請求數據包在哈希映射中跟踪,並將校驗和作為密鑰。 |
ICE 候選人統計:僅包括有關所選候選人(本地和遠程)的信息。
指標 | 描述 |
---|---|
address | 這表示本地和遠程候選人的 IP 地址。 |
port | 候選人的連接埠號碼 |
protocol | 用於獲取候選人的協議。有效值是 UDP/TCP。 |
候選人類型 | 選擇的候選人類型-主機,srflx 或繼電器。 |
priority | 所選本機和遠端候選人的優先順序。 |
網址 | 所選當地候選人的來源。這表示選擇的候選人是否從 STUN 服務器或 TURN 服務器接收到。 |
中繼協議 | 如果使用 TURN 伺服器取得選取的本機候選項目,此欄位會指出使用何種通訊協定來取得它。有效值為 TCP/UDP。 |
ICE 候選對統計數據:僅包括有關所選候選對的信息。
指標 | 描述 |
---|---|
localCandidateId | 配對中所選本地候選人的 ID。 |
remoteCandidateId | 配對中所選遠端候選項的 ID。 |
state | 正在檢查的候選人對的狀態。 |
提名 | 設置為 TRUE,因為統計數據被提取選定的候選對。 |
數据包已發送 | 傳送的封包數目。這是在呼叫中的. 呼writeFrame 叫中計算的。此信息也可以從傳出的 RTP 統計數據中提取,但是由於 Ice 候選對包含時間 lastPacketSent 戳,因此計算兩個時間點之間發送的數據包數可能很有用。 |
已接收封包 | 每次調用 incomingDataHandler 時都會更新此選項。 |
字節發送 | 這是在writeFrame() 呼叫iceAgentSendPacket() 中計算的。這在計算比特率時非常有用。目前,這還包括標題和填充,因為 ICE 層對 RTP 數據包格式沒有影響。 |
字節接收 | 每次調用 incomingDataHandler 時都會更新此選項。目前,這還包括標題和填充,因為 ICE 層對 RTP 數據包格式沒有影響。 |
lastPacketSent時間戳 | 每次傳送封包時都會更新此項目。這可以與 PackketsSend 和應用程序中記錄的開始時間結合使用到當前數據包的傳輸速率。 |
lastPacketReceived時間戳 | 這會在中接收資料時更新incomingDataHandler() 。這可以與 PackketsReceiver 一起使用,以推導出當前的數據包接收速率。開始時間必須記錄在transceiverOnFrame() 回調中的應用程序層。 |
firstRequestTimestamp | 在iceAgentSendStunPacket() 成功傳送第一個 STUN 繫結要求時記錄。這可以與 lastRequestTimestamp 和請求一起使用,以查找 STUN 綁定請求之間的平均時間。 |
lastRequestTimestamp | 每次成功傳送 STUN 繫結要求時都會記錄。iceAgentSendStunPacket() |
lastResponseTimestamp | 每次收到 STUN 綁定響應時都會記錄。 |
totalRoundTrip時間 | 收到請求的綁定響應時更新。請求和響應被映射到基於校驗和哈希表。 |
currentRoundTrip時間 | 最近的往返時間在收到候選人對的請求的綁定響應時更新。 |
已收到的要求 | 針對每個收到的 STUN 繫結要求進行更新的計數器。 |
要求已傳送 | 每個傳送的 STUN 繫結要求都會更新的計數器。iceAgentSendStunPacket() |
回應 | 針對中的繫結要求而傳送的每個 STUN 繫結回應上更新的計數器。handleStunPacket() |
收到的回應 | 在handleStunPacket() 中收到的每個 STUN 綁定響應上更新的計數器。 |
packetsDiscardedOn發送 | 封包傳送失敗時更新。換句話說,這會在iceUtilsSendData() 失敗時更新。這可以確定在特定持續時間內丟棄的數據包百分比。 |
bytesDiscardedOn發送 | 封包傳送失敗時更新。換句話說,這會在iceUtilsSendData() 失敗時更新。這在判斷特定持續時間內丟棄的封包百分比時非常有用。請注意,計數器也包含封包的標頭。 |
媒體
出埠 RTP 統計資料
指標 | 描述 |
---|---|
voiceActivityFlag | 這是目前在包含 .h 中RtcEncoderStats 定義的一部分。如果最後一個音訊封包含語音,則旗標會設定為 TRUE。範例中目前未設定旗標。 |
數据包已發送 | 這表示為所選 SSRC 送出的 RTP 封包總數。這是 https://www.w3.org/TR/webrtc-stats/#sentrtpstats-dict 的一部分 * |
字節發送 | 傳送的位元組總數 (不包括 RTP 標頭和填充)。這在每個寫幀調用上都會更新。 |
編碼器實作 | 這是由應用層作為 RtcEncoderStats 對象的一部分更新。 |
packetsDiscardedOn發送 | 如果 ICE 代理程式因為iceAgentSendPacket 呼叫中的任何原因而無法傳送加密的 RTP 封包,則會更新此欄位。 |
bytesDiscardedOn發送 | 如果 ICE 代理程式因為iceAgentSendPacket 呼叫中的任何原因無法傳送加密的 RTP 封包,也會更新此欄位。 |
框架 | 只有當媒體流粘性類型為媒體流追踪 _ 視頻時,這才會遞增。 |
hugeFramesSent | 此計數器會針對影格平均大小 2.5 倍的影格進行更新。幀的大小是通過計算 fps(基於最後一個已知的幀計數時間和以時間間隔編碼的幀數)並使用應用程序 RtcEncoderStats 設置的 targetBtBitt 獲得。 |
框架編碼 | 此計數器僅在幀的編碼成功後更新視頻軌道。它在每個寫幀調用更新。 |
keyFramesEncoded | 成功編碼關鍵影格後,此計數器僅針對視訊軌道進行更新。它在每個寫幀調用更新。 |
framesDiscardedOn發送 | 當幀發送由於iceAgentSendPacket 調用失敗而失敗時,這將更新。一個框架由一組數據包組成,當前, framesDiscardedOn如果發送因為錯誤而丟棄任何數據包,則發送失敗。 |
框架寬度 | 理想情況下,這代表了最後一個編碼幀的幀寬度。目前,這是由應用程序設置為一個值作為 RtcEncoderStats * 的一部分,並沒有太大的意義。 |
框架高度 | 這理想地代表了最後一個編碼幀的幀的高度。目前,這是由應用程序設置為一個值的一部分, RtcEncoderStats 並沒有太大的意義。 |
frameBitDepth | 這代表了最後一個編碼幀的每像素寬度的位深度。目前,這是由應用程序設置的一部分, RtcEncoderStats 並轉換為出站統計信息。 |
納克伯爵 | 每次在 RTP 封包上收到 NACK 並重新嘗試傳送封包時,都會更新此值。堆棧支持在接收 NACK 時重新傳輸數據包。 |
第一次計數 | 接收 FIR 封包onRtcpPacket時會更新該值 (-> 安裝封包)。它指示流落後的頻率,並且必須跳過幀才能 catch。FIR 封包目前尚未解碼來擷取欄位,因此,即使已設定計數,也不會採取任何動作。 |
普利康 | 接收 PLI 封包時會更新該值 (onRtcpPacket-> 安裝封包)。它表示一個或多個幀丟失了一定數量的編碼視頻數據。 |
切片計算機 | 此值會在接收 SLI 封包時更新 (onRtcpPacket-> 連結封包)。它指出封包遺失影響單一幀的頻率。 |
qualityLimitationResolution變更 | 目前,堆棧支持此指標,但是,不會監視每個編碼幀的幀寬度和高度。 |
lastPacketSent時間戳 | 最後一個封包傳送時的時間戳記。它在每個寫幀調用更新。 |
headerBytesSent | 針對此 SSRC 傳送的 RTP 標頭和填補位元組總數 (不包括實際的 RTP 裝載)。 |
bytesDiscardedOn發送 | 當訊框傳送因 iceAgentSend封包呼叫失敗而失敗時,會更新此選項。一個幀由一組數據包組成,這反過來又由字節組成,當前,如果任何數據包被丟棄,而發 bytesDiscardedOn送失敗,而發送,因為錯誤。 |
retransmittedPacketsSent | 接收 PLI/SLI/NACK 時重新傳輸的封包數目。目前,堆疊僅計算 NACK 重新傳送的封包,因為不支援以 PLI 和 SLI 為基礎的重新傳輸。 |
retransmittedBytesSent | 接收 PLI/SLI/NACK 時重新傳輸的位元組數。目前,堆棧僅計算 NACK 重新發送的字節,因為不支持基於 PLI 和 SLI 的重傳。 |
目標位元速率 | 這是在應用程序級別中設置的。 |
totalEncodedBytes目標 | 每次編碼幀時,這會增加目標幀大小(以字節為單位)。這是使用框架結構中的大小參數進行更新。 |
framesPerSecond | 這是根據上次已知編碼影格所記錄的時間,以及在一秒內傳送的影格數目來計算。 |
totalEncodeTime | 這會在應用程式中設定為任意值,並在內部轉換為輸出統計資料。 |
totalPacketSend延遲 | 由於數據包立即發送 iceAgentSend數據包,因此當前設置為 0。 |
遠端入埠 RTP 統計資料:
指標 | 描述 |
---|---|
roundTripTime | 該值是在接收 RTCP 數據包類型 201(接收器報告)時從 RTCP 接收器報告中提取的。該報告包括上次發件人報告和自上次發送人報告以來計算往返時間的延遲。寄件者報告大約每 200 毫秒會產生一次,其中包含資訊,例如傳送的封包數目和從輸出統計資料擷取的傳送位元組。 |
totalRoundTrip時間 | 計算的往返時間總和 |
分數丟失 | 代表自上一個傳送者/接收器 Report Lost 傳送以來,SSRC 遺失的 RTP 封包比例。 |
報告收到 | 每次收到接收者報告類型封包時更新。 |
roundTripTime測量 | 指出 SSRC 收到的報告總數,其中包含有效的往返時間。但是,目前,無論如何,此值都會增加,因此它的含義與 ReportsReceived 相同。 |
入站 RTP 統計資料:
指標 | 描述 |
---|---|
已接收封包 | 當收到特定 SSRC 的封包時,計數器會更新。 |
抖動 | 此測量結果表示針對特定 SSRC 測量的封包抖動 (以秒為單位)。 |
jitterBufferDelay | 此測量結果代表抖動緩衝區中每個封包使用的時間總和。 |
jitterBufferEmitted伯爵 | 從抖動緩衝區中傳出的音訊樣本或視訊影格總數。 |
丟棄的包 | 當抖動緩衝區已滿且封包無法推入其中時,計數器會更新。這可用來計算固定持續時間內捨棄的封包百分比。 |
框架掉落 | 呼叫時會更新此值。onFrameDroppedFunc() |
lastPacketReceived時間戳 | 代表接收此 SSRC 最後一個封包的時間戳記。 |
headerBytesReceived | 計數器會在接收 RTP 封包時更新。 |
字節接收 | 接收的位元組數。這不包括標頭字節。此指標可用於計算傳入的位元速率。 |
packetsFailedDecryption | 當 SRTP 封包解密失敗時,這會遞增。 |
資料通道
資料通道量度
指標 | 描述 |
---|---|
標籤 | 標籤是被檢查的數據通道的名稱。 |
protocol | 由於我們的堆棧使用 SCTP,該協議被設置為常量 SCTP。 |
dataChannelIdentifier | 用於唯一識別資料通道的偶數或奇數識別碼。如果 SDK 是提供者,則此值會更新為奇數值,如果 SDK 是回答者,則會更新為偶數值。 |
state | 查詢統計資料時的資料通道狀態。目前,支持的兩種狀態是 RTC _ 數據 _ 通道 _ 狀態 _ 連接(當創建通道時)和 RTC_DATA_ 通道 _ 狀態 _ 打開(在 onOpen()事件中設置)。 |
訊息發送 | SDK 透過資料通道傳送訊息時,計數器會更新。 |
字節發送 | 計數器會更新為傳送出的訊息中的位元組。這可以用來了解由於失敗而未發送多少字節,即了解發送的字節的百分比。 |
訊息已收到 | 測量結果會在onMessage() 回呼中遞增。 |
字節接收 | 測量結果會在onMessage() 回呼中產生。 |