다음을 통해 공유


미디어 품질 통계

VoIP의 미디어 품질과 Azure Communication Services를 사용하는 영상 통화를 이해하는 데 도움이 되는 미디어 품질 통계라는 기능이 있습니다. 수신 및 발신 통화 메트릭의 하위 수준 오디오, 비디오 및 화면 공유 품질 메트릭을 검사하는 데 사용합니다.

진행 중인 통화에 대한 미디어 품질 통계

Important

SDK 버전 1.20.1부터 SDK의 미디어 품질 통계에 대한 인터페이스 업데이트가 있습니다.

미디어 품질 통계는 핵심 Call API의 확장 기능입니다. 먼저 mediaStatsFeature API 개체를 가져와야 합니다.

const mediaStatsFeature = call.feature(Features.MediaStats);

미디어 통계 데이터를 수신하려면 sampleReported 이벤트 또는 summaryReported 이벤트를 구독하면 됩니다.

sampleReported 이벤트는 1초마다 트리거됩니다. 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);
});

미디어 통계 수집기를 사용할 필요가 없는 경우에는 mediaStatsCollectordispose 메서드를 호출할 수 있습니다.

mediaStatsCollector.dispose();

호출이 종료될 때 collectorsare가 내부적으로 회수되므로 호출이 종료될 때마다 mediaStatsCollectordispose 메서드를 호출할 필요는 없습니다.

MediaStatsCollectorOptions

MediaStatsCollectorOptions는 선택 사항이며 MediaStatsCollectorOptions에 선택적 필드 2개가 있습니다.

  • aggregationInterval은 통계가 집계되는 간격(초)입니다. 기본값은 10입니다.
  • dataPointsPerAggregation은 각 집계 이벤트에 있는 데이터 포인트 수를 정의합니다. 기본값은 6입니다.

이 두 값은 SDK가 summaryReported 이벤트를 내보내는 빈도와 보고서에 포함된 집계된 데이터 포인트 수를 결정합니다.

summaryReported 이벤트는 aggregationInterval * dataPointsPerAggregation초마다 발생합니다.

예를 들어 다음 값을 설정합니다.

  • aggregationInterval = 1
  • dataPointsPerAggregation = 60

이렇게 하면 summaryReported 이벤트는 60초마다 발생하며 기록된 통계마다 고유 단위 60개를 포함합니다.

다음 값을 설정합니다.

  • aggregatinInterval = 60
  • dataPointsPerAggregation = 1

이렇게 하면 summaryReported 이벤트는 60초마다 발생하며 기록된 통계마다 고유 단위 1개를 포함합니다.

모범 사례

오프라인 검사에 사용할 데이터를 수집하려는 경우 데이터를 수집하고 통화 종료 후에 파이프라인 수집으로 보내는 것이 좋습니다. 통화 중에 데이터를 전송하는 경우 Azure Communication Services 통화를 계속하는 데 필요한 인터넷 대역폭을 사용할 수 있습니다(특히 사용 가능한 대역폭이 낮은 경우).

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 통계 ID 이벤트 전체에서 통계를 식별하는 데 사용되며, 특히 이벤트에 미디어 형식과 방향이 같은 통계가 여러 개 있는 경우에 사용됩니다.
codecName 코덱 이름 OPUS, G722.
bitrate 오디오 송신 비트 전송률(초당 비트 수) 일반 값은 24Kbps 범위입니다(일반적으로 36~128Kbps).
jitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
packets 전송된 총 패킷 수입니다.
packetsPerSecond 패킷 속도(초당 패킷 수)
packetsLost 원격 종단에서 보고된 손실된 총 패킷 수입니다.
packetsLostPerSecond 패킷 손실율(초당 패킷 수) 낮을수록 좋습니다.
rttInMs 왕복 시간(밀리초) 낮을수록 좋습니다. RTCP 수신기 보고서에서 계산됩니다. 200ms 이하의 왕복 시간이 권장됩니다.
audioInputLevel 마이크의 오디오 볼륨 수준 값 범위는 0~65536입니다. 0 값은 무음을 나타냅니다.
transportId 전송 ID 전송에서 통계를 연결하는 데 사용됩니다.

오디오 수신 메트릭

1.20.1 이하 SDK 버전에서는 jitterBufferDelayInMsjitterBufferInMs로 있었습니다.

