미디어 품질 통계
VoIP의 미디어 품질과 Azure Communication Services를 사용하는 영상 통화를 더 잘 이해할 수 있도록 미디어 품질 통계라는 기능이 있습니다. 수신 및 발신 통화 메트릭의 하위 수준 오디오, 비디오 및 화면 공유 품질 메트릭을 검사하는 데 사용합니다.
진행 중인 통화에 대한 미디어 품질 통계
Important
SDK 버전 1.20.1부터 SDK의 미디어 품질 통계에 대한 인터페이스 업데이트가 있습니다.
미디어 품질 통계는 핵심 Call
API의 확장 기능입니다. 먼저 mediaStatsFeature
API 개체를 가져와야 합니다.
const mediaStatsFeature = call.feature(Features.MediaStats);
미디어 통계 데이터를 수신하려면 이벤트 또는 summaryReported
이벤트를 구독할 sampleReported
수 있습니다.
이벤트는 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);
});
미디어 통계 수집기를 사용할 필요가 없는 경우 메서드mediaStatsCollector
를 호출 dispose
할 수 있습니다.
mediaStatsCollector.dispose();
호출이 종료될 때 수집기가 내부적으로 회수되므로 호출이 종료될 때마다 메서드 mediaStatsCollector
를 호출 dispose
할 필요가 없습니다.
MediaStatsCollectorOptions
MediaStatsCollectorOptions
는 선택 사항이며 MediaStatsCollectorOptions
에 선택적 필드 2개가 있습니다.
aggregationInterval
은 통계가 집계되는 간격(초)입니다. 기본값은 10입니다.dataPointsPerAggregation
은 각 집계 이벤트에 있는 데이터 포인트 수를 정의합니다. 기본값은 6입니다.
이 두 값은 SDK가 summaryReported
이벤트를 내보내는 빈도와 보고서에 포함된 집계된 데이터 포인트 수를 결정합니다.
summaryReported
이벤트는 aggregationInterval * dataPointsPerAggregation
초마다 발생합니다.
예를 들어 다음 값을 설정합니다.
aggregationInterval
= 1dataPointsPerAggregation
= 60
이렇게 하면 summaryReported
이벤트는 60초마다 발생하며 기록된 통계마다 고유 단위 60개를 포함합니다.
다음 값을 설정합니다.
aggregatinInterval
= 60dataPointsPerAggregation
= 1
이벤트는 summaryReported
60초마다 발생하며 기록된 각 통계에 대해 하나의 고유 단위를 포함합니다.
모범 사례
오프라인 검사에 사용할 데이터를 수집하려는 경우 데이터를 수집하고 통화 종료 후에 파이프라인 수집으로 보내는 것이 좋습니다. 통화 중에 데이터를 전송하는 경우 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 버전에서는 jitterBufferDelayInMs
가 jitterBufferInMs
로 있었습니다.
메트릭 이름 | 설명 | 설명 |
---|---|---|
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 버전에서는 jitterBufferDelayInMs
가 jitterBufferInMs
로 있었습니다.
메트릭 이름 | 설명 | 설명 |
---|---|---|
id |
통계 ID | 이벤트 전체에서 통계를 식별하는 데 사용되며, 특히 이벤트에 미디어 형식과 방향이 같은 통계가 여러 개 있는 경우에 사용됩니다. |
codecName |
코덱 이름 | H264, VP8, VP9. |
bitrate |
비디오 수신 비트 전송률(초당 비트 수) | |
jitterInMs |
패킷 지터(밀리초) | 낮을수록 좋습니다. |
packets |
수신된 총 패킷 수입니다. | |
packetsPerSecond |
패킷 속도(초당 패킷 수) | |
packetsLost |
손실된 총 패킷 수입니다. | |
packetsLostPerSecond |
패킷 손실율(초당 패킷 수) | 낮을수록 좋습니다. |
rttInMs |
왕복 시간(밀리초) | 낮을수록 좋습니다. RTCP 전송기 보고서에서 계산됩니다. 200ms 이하의 왕복 시간이 권장됩니다. |
streamId |
스트림 ID | streamId 값은 VideoStreamCommon 의 id 에 해당합니다. 보낸 사람 일치에 사용할 수 있습니다. |
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
를 사용하면 됩니다.
이 메트릭은 지터 버퍼에서 패킷이 유지되는 기간을 나타내기 때문에 더 명확한 설명을 제공하기 위해 jitterBufferDelayInMs
메트릭 필드 jitterBufferInMs
의 이름을 바꿉니다.
진행 중인 통화에 대한 미디어 품질 통계
미디어 품질 통계는 핵심 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(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 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 |
전송된 총 패킷 수입니다. |