媒體品質統計數據

為了協助您瞭解使用 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);
});

如果您不需要使用媒體統計數據收集器,您可以呼叫 disposemediaStatsCollector方法。

mediaStatsCollector.dispose();

每次呼叫結束時,都不需要呼叫 dispose 方法 mediaStatsCollector ,因為收集器會在呼叫結束時於內部回收。

MediaStatsCollectorOptions

MediaStatsCollectorOptions是選擇性的,在 中有MediaStatsCollectorOptions兩個選擇性欄位。

  • aggregationInterval 是匯總統計數據的間隔,以秒為單位。 預設值為 10。
  • dataPointsPerAggregation 定義每個匯總事件有多少個數據點。 預設值為 6。

這兩個值會決定 SDK 發出 summaryReported 事件的頻率,以及報表中包含的匯總數據點數目。

事件 summaryReported 每秒引發一次 aggregationInterval * dataPointsPerAggregation

例如,如果您設定下列值:

  • aggregationInterval = 1
  • dataPointsPerAggregation = 60

事件 summaryReported 會每 60 秒引發一次,並針對每個記錄的統計數據包含 60 個唯一單位。

如果您設定下列值:

  • aggregatinInterval = 60
  • dataPointsPerAggregation = 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 存在。

availableIncomingBitrateavailableBitrate 音訊、視訊和螢幕共用的接收統計數據中。

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 版本中,pairRttInMsavailableBitrate音訊、視訊和螢幕共享統計資料中包含 。 現在,這些計量已分成傳輸計量。

我們引進了packetspacketsLost音訊、視訊、螢幕共用統計數據中的計量欄位。 這些計量可用於計算兩個不同時間點之間傳送或接收的封包總數。

已移除影片 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 傳送的封包總數。