메트릭 이름 설명 설명
id 통계 ID 이벤트 전체에서 통계를 식별하는 데 사용되며, 특히 이벤트에 미디어 형식과 방향이 같은 통계가 여러 개 있는 경우에 사용됩니다.
codecName 코덱 이름 OPUS, G722.
bitrate 오디오 수신 비트 전송률(초당 비트 수) 일반 값은 24Kbps 범위입니다(일반적으로 36~128Kbps).
jitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
packets 수신된 총 패킷 수입니다.
packetsPerSecond 패킷 속도(초당 패킷 수)
packetsLost 손실된 총 패킷 수입니다.
packetsLostPerSecond 패킷 손실율(초당 패킷 수) 낮을수록 좋습니다.
jitterBufferDelayInMs 지터 버퍼(밀리초) 낮을수록 좋습니다. 지터 버퍼는 부드러운 플레이아웃에 사용됩니다. 이 값은 샘플 패킷이 지터 버퍼에 유지되는 기간입니다.
audioOutputLevel 스트림을 수신하는 오디오 볼륨 수준 값 범위는 0~65536입니다. 0 값은 무음을 나타냅니다.
healedRatio 총 수신 샘플 대비 숨겨진 샘플(silentConcealedSamples 제외)의 비율 정보만.
transportId 전송 ID 전송에서 통계를 연결하는 데 사용됩니다.

비디오 전송 메트릭

SDK 버전 1.20.1부터 비디오 전송 메트릭에는 동시 스트림 통계를 더 잘 표현할 수 있게 해주는 altLayouts 메트릭 필드가 포함되었습니다.

메트릭 이름 설명 설명
id 통계 ID 이벤트 전체에서 통계를 식별하는 데 사용되며, 특히 이벤트에 미디어 형식과 방향이 같은 통계가 여러 개 있는 경우에 사용됩니다.
codecName 코덱 이름 H264, VP8, VP9.
bitrate 비디오 송신 비트 전송률(초당 비트 수)
jitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
packets 전송된 총 패킷 수입니다.
packetsPerSecond 패킷 속도(초당 패킷 수)
packetsLost 원격 종단에서 보고된 손실된 총 패킷 수입니다.
packetsLostPerSecond 패킷 손실율(초당 패킷 수) 낮을수록 좋습니다.
rttInMs 왕복 시간(밀리초) 낮을수록 좋습니다. RTCP 수신기 보고서에서 계산됩니다. 200ms 이하의 왕복 시간이 권장됩니다.
frameRateInput 비디오 원본에서 시작되는 프레임 속도(초당 프레임 수)
frameWidthInput 비디오 원본에서 시작된 마지막 프레임의 프레임 너비(픽셀)
frameHeightInput 비디오 원본에서 시작된 마지막 프레임의 프레임 높이(픽셀)
framesEncoded RTP 스트림에 대해 성공적으로 인코딩된 프레임 수
frameRateEncoded RTP 스트림에 대해 성공적으로 인코딩된 프레임 속도(초당 프레임 수)
framesSent RTP 스트림에서 전송된 프레임 수
frameRateSent RTP 스트림에서 전송된 프레임 속도(초당 프레임 수)
frameWidthSent 인코딩된 프레임의 프레임 너비(픽셀)
frameHeightSent 인코딩된 프레임의 프레임 높이(픽셀)
keyFramesEncoded RTP 스트림에 대해 성공적으로 인코딩된 키 프레임
transportId 전송 ID 전송에서 통계를 연결하는 데 사용됩니다.
altLayouts Simulcast 스트림 altLayouts에는 비디오 전송과 동일한 메트릭이 포함됩니다.

비디오 수신 메트릭

1.20.1 이하 SDK 버전에서는 jitterBufferDelayInMsjitterBufferInMs로 있었습니다.

메트릭 이름 설명 설명
id 통계 ID 이벤트 전체에서 통계를 식별하는 데 사용되며, 특히 이벤트에 미디어 형식과 방향이 같은 통계가 여러 개 있는 경우에 사용됩니다.
codecName 코덱 이름 H264, VP8, VP9.
bitrate 비디오 수신 비트 전송률(초당 비트 수)
jitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
packets 수신된 총 패킷 수입니다.
packetsPerSecond 패킷 속도(초당 패킷 수)
packetsLost 손실된 총 패킷 수입니다.
packetsLostPerSecond 패킷 손실율(초당 패킷 수) 낮을수록 좋습니다.
rttInMs 왕복 시간(밀리초) 낮을수록 좋습니다. RTCP 전송기 보고서에서 계산됩니다. 200ms 이하의 왕복 시간이 권장됩니다.
streamId 스트림 ID streamId 값은 VideoStreamCommonid에 해당합니다. 보낸 사람 일치에 사용할 수 있습니다.
jitterBufferDelayInMs 지터 버퍼(밀리초) 낮을수록 좋습니다. 지터 버퍼는 부드러운 플레이아웃에 사용됩니다. 이 값은 프레임 패킷이 지터 버퍼에 머무는 기간입니다.
frameRateDecoded RTP 스트림에 대해 올바르게 디코딩된 프레임 속도(초당 프레임 수)
frameRateReceived RTP 스트림에서 수신된 프레임 속도(초당 프레임 수)
frameWidthReceived 디코딩된 프레임의 프레임 너비(픽셀)
frameHeightReceived 디코딩된 프레임의 프레임 높이(픽셀)
longestFreezeDurationInMs 가장 긴 동결 기간(밀리초)
totalFreezeDurationInMs 총 동결 기간(밀리초)
framesReceived RTP 스트림에서 수신된 총 프레임 수
framesDecoded RTP 스트림에 대해 올바르게 디코딩된 총 프레임 수
framesDropped 삭제된 총 프레임 수
keyFramesDecoded RTP 스트림에 대해 올바르게 디코딩된 총 키 프레임 수
transportId 전송 ID 전송에서 통계를 연결하는 데 사용됩니다.

