媒體品質統計數據
為了協助您瞭解使用 Azure 通訊服務 VoIP 和視訊通話中的媒體品質,有一個稱為媒體品質統計數據的功能。 使用它來檢查傳入和傳出通話計量的低階音訊、視訊和螢幕分享品質計量。
進行中通話的媒體品質統計數據
重要
SDK 中的媒體品質統計數據有介面更新,從 SDK 1.20.1 版開始
媒體質量統計數據是核心 Call
API 的擴充功能。 您必須先取得 mediaStatsFeature
API 物件:
const mediaStatsFeature = call.feature(Features.MediaStats);
若要接收媒體統計數據數據,您可以訂閱 sampleReported
事件或 summaryReported
事件。
sampleReported
事件會每秒觸發一次。 它適合作為UI顯示或您自己的資料管線的數據源。
summaryReported
event 包含間隔內數據的匯總值,當您只需要摘要時,這非常有用。
如果您要控制事件的間隔 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 |
傳輸標識碼 | 用來關聯傳輸中的統計數據。 |
音訊接收計量
在 SDK 版本中,比 1.20.1 更常值, jitterBufferDelayInMs
會以 的形式 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 |
Simulcast 數據流 | altLayouts 包含視訊傳送的相同計量 |
視訊接收計量
在早於 1.20.1 的 SDK 版本中, jitterBufferDelayInMs
會以 的形式 jitterBufferInMs
存在。
度量名稱 | 描述 | 註解 |
---|---|---|
id |
統計數據識別碼 | 用來識別事件之間的統計數據,特別是在事件中有多個具有相同媒體類型和方向的統計數據時。 |
codecName |
編解碼器名稱 | H264、VP8、VP9。 |
bitrate |
視訊接收比特率(每秒位數) | |
jitterInMs |
封包抖動 (毫秒) | 越低越好。 |
packets |
收到的封包總數。 | |
packetsPerSecond |
封包速率 (每秒封包數) | |
packetsLost |
遺失的封包總數。 | |
packetsLostPerSecond |
封包遺失率 (每秒封包數) | 越低越好。 |
rttInMs |
來回時間 (毫秒) | 越低越好。 從 RTCP 傳送者報告計算。 我們建議往返時間為 200 毫秒或更少。 |
streamId |
數據流標識碼 | 值 streamId 會對應至 id 中的 VideoStreamCommon 。 它可以用來比對傳送者。 |
jitterBufferDelayInMs |
抖動緩衝區 (毫秒) | 越低越好。 抖動緩衝區用於平滑播放。 此值是畫面格封包停留在抖動緩衝區的時間長度。 |
frameRateDecoded |
RTP 數據流正確譯碼的幀速率(每秒畫面格數) | |
frameRateReceived |
RTP 數據流上收到的幀速率(每秒畫面格數) | |
frameWidthReceived |
譯碼框架的框架寬度(圖元) | |
frameHeightReceived |
譯碼框架的框架高度(圖元) | |
longestFreezeDurationInMs |
最長凍結持續時間 (毫秒) | |
totalFreezeDurationInMs |
凍結持續時間總計 (毫秒) | |
framesReceived |
RTP 數據流上收到的畫面總數 | |
framesDecoded |
RTP 數據流正確譯碼的畫面總數 | |
framesDropped |
捨棄的畫面格總數 | |
keyFramesDecoded |
RTP 數據流正確譯碼的主要畫面格總數 | |
transportId |
傳輸標識碼 | 用來關聯傳輸中的統計數據。 |
屏幕共用傳送計量
目前,統計數據欄位與 視訊傳送計量相同。
屏幕共用接收計量
目前,統計數據欄位與 視訊接收計量相同。
傳輸計量
ACS Web SDK 1.20.1 之後,傳輸相關計量會分開。
在舊版中, rttInMs
與音訊、視訊和 screenShare 的統計數據中一樣 pairRttInMs
存在。
availableIncomingBitrate
在 availableBitrate
音訊、視訊和螢幕共用的接收統計數據中。
availableOutgoingBitrate
是在 availableBitrate
音訊、視訊和 screenShare 的傳送統計數據中。
度量名稱 | 描述 | 註解 |
---|---|---|
id |
傳輸標識碼 | 用來與其他統計數據中的 transportId 產生關聯 |
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(MediaStatisticssReportEvent 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 |
傳送的封包總數。 |