媒體品質統計資料
為了協助您進一步瞭解使用 Azure 通訊服務 的 VoIP 和視訊通話中的媒體品質,有一項稱為媒體品質統計數據的功能。 它可用來檢查傳入和傳出通話計量的低階音訊、視訊和螢幕共用品質計量。
進行中通話的媒體品質統計資料
重要
從 SDK 1.20.1 版開始,SDK 中的媒體品質統計資料有介面更新
媒體質量統計資料是核心 Call
API 的擴充功能。 您必須先取得 mediaStatsFeature
API 物件:
const mediaStatsFeature = call.feature(Features.MediaStats);
若要接收媒體統計數據數據,您可以訂閱 sampleReported
事件或 summaryReported
事件。
事件 sampleReported
會每秒觸發一次。 它適合作為 UI 顯示或您自己的資料管線的資料來源。
此 summaryReported
事件包含間隔內數據的匯總值,當您只需要摘要時,這非常有用。
如果您想要控制 summaryReported
事件的間隔,您必須定義類型為 MediaStatsCollectorOptions
的 mediaStatsCollectorOptions
。 否則,此 SDK 會使用預設值。
const mediaStatsCollectorOptions: SDK.MediaStatsCollectorOptions = {
aggregationInterval: 10,
dataPointsPerAggregation: 6
};
const mediaStatsCollector = mediaStatsFeature.createCollector(mediaStatsSubscriptionOptions);
mediaStatsCollector.on('sampleReported', (sample) => {
console.log('media stats sample', sample);
});
mediaStatsCollector.on('summaryReported', (summary) => {
console.log('media stats summary', summary);
});
如果您不需要使用媒體統計數據收集器,您可以呼叫 dispose
的 mediaStatsCollector
方法。
mediaStatsCollector.dispose();
每次呼叫結束時,您都不需要呼叫 dispose
方法 mediaStatsCollector
,因為呼叫結束時會在內部回收收集器。
MediaStatsCollectorOptions
MediaStatsCollectorOptions
是選擇性的,且 MediaStatsCollectorOptions
中有兩個選擇性欄位。
aggregationInterval
是彙總統計資料的間隔,以秒為單位。 預設值為 10。dataPointsPerAggregation
會定義每個彙總事件有多少個資料點。 預設值為 6。
這兩個值分別決定 SDK 發出 summaryReported
事件的頻率,以及報告中包含的彙總資料點數目。
summaryReported
事件每 aggregationInterval * dataPointsPerAggregation
秒引發一次。
例如,如果您設定下列值:
aggregationInterval
= 1dataPointsPerAggregation
= 60
summaryReported
事件會每 60 秒引發一次,且每個記錄的統計資料會有 60 個唯一單位。
如果您設定下列值:
aggregatinInterval
= 60dataPointsPerAggregation
= 1
事件 summaryReported
會每 60 秒引發一次,並針對每個記錄的統計數據包含一個 (1) 個唯一單位。
最佳作法
如果您想要收集資料以進行離線檢查,建議您收集資料,並在通話結束後將其傳送至管線擷取。 如果在通話期間傳輸資料,可能會使用維持 Azure 通訊服務通話所需的網際網路頻寬 (尤其是在可用頻寬較低時)。
sampleReported
在事件或summaryReported
事件中,媒體統計數據數據不只是簡單的索引鍵/值對應。
以下是事件所 sampleReported
報告事件數據的型別宣告。
export interface MediaStatsReportSample {
audio: {
send: OutgoingAudioMediaStats<number, string>[];
receive: IncomingAudioMediaStats<number, string>[];
};
video: {
send: OutgoingVideoMediaStats<number, string>[];
receive: IncomingVideoMediaStats<number, string>[];
};
screenShare: {
send: OutgoingScreenShareMediaStats<number, string>[];
receive: IncomingScreenShareMediaStats<number, string>[];
};
transports: TransportMediaStats<number>[];
}
事件資料會提供通話中每個媒體串流的統計資料,包括傳送和接收方向。
建議您使用 console.log
來列印事件,以觀察其版面配置和值變更,因此您可以根據使用案例找到適當的方式來顯示或處理數據。
音訊傳送計量
度量名稱 | 描述 | 註解 |
---|---|---|
id |
統計資料識別碼 | 用來識別各個事件的統計資料,尤其是在事件中有多個具有相同媒體類型和方向的統計資料時。 |
codecName |
轉碼器名稱 | OPUS、G722。 |
bitrate |
音訊傳送位元速率 (每秒位元數) | 一般值為 24 Kbps 以內 (通常為 36-128 Kbps)。 |
jitterInMs |
封包抖動 (毫秒) | 越低越好。 |
packets |
已傳送的封包總數。 | |
packetsPerSecond |
封包速率 (每秒封包數) | |
packetsLost |
從遠端報告的遺失封包總數。 | |
packetsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
rttInMs |
來回時間 (毫秒) | 越低越好。 從 RTCP 接收者報告計算。 建議使用 200 毫秒或更短的來回時間。 |
audioInputLevel |
麥克風的音訊音量大小 | 值範圍為 0 到 65536。 值為 0 表示無聲。 |
transportId |
傳輸識別碼 | 用來關聯傳輸中的統計資料。 |
音訊接收計量
jitterBufferDelayInMs
在早於 1.20.1 的 SDK 版本中為 jitterBufferInMs
。
度量名稱 | 描述 | 註解 |
---|---|---|
id |
統計資料識別碼 | 用來識別各個事件的統計資料,尤其是在事件中有多個具有相同媒體類型和方向的統計資料時。 |
codecName |
轉碼器名稱 | OPUS、G722。 |
bitrate |
音訊接收位元速率 (每秒位元數) | 一般值為 24 Kbps 以內 (通常為 36-128 Kbps)。 |
jitterInMs |
封包抖動 (毫秒) | 越低越好。 |
packets |
已接收的封包總數。 | |
packetsPerSecond |
封包速率 (每秒封包數) | |
packetsLost |
遺失封包總數。 | |
packetsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
jitterBufferDelayInMs |
抖動緩衝區 (毫秒) | 越低越好。 抖動緩衝區用於平滑播放。 此值是指樣本的封包停留在抖動緩衝區中的時間長度。 |
audioOutputLevel |
接收串流的音訊音量大小 | 值範圍為 0 到 65536。 值為 0 表示無聲。 |
healedRatio |
隱藏的樣本 (silentConcealedSamples 除外) 與已接收樣本總計的比率 |
僅供參考。 |
transportId |
傳輸識別碼 | 用來關聯傳輸中的統計資料。 |
視訊傳送計量
從 SDK 1.20.1 版開始,影片傳送計量包含 altLayouts
計量欄位,可讓您更清楚地呈現模擬串流統計數據。
度量名稱 | 描述 | 註解 |
---|---|---|
id |
統計資料識別碼 | 用來識別各個事件的統計資料,尤其是在事件中有多個具有相同媒體類型和方向的統計資料時。 |
codecName |
轉碼器名稱 | H264、VP8、VP9。 |
bitrate |
視訊傳送位元速率 (每秒位元數) | |
jitterInMs |
封包抖動 (毫秒) | 越低越好。 |
packets |
已傳送的封包總數。 | |
packetsPerSecond |
封包速率 (每秒封包數) | |
packetsLost |
從遠端報告的遺失封包總數。 | |
packetsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
rttInMs |
來回時間 (毫秒) | 越低越好。 從 RTCP 接收者報告計算。 建議使用 200 毫秒或更短的來回時間。 |
frameRateInput |
源自視訊來源的畫面播放速率 (每秒畫面格數) | |
frameWidthInput |
源自視訊來源的最後一個畫面格的畫面格寬度 (像素) | |
frameHeightInput |
源自視訊來源的最後一個畫面格的畫面格高度 (像素) | |
framesEncoded |
為 RTP 串流成功編碼的畫面格數。 | |
frameRateEncoded |
為 RTP 串流成功編碼的畫面播放速率 (每秒畫面格數) | |
framesSent |
在 RTP 串流上傳送的畫面格數 | |
frameRateSent |
在 RTP 串流上傳送的畫面播放速率 (每秒畫面格數) | |
frameWidthSent |
編碼畫面格的畫面格寬度 (像素) | |
frameHeightSent |
編碼畫面格的畫面格高度 (像素) | |
keyFramesEncoded |
為 RTP 串流成功編碼的主要畫面格 | |
transportId |
傳輸識別碼 | 用來關聯傳輸中的統計資料。 |
altLayouts |
同步廣播串流 | altLayouts 包含與視訊傳送相同的計量 |
視訊接收計量
jitterBufferDelayInMs
在早於 1.20.1 的 SDK 版本中為 jitterBufferInMs
。
度量名稱 | 描述 | 註解 |
---|---|---|
id |
統計資料識別碼 | 用來識別各個事件的統計資料,尤其是在事件中有多個具有相同媒體類型和方向的統計資料時。 |
codecName |
轉碼器名稱 | H264、VP8、VP9。 |
bitrate |
視訊接收位元速率 (每秒位元數) | |
jitterInMs |
封包抖動 (毫秒) | 越低越好。 |
packets |
已接收的封包總數。 | |
packetsPerSecond |
封包速率 (每秒封包數) | |
packetsLost |
遺失封包總數。 | |
packetsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
rttInMs |
來回時間 (毫秒) | 越低越好。 從 RTCP 傳送者報告計算。 建議使用 200 毫秒或更短的來回時間。 |
streamId |
串流識別碼 | streamId 值對應至 VideoStreamCommon 中的 id 。 可用來比對傳送者。 |
jitterBufferDelayInMs |
抖動緩衝區 (毫秒) | 越低越好。 抖動緩衝區用於平滑播放。 此值是指畫面格的封包停留在抖動緩衝區中的時間長度。 |
frameRateDecoded |
為 RTP 串流正確解碼的畫面播放速率 (每秒畫面格數) | |
frameRateReceived |
在 RTP 串流上接收的畫面播放速率 (每秒畫面格數) | |
frameWidthReceived |
解碼畫面格的畫面格寬度 (像素) | |
frameHeightReceived |
解碼畫面格的畫面格高度 (像素) | |
longestFreezeDurationInMs |
最長凍結持續時間 (毫秒) | |
totalFreezeDurationInMs |
凍結持續時間總計 (毫秒) | |
framesReceived |
在 RTP 串流上接收的畫面格總數 | |
framesDecoded |
為 RTP 串流正確解碼的畫面格總數 | |
framesDropped |
捨棄的畫面格總數 | |
keyFramesDecoded |
為 RTP 串流正確解碼的主要畫面格總數 | |
transportId |
傳輸識別碼 | 用來關聯傳輸中的統計資料。 |
螢幕共用傳送計量
目前,統計資料欄位與視訊傳送計量相同。
螢幕共用接收計量
目前,統計資料欄位與視訊接收計量相同。
傳輸計量
在 ACS Web SDK 1.20.1 之後,傳輸相關計量會區隔出來。
rttInMs
是舊版中位於音訊、視訊和螢幕共用統計資料中的 pairRttInMs
。
availableIncomingBitrate
是過去位於音訊、視訊和螢幕共用的接收統計資料中的 availableBitrate
。
availableOutgoingBitrate
是過去位於音訊、視訊和螢幕共用的傳送統計資料中的 availableBitrate
。
度量名稱 | 描述 | 註解 |
---|---|---|
id |
傳輸識別碼 | 用來與其他統計資料中的傳輸識別碼產生關聯 |
rttInMs |
來回時間 (毫秒) | 此值是從 STUN 連線檢查計算出來的。 建議使用 200 毫秒或更短的來回時間。 |
availableIncomingBitrate |
頻寬估計 (每秒位元數) | 此值有可能無法使用,視 WebRTC 工作階段中使用的頻寬估計演算法而定 |
availableOutgoingBitrate |
頻寬估計 (每秒位元數) | 此值有可能無法使用,視 WebRTC 工作階段中使用的頻寬估計演算法而定 |
SDK 1.20.1 版 (GA) 中的變更
1.20.1 (GA) 現已支援 MediaStats 功能 API。
相較於先前的搶鮮版 (Beta),此 GA 版本也對 API 介面做了一些小幅度的變更。
在先前的搶鮮版 (Beta) 中,pairRttInMs
、availableBitrate
包含在音訊、視訊和螢幕共用統計資料中。 現在,這些計量會分成傳輸計量。
我們在音訊、視訊、螢幕共用統計數據中引進 packets
和 packetsLost
計量欄位。 這些計量可用於計算兩個不同時間點之間傳送或接收的封包總數。
視訊和螢幕共用統計資料中的 frameRateOutput
已移除。 您可以改用 frameRateDecoded
。
計量欄位 jitterBufferInMs
已重新命名為 jitterBufferDelayInMs
,以提供更清楚的描述,因為此計量表示封包停留在抖動緩衝區的持續時間。
進行中通話的媒體品質統計資料
媒體質量統計資料是核心 Call
API 的擴充功能。 您必須先取得 MediaStatisticsCallFeature
API 物件:
MediaStatisticsCallFeature mediaStatisticsCallFeature = call.feature(Features.MEDIA_STATISTICS);
MediaStatisticsCallFeature
物件具有下列 API 結構:
OnReportReceivedListener
事件會接聽媒體統計資料的定期報告。getReportIntervalInSeconds
會取得產生媒體統計數據報表的間隔,以秒為單位。 SDK 會使用10
第二個做為預設值。updateReportIntervalInSeconds()
會更新媒體統計數據報告產生的間隔,以秒為單位。 SDK 會使用10
第二個做為預設值。MediaStatisticsReport
包含傳出和傳入媒體統計數據的定義,依音訊、視訊和螢幕共享分類。getOutgoingStatistics()
:傳出媒體的媒體統計資料清單。getAudioStatistics()
:傳出音訊的媒體統計資料清單。getVideoStatistics()
:傳出視訊的媒體統計資料清單。getScreenShareStatistics()
:傳出螢幕共用的媒體統計資料清單。getDataChannelStatistics()
:數據通道的媒體統計數據清單。
getIncomingStatistics()
:傳入媒體的媒體統計資料清單。getAudioStatistics()
:傳入音訊的媒體統計資料清單。getVideoStatistics()
:傳入視訊的媒體統計資料清單。getScreenShareStatistics()
:傳入螢幕共用的媒體統計資料清單。getDataChannelStatistics()
:數據通道的媒體統計數據清單。
getLastUpdatedAt()
:產生報告的日期。
然後,訂閱 addOnReportReceivedListener
事件,以取得與目前的媒體品質統計資料有關的定期更新:
mediaStatisticsCallFeature.addOnReportReceivedListener(handleReportReceivedListener);
// Optionally, set the interval for media statistics report generation
mediaStatisticsCallFeature.updateReportIntervalInSeconds(15);
private void handleReportReceivedListener(MediaStatisticsReportEvent args) {
// Obtain the media statistics report instance
MediaStatisticsReport report = args.getReport();
// Obtain the outgoing media statistics for audio
List<OutgoingAudioStatistics> outgoingAudioStatistics = report.getOutgoingStatistics().getAudioStatistics();
// Obtain the outgoing media statistics for video
List<OutgoingVideoStatistics> outgoingVideoStatistics = report.getOutgoingStatistics().getVideoStatistics();
// Obtain the outgoing media statistics for screen share
List<OutgoingScreenShareStatistics> outgoingScreenShareStatistics = report.getOutgoingStatistics().getScreenShareStatistics();
// Obtain the outgoing media statistics for data channel
List<OutgoingDataChannelStatistics> outgoingDataChannelStatistics = report.getOutgoingStatistics().getDataChannelStatistics();
// Obtain the incoming media statistics for audio
List<IncomingAudioStatistics> incomingAudioStatistics = report.getIncomingStatistics().getAudioStatistics();
// Obtain the incoming media statistics for video
List<IncomingVideoStatistics> incomingVideoStatistics = report.getIncomingStatistics().getVideoStatistics();
// Obtain the incoming media statistics for screen share
List<IncomingScreenShareStatistics> incomingScreenShareStatistics = report.getIncomingStatistics().getScreenShareStatistics();
// Obtain the incoming media statistics for data channel
List<IncomingDataChannelStatistics> incomingDataChannelStatistics = report.getIncomingStatistics().getDataChannelStatistics();
}
最佳作法
如果您想要收集資料以進行離線檢查,建議您收集資料,並在通話結束後將其傳送至管線擷取。 如果在通話期間傳輸資料,可能會使用維持 Azure 通訊服務通話所需的網際網路頻寬 (尤其是在可用頻寬較低時)。
傳出音訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
BitrateInBps |
音訊傳送位元速率 (每秒位元數) | 一般值為 24 Kbps 以內 (通常為 36-128 Kbps)。 |
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 |
傳入音訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 | |
PacketsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
傳出視訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
BitrateInBps |
視訊傳送位元速率 (每秒位元數) | |
PacketCount |
已傳送的封包總數。 | |
FrameRate |
在 RTP 串流上傳送的畫面播放速率 (每秒畫面格數) | |
FrameWidth |
編碼畫面格的畫面格寬度 (像素) | |
FrameHeight |
編碼畫面格的畫面格高度 (像素) |
傳入視訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
BitrateInBps |
視訊接收位元速率 (每秒位元數) | |
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 | |
PacketsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
StreamId |
串流識別碼 | streamId 值對應至遠端參與者的視訊識別碼。 可用來比對傳送者。 |
FrameRate |
在 RTP 串流上接收的畫面播放速率 (每秒畫面格數) | |
FrameWidth |
解碼畫面格的畫面格寬度 (像素) | |
FrameHeight |
解碼畫面格的畫面格高度 (像素) | |
TotalFreezeDurationInMs |
凍結持續時間總計 (毫秒) |
傳出畫面共用計量
目前,統計數據欄位與 傳出視訊計量相同。
傳入畫面共用計量
目前,統計數據欄位與 傳入視訊計量相同。
傳出數據通道計量
度量名稱 | 描述 | 註解 |
---|---|---|
PacketCount |
已傳送的封包總數。 |
傳入數據通道計量
度量名稱 | 描述 | 註解 |
---|---|---|
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 |
進行中通話的媒體品質統計資料
媒體質量統計資料是核心 Call
API 的擴充功能。 您必須先取得 mediaStatisticsCallFeature
API 物件:
var mediaStatisticsCallFeature = self.call.feature(Features.mediaStatistics)
mediaStatisticsCallFeature
物件具有下列 API 結構:
didReceiveReport
委派方法會接聽媒體統計資料的定期報告。reportIntervalInSeconds
會取得產生媒體統計數據報表的間隔,以秒為單位。 SDK 會使用10
第二個做為預設值。updateReportInterval(inSeconds)
會更新媒體統計數據報告產生的間隔,以秒為單位。 SDK 會使用10
第二個做為預設值。MediaStatisticsReport
物件包含傳出和傳入媒體統計資料的定義,依音訊、視訊和螢幕共用分類。outgoingMediaStatistics
:傳出媒體的媒體統計資料清單。audio
:傳出音訊的媒體統計資料清單。video
:傳出視訊的媒體統計資料清單。screenShare
:傳出螢幕共用的媒體統計資料清單。dataChannel
:傳出數據通道的媒體統計數據清單。
incomingMediaStatistics
:傳入媒體的媒體統計資料清單。audio
:傳入音訊的媒體統計資料清單。video
:傳入視訊的媒體統計資料清單。screenShare
:傳入螢幕共用的媒體統計資料清單。dataChannel
:傳入數據通道的媒體統計數據清單。
lastUpdated
:產生報告的日期。
然後,實作 didReceiveReport
委派以取得目前媒體品質統計數據的一般更新:
// Optionally, set the interval for media statistics report generation
mediaStatisticsCallFeature.updateReportInterval(inSeconds: 15)
mediaStatisticsCallFeature.delegate = MediaStatisticsDelegate()
public class MediaStatisticsDelegate : MediaStatisticsCallFeatureDelegate
{
public func mediaStatisticsCallFeature(_ mediaStatisticsCallFeature: MediaStatisticsCallFeature,
didReceiveReport args: MediaStatisticsReportReceivedEventArgs) {
let report = args.report
// Obtain the outgoing media statistics for audio
let outgoingAudioStatistics = report.outgoingStatistics.audio
// Obtain the outgoing media statistics for video
let outgoingVideoStatistics = report.outgoingStatistics.video
// Obtain the outgoing media statistics for screen share
let outgoingScreenShareStatistics = report.outgoingStatistics.screenShare
// Obtain the outgoing media statistics for data channel
let outgoingDataChannelStatistics = report.outgoingStatistics.dataChannel
// Obtain the incoming media statistics for audio
let incomingAudioStatistics = report.incomingStatistics.audio
// Obtain the incoming media statistics for video
let incomingVideoStatistics = report.incomingStatistics.video
// Obtain the incoming media statistics for screen share
let incomingScreenShareStatistics = report.incomingStatistics.screenShare
// Obtain the incoming media statistics for data channel
let incomingDataChannelStatistics = report.incomingStatistics.dataChannel
}
}
最佳作法
如果您想要收集資料以進行離線檢查,建議您收集資料,並在通話結束後將其傳送至管線擷取。 如果在通話期間傳輸資料,可能會使用維持 Azure 通訊服務通話所需的網際網路頻寬 (尤其是在可用頻寬較低時)。
傳出音訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
BitrateInBps |
音訊傳送位元速率 (每秒位元數) | 一般值為 24 Kbps 以內 (通常為 36-128 Kbps)。 |
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 |
傳入音訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 | |
PacketsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
傳出視訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
BitrateInBps |
視訊傳送位元速率 (每秒位元數) | |
PacketCount |
已傳送的封包總數。 | |
FrameRate |
在 RTP 串流上傳送的畫面播放速率 (每秒畫面格數) | |
FrameWidth |
編碼畫面格的畫面格寬度 (像素) | |
FrameHeight |
編碼畫面格的畫面格高度 (像素) |
傳入視訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
BitrateInBps |
視訊接收位元速率 (每秒位元數) | |
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 | |
PacketsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
StreamId |
串流識別碼 | streamId 值對應至遠端參與者的視訊識別碼。 可用來比對傳送者。 |
FrameRate |
在 RTP 串流上接收的畫面播放速率 (每秒畫面格數) | |
FrameWidth |
解碼畫面格的畫面格寬度 (像素) | |
FrameHeight |
解碼畫面格的畫面格高度 (像素) | |
TotalFreezeDurationInMs |
凍結持續時間總計 (毫秒) |
傳出畫面共用計量
目前,統計數據欄位與 傳出視訊計量相同。
傳入畫面共用計量
目前,統計數據欄位與 傳入視訊計量相同。
傳出數據通道計量
度量名稱 | 描述 | 註解 |
---|---|---|
PacketCount |
已傳送的封包總數。 |
傳入數據通道計量
度量名稱 | 描述 | 註解 |
---|---|---|
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 |
進行中通話的媒體品質統計資料
媒體質量統計資料是核心 CommunicationCall
API 的擴充功能。 您必須先取得 MediaStatisticsCallFeature
API 物件:
MediaStatisticsCallFeature mediaStatisticsCallFeature = call.Features.MediaStatistics;
MediaStatisticsCallFeature
功能物件具有下列 API 結構:
ReportReceived
事件會接聽媒體統計資料的定期報告。ReportIntervalInSeconds
會取得產生媒體統計數據報表的間隔,以秒為單位。 SDK 會使用10
第二個做為預設值。UpdateReportIntervalInSeconds()
會更新媒體統計數據報告產生的間隔,以秒為單位。 SDK 會使用10
第二個做為預設值。MediaStatisticsReport
物件包含傳出和傳入媒體統計資料的定義,依音訊、視訊和螢幕共用分類。OutgoingMediaStatistics
:傳出媒體的媒體統計資料清單。Audio
:傳出音訊的媒體統計資料清單。Video
:傳出視訊的媒體統計資料清單。ScreenShare
:傳出螢幕共用的媒體統計資料清單。DataChannel
:傳出數據通道的媒體統計數據清單。
IncomingMediaStatistics
:傳入媒體的媒體統計資料清單。Audio
:傳入音訊的媒體統計資料清單。Video
:傳入視訊的媒體統計資料清單。ScreenShare
:傳入螢幕共用的媒體統計資料清單。DataChannel
:傳入數據通道的媒體統計數據清單。
LastUpdateAt
:產生報告的日期。
然後,訂閱 SampleReported
事件,以取得與目前的媒體品質統計資料有關的定期更新:
mediaStatisticsCallFeature.ReportReceived += MediaStatisticsCallFeature_ReportReceived;
// Optionally, set the interval for media statistics report generation
mediaStatisticsCallFeature.UpdateReportIntervalInSeconds(15);
private void MediaStatisticsCallFeature_ReportReceived(object sender, MediaStatisticsReportReceivedEventArgs args)
// Obtain the media statistics report instance
MediaStatisticsReport report = args.Report;
// Obtain the outgoing media statistics for audio
IReadOnlyList<OutgoingAudioStatistics> outgoingAudioStatistics = report.OutgoingStatistics.Audio;
// Obtain the outgoing media statistics for video
IReadOnlyList<OutgoingVideoStatistics> outgoingVideoStatistics = report.OutgoingStatistics.Video;
// Obtain the outgoing media statistics for screen share
IReadOnlyList<OutgoingScreenShareStatistics> outgoingScreenShareStatistics = report.OutgoingStatistics.ScreenShare;
// Obtain the outgoing media statistics for data channel
IReadOnlyList<OutgoingDataChannelStatistics> outgoingDataChannelStatistics = report.OutgoingStatistics.DataChannel;
// Obtain the incoming media statistics for audio
IReadOnlyList<IncomingAudioStatistics> incomingAudioStatistics = report.IncomingStatistics.Audio;
// Obtain the incoming media statistics for video
IReadOnlyList<IncomingVideoStatistics> incomingVideoStatistics = report.IncomingStatistics.Video;
// Obtain the incoming media statistics for screen share
IReadOnlyList<IncomingScreenShareStatistics> incomingScreenShareStatistics = report.IncomingStatistics.ScreenShare;
// Obtain the incoming media statistics for data channel
IReadOnlyList<IncomingDataChannelStatistics> incomingDataChannelStatistics = report.IncomingStatistics.DataChannel;
}
最佳作法
如果您想要收集資料以進行離線檢查,建議您收集資料,並在通話結束後將其傳送至管線擷取。 如果在通話期間傳輸資料,可能會使用維持 Azure 通訊服務通話所需的網際網路頻寬 (尤其是在可用頻寬較低時)。
傳出音訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
BitrateInBps |
音訊傳送位元速率 (每秒位元數) | 一般值為 24 Kbps 以內 (通常為 36-128 Kbps)。 |
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 |
傳入音訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 | |
PacketsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
傳出視訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
BitrateInBps |
視訊傳送位元速率 (每秒位元數) | |
PacketCount |
已傳送的封包總數。 | |
FrameRate |
在 RTP 串流上傳送的畫面播放速率 (每秒畫面格數) | |
FrameWidth |
編碼畫面格的畫面格寬度 (像素) | |
FrameHeight |
編碼畫面格的畫面格高度 (像素) |
傳入視訊計量
度量名稱 | 描述 | 註解 |
---|---|---|
CodecName |
轉碼器名稱 | |
BitrateInBps |
視訊接收位元速率 (每秒位元數) | |
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 | |
PacketsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
StreamId |
串流識別碼 | streamId 值對應至遠端參與者的視訊識別碼。 可用來比對傳送者。 |
FrameRate |
在 RTP 串流上接收的畫面播放速率 (每秒畫面格數) | |
FrameWidth |
解碼畫面格的畫面格寬度 (像素) | |
FrameHeight |
解碼畫面格的畫面格高度 (像素) | |
TotalFreezeDurationInMs |
凍結持續時間總計 (毫秒) |
傳出畫面共用計量
目前,統計數據欄位與 傳出視訊計量相同。
傳入畫面共用計量
目前,統計數據欄位與 傳入視訊計量相同。
傳出數據通道計量
度量名稱 | 描述 | 註解 |
---|---|---|
PacketCount |
已傳送的封包總數。 |
傳入數據通道計量
度量名稱 | 描述 | 註解 |
---|---|---|
JitterInMs |
封包抖動 (毫秒) | 越低越好。 |
PacketCount |
已傳送的封包總數。 |