화면 공유 전송 메트릭

현재 통계 필드는 비디오 전송 메트릭과 동일합니다.

화면 공유 수신 메트릭

현재 통계 필드는 비디오 수신 메트릭과 동일합니다.

전송 메트릭

ACS 웹 SDK 1.20.1부터 전송 관련 메트릭이 구분되었습니다.

이전 버전에서는 rttInMs가 오디오, 비디오 및 ScreenShare에 대한 통계에서 pairRttInMs로 있었습니다.

availableIncomingBitrate는 오디오, 비디오 및 ScreenShare에 대한 수신 통계의 availableBitrate였습니다.

availableOutgoingBitrate는 오디오, 비디오 및 ScreenShare에 대한 전송 통계의 availableBitrate였습니다.

메트릭 이름 설명 설명
id 전송 ID 다른 통계의 transportId와 연결하는 데 사용됩니다.
rttInMs 왕복 시간(밀리초) 값은 STUN 연결 모니터링에서 계산됩니다. 200ms 이하의 왕복 시간이 권장됩니다.
availableIncomingBitrate 대역폭 추정(초당 비트 수) WebRTC 세션에서 사용되는 대역폭 예측 알고리즘에 따라 값을 사용하지 못하게 될 수 있습니다.
availableOutgoingBitrate 대역폭 추정(초당 비트 수) WebRTC 세션에서 사용되는 대역폭 예측 알고리즘에 따라 값을 사용하지 못하게 될 수 있습니다.

SDK 버전 1.20.1(GA)의 변경 내용

이제 1.20.1(GA)에서 MediaStats 기능 API를 지원합니다. 이전 베타 버전과 달리 이 GA 버전에서 API 인터페이스를 약간 변경했습니다.

이전 베타 버전에서는 pairRttInMs, availableBitrate가 오디오, 비디오 및 ScreenShare 통계에 포함되었습니다. 이제 이러한 메트릭은 전송 메트릭으로 구분되었습니다.

오디오, 비디오, ScreenShare 통계에 packets, packetsLost 메트릭 필드가 도입되었습니다. 이러한 메트릭은 서로 다른 두 시간 지점 간에 전송되거나 수신된 총 패킷 수를 계산하는 데 유용합니다.

비디오 및 ScreenShare 통계의 frameRateOutput이 제거되었습니다. 대신 frameRateDecoded를 사용하면 됩니다.

이 메트릭은 패킷이 지터 버퍼에 머무는 기간을 나타내므로 더욱 명확한 설명을 제공하기 위해 jitterBufferInMs 메트릭 필드 이름이 jitterBufferDelayInMs로 변경되었습니다.

진행 중인 통화에 대한 미디어 품질 통계

미디어 품질 통계는 핵심 Call API의 확장 기능입니다. 먼저 MediaStatisticsCallFeature API 개체를 가져와야 합니다.

MediaStatisticsCallFeature mediaStatisticsCallFeature = call.feature(Features.MEDIA_STATISTICS);

MediaStatisticsCallFeature 개체에는 다음 API 구조가 있습니다.

  • OnReportReceivedListener 이벤트는 미디어 통계에 대한 정기적인 보고서를 수신 대기합니다.
  • getReportIntervalInSeconds 는 미디어 통계 보고서 생성 간격(초)을 가져옵니다. SDK는 두 번째를 기본값으로 사용합니다 10 .
  • updateReportIntervalInSeconds() 는 미디어 통계 보고서 생성 간격(초)을 업데이트합니다. SDK는 두 번째를 기본값으로 사용합니다 10 .
  • A 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 Communication Services 통화를 계속하는 데 필요한 인터넷 대역폭을 사용할 수 있습니다(특히 사용 가능한 대역폭이 낮은 경우).

발신 오디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
BitrateInBps 오디오 송신 비트 전송률(초당 비트 수) 일반 값은 24Kbps 범위입니다(일반적으로 36~128Kbps).
JitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
PacketCount 전송된 총 패킷 수입니다.

수신 오디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
JitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
PacketCount 전송된 총 패킷 수입니다.
PacketsLostPerSecond 패킷 손실율(초당 패킷 수) 낮을수록 좋습니다.

발신 비디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
BitrateInBps 비디오 송신 비트 전송률(초당 비트 수)
PacketCount 전송된 총 패킷 수입니다.
FrameRate RTP 스트림에서 전송된 프레임 속도(초당 프레임 수)
FrameWidth 인코딩된 프레임의 프레임 너비(픽셀)
FrameHeight 인코딩된 프레임의 프레임 높이(픽셀)

수신 비디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
BitrateInBps 비디오 수신 비트 전송률(초당 비트 수)
JitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
PacketCount 전송된 총 패킷 수입니다.
PacketsLostPerSecond 패킷 손실율(초당 패킷 수) 낮을수록 좋습니다.
StreamId 스트림 ID streamId 값은 원격 참가자의 비디오 ID에 해당합니다. 보낸 사람 일치에 사용할 수 있습니다.
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 Communication Services 통화를 계속하는 데 필요한 인터넷 대역폭을 사용할 수 있습니다(특히 사용 가능한 대역폭이 낮은 경우).

발신 오디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
BitrateInBps 오디오 송신 비트 전송률(초당 비트 수) 일반 값은 24Kbps 범위입니다(일반적으로 36~128Kbps).
JitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
PacketCount 전송된 총 패킷 수입니다.

수신 오디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
JitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
PacketCount 전송된 총 패킷 수입니다.
PacketsLostPerSecond 패킷 손실율(초당 패킷 수) 낮을수록 좋습니다.

발신 비디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
BitrateInBps 비디오 송신 비트 전송률(초당 비트 수)
PacketCount 전송된 총 패킷 수입니다.
FrameRate RTP 스트림에서 전송된 프레임 속도(초당 프레임 수)
FrameWidth 인코딩된 프레임의 프레임 너비(픽셀)
FrameHeight 인코딩된 프레임의 프레임 높이(픽셀)

수신 비디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
BitrateInBps 비디오 수신 비트 전송률(초당 비트 수)
JitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
PacketCount 전송된 총 패킷 수입니다.
PacketsLostPerSecond 패킷 손실율(초당 패킷 수) 낮을수록 좋습니다.
StreamId 스트림 ID streamId 값은 원격 참가자의 비디오 ID에 해당합니다. 보낸 사람 일치에 사용할 수 있습니다.
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 Communication Services 통화를 계속하는 데 필요한 인터넷 대역폭을 사용할 수 있습니다(특히 사용 가능한 대역폭이 낮은 경우).

발신 오디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
BitrateInBps 오디오 송신 비트 전송률(초당 비트 수) 일반 값은 24Kbps 범위입니다(일반적으로 36~128Kbps).
JitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
PacketCount 전송된 총 패킷 수입니다.

수신 오디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
JitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
PacketCount 전송된 총 패킷 수입니다.
PacketsLostPerSecond 패킷 손실율(초당 패킷 수) 낮을수록 좋습니다.

발신 비디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
BitrateInBps 비디오 송신 비트 전송률(초당 비트 수)
PacketCount 전송된 총 패킷 수입니다.
FrameRate RTP 스트림에서 전송된 프레임 속도(초당 프레임 수)
FrameWidth 인코딩된 프레임의 프레임 너비(픽셀)
FrameHeight 인코딩된 프레임의 프레임 높이(픽셀)

수신 비디오 메트릭

메트릭 이름 설명 설명
CodecName 코덱 이름
BitrateInBps 비디오 수신 비트 전송률(초당 비트 수)
JitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
PacketCount 전송된 총 패킷 수입니다.
PacketsLostPerSecond 패킷 손실율(초당 패킷 수) 낮을수록 좋습니다.
StreamId 스트림 ID streamId 값은 원격 참가자의 비디오 ID에 해당합니다. 보낸 사람 일치에 사용할 수 있습니다.
FrameRate RTP 스트림에서 수신된 프레임 속도(초당 프레임 수)
FrameWidth 디코딩된 프레임의 프레임 너비(픽셀)
FrameHeight 디코딩된 프레임의 프레임 높이(픽셀)
TotalFreezeDurationInMs 총 동결 기간(밀리초)

나가는 화면 공유 메트릭

현재 통계 필드는 나가는 비디오 메트릭과 동일합니다.

들어오는 화면 공유 메트릭

현재 통계 필드는 들어오는 비디오 메트릭과 동일합니다.

나가는 데이터 채널 메트릭

메트릭 이름 설명 설명
PacketCount 전송된 총 패킷 수입니다.

들어오는 데이터 채널 메트릭

메트릭 이름 설명 설명
JitterInMs 패킷 지터(밀리초) 낮을수록 좋습니다.
PacketCount 전송된 총 패킷 수입니다.