사용자 대상 진단
Azure Communication Services에서 호출을 사용할 때 고객에게 영향을 미치는 문제가 발생할 수 있습니다. 이 문제 해결을 돕기 위해, Azure Communication Services는 호출의 다양한 속성을 검사하여 문제가 무엇인지 확인할 수 있는 "UFD(사용자 연결 진단)"이라는 기능을 제공합니다. 사용자 연결 진단은 사용자 환경이 불량할 수 있는 기본 문제(예: 네트워크 불량, 사용자가 마이크 음소거)로 인해 발생할 수 있는 이벤트입니다. 사용자 연결 진단이 실행된 후, 최종 사용자에게 기본 문제가 있을 수 있다는 피드백을 제공하는 것이 좋습니다. 그러나 사용자 연결 진단 출력은 정보만 제공하며, 호출 스택은 실행되는 사용자 연결 진단을 기반으로 변경 작업을 수행하지 않습니다.
진단 값
다음과 같은 사용자 대상 진단을 사용할 수 있습니다.
네트워크 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
noNetwork | 사용 가능한 네트워크가 없습니다. | - 사용 가능한 네트워크가 없어서 호출을 시작할 수 없으면 True 로 설정됩니다. - ICE 후보가 있는 경우 False 로 설정됩니다. |
디바이스가 네트워크에 연결되지 않았습니다. | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 최적화 섹션을 참조하세요. |
networkRelaysNotReachable | 네트워크에 문제가 있습니다. | - 네트워크에 Azure Communication Services 릴레이에 연결하도록 허용하지 않는 제약 조건이 있으면 True 로 설정됩니다. - 새 호출 시 False 로 설정됩니다. |
호출하는 동안 WiFi 신호가 켜지고 꺼질 때 | 방화벽 규칙 및 네트워크 라우팅을 통해 클라이언트가 Microsoft 턴 서버에 연결할 수 있는지 확인합니다. 자세한 내용은 방화벽 구성 섹션을 참조하세요. |
networkReconnect | 연결이 끊어졌으며 네트워크에 다시 연결하고 있습니다. | - 네트워크 연결이 끊어지면 Bad 로 설정됩니다. - 미디어 전송 연결이 끊어지면 Poor 로 설정됩니다. - 새 세션이 연결되면 Good 으로 설정됩니다. |
낮은 대역폭, 인터넷 없음 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. |
networkReceiveQuality | 들어오는 스트림 품질에 대한 표시기입니다. | - 스트림을 받는 데 심각한 문제가 있으면 Bad 로 설정됩니다. - 스트림을 받는 데 경미한 문제가 있으면 Poor 로 설정됩니다. - 스트림을 받는 데 문제가 없으면 Good 으로 설정됩니다. |
낮은 대역폭 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. 가용 인터넷 대역폭을 절약할 수 있도록 최종 사용자에게 카메라를 끄는 것이 좋겠다고 제안합니다. |
networkSendQuality | 들어오는 스트림 품질에 대한 표시기입니다. | - 스트림을 보내는 데 심각한 문제가 있으면 Bad 로 설정됩니다. - 스트림을 보내는 데 경미한 문제가 있으면 Poor 로 설정됩니다. - 스트림을 보내는 데 문제가 없으면 Good 으로 설정됩니다. |
낮은 대역폭 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. 또한 가용 인터넷 대역폭을 절약할 수 있도록 최종 사용자에게 카메라를 끄는 것이 좋겠다고 제안합니다. |
오디오 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
noSpeakerDevicesEnumerated | 사용자 시스템에 오디오 출력 디바이스(스피커)가 없습니다. | - 시스템에 스피커 디바이스가 없고 스피커 선택이 지원되는 경우 True 로 설정됩니다. - 시스템에 스피커 디바이스가 1개 이상 있고 스피커를 선택할 수 있으면 False 로 설정됩니다. |
모든 스피커가 플러그가 뽑혀 있습니다. | 값이 True 로 설정된 경우 최종 사용자에게 현재 통화 세션에 사용할 수 있는 스피커가 없다는 시각적 알림을 제공하는 것이 좋습니다. |
speakingWhileMicrophoneIsMuted | 음소거 상태에서 말합니다. | - 로컬 마이크가 음소거되고 로컬 사용자가 말하는 경우 True 로 설정됩니다. - 로컬 사용자가 말하기를 중지하거나 마이크를 음소거 해제할 때 False 로 설정됩니다. * 참고: 현재 이 옵션은 오디오 수준 샘플이 WebRTC 통계에서 가져온 것이므로 Safari에서 지원되지 않습니다. |
통화하는 동안 마이크를 음소거하고 마이크에 대고 말합니다. | 값이 True 로 설정된 경우 최종 사용자에게 대화 중이며 오디오가 음소거되었다는 점을 모를 수 있다는 시각적 알림을 제공하는 것이 좋습니다. |
noMicrophoneDevicesEnumerated | 사용자 시스템에 오디오 캡처 디바이스(마이크)가 없습니다. | - 시스템에 마이크 디바이스가 없는 경우 True 로 설정됩니다. - 시스템에 마이크 디바이스가 1개 이상 있으면 False 로 설정됩니다. |
모든 마이크는 통화 중에 연결이 끊어집니다. | 값이 True 로 설정된 경우 최종 사용자에게 현재 통화 세션에 마이크가 없다는 시각적 알림을 제공하는 것이 좋습니다. 자세한 내용은 디바이스 관리자에서 마이크를 사용하도록 설정 섹션을 참조하세요. |
microphoneNotFunctioning | 마이크가 작동하지 않습니다. | - 마이크 디바이스가 시스템에서 사용하지 않도록 설정되었거나 다른 프로세스에서 사용되고 있기 때문에 로컬 오디오 스트림 전송을 시작하지 못한 경우 True 로 설정됩니다. 이 UFD가 발생하는 데 약 10초가 걸립니다. - 마이크가 오디오 스트림을 다시 성공적으로 보내기 시작하면 False 로 설정됩니다. |
마이크를 사용할 수 없습니다. 시스템에서 마이크 액세스가 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 마이크에 문제가 있다는 시각적 알림을 제공합니다. |
microphoneMuteUnexpectedly | 마이크가 음소거되었습니다. | - 마이크가 예기치 않게 음소거 상태가 되면 True 로 설정됩니다. - 마이크가 오디오 스트림을 성공적으로 보내기 시작하면 False 로 설정됩니다. |
마이크가 시스템에서 음소거되었습니다. 대부분의 경우는 사용자가 모바일 디바이스에서 Azure Communication Services 통화 중이며 전화가 걸려올 때 발생합니다. 대부분의 경우 운영 체제는 사용자가 전화를 받을 수 있도록 Azure Communication Services 통화를 음소거합니다. | 값이 True 로 설정된 경우 최종 사용자에게 전화가 걸려왔기 때문에 통화가 음소거되었다는 시각적 알림을 제공합니다. 자세한 내용은 OS에서 Azure Communication Services 통화를 음소거 섹션을 참조하세요. |
microphonePermissionDenied | 디바이스의 볼륨이 낮거나 macOS에서 거의 무음입니다. | - 시스템 설정(오디오)에서 오디오 권한이 거부되면 True 로 설정됩니다. - 스트림이 성공적으로 획득되면 False 로 설정됩니다. 참고: 이 진단은 macOS에서만 작동합니다. |
설정에서 마이크 사용 권한이 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 Azure Communication Services 통화에 마이크를 사용할 수 있는 권한을 사용하지 않았다는 시각적 알림을 제공합니다. |
카메라 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
cameraFreeze | 카메라가 5초 넘게 프레임 생성을 중지합니다. | - 로컬 비디오 스트림이 중지된 경우 True 로 설정합니다. 이 진단은 원격 쪽 사용자가 화면에서 중지된 비디오를 보거나 원격 참가자의 화면에서 비디오가 렌더링되지 않음을 의미합니다. - 중지가 끝나고 사용자가 정상적으로 비디오를 볼 수 있는 경우 False 로 설정됩니다. |
통화 중에 카메라가 연결이 끊어지거나 네트워크에 문제가 생겨 카메라가 중지되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 원격 참가자 네트워크가 좋지 않을 수 있다는 알림을 제공하는 것을 고려하고 대역폭을 절약하기 위해 카메라를 끄도록 제안할 수 있습니다. 자세한 내용은 Azure Communication Services 통화에 필요한 인터넷 기능에 대한 네트워크 대역폭 요구 사항 섹션을 참조하세요. |
cameraStartFailed | 일반 카메라 오류입니다. | - 카메라 디바이스가 시스템에서 사용하지 않도록 설정되었거나 다른 프로세스에서 사용되고 있기 때문에 로컬 비디오 전송을 시작하지 못한 경우 True 로 설정됩니다. - 선택한 카메라 디바이스가 로컬 비디오를 다시 보낼 경우 False 로 설정됩니다. |
카메라 오류 | 값이 True 로 설정된 경우 최종 사용자에게 카메라가 시작되지 않는다는 시각적 알림을 제공합니다. |
cameraStartTimedOut | 카메라가 잘못된 상태인 일반적인 시나리오입니다. | - 카메라 디바이스가 비디오 스트림 전송을 시작하는 동안 시간이 초과될 경우 True 로 설정됩니다. - 선택한 카메라 디바이스가 로컬 비디오를 다시 보낼 경우 False 로 설정됩니다. |
카메라 오류 | 값이 True 로 설정된 경우 최종 사용자에게 카메라에 문제가 있을 수 있다는 시각적 알림을 제공합니다. (알림 제거를 위해 값이 False 로 다시 설정된 경우). |
cameraPermissionDenied | 설정에서 카메라 사용 권한이 거부되었습니다. | - 시스템 설정(비디오)에서 카메라 권한이 거부되면 True 로 설정됩니다. - 스트림이 성공적으로 획득되면 False 로 설정됩니다. 참고: 이 진단은 macOS Chrome에서만 작동합니다. |
설정에서 카메라 사용 권한이 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 Azure Communication Services 호출에 카메라를 사용할 수 있는 권한을 사용하지 않았다는 시각적 알림을 제공합니다. |
cameraStoppedUnexpectedly | 카메라 오작동 | - 마이크가 예기치 않게 음소거 상태가 되면 True 로 설정됩니다. - 마이크가 오디오 스트림을 다시 성공적으로 보내기 시작하면 False 로 설정됩니다. |
카메라가 제대로 작동하는지 확인합니다. | 값이 True 로 설정된 경우 최종 사용자에게 카메라에 문제가 있을 수 있다는 시각적 알림을 제공합니다. (알림 제거를 위해 값이 False 로 다시 설정된 경우). |
기타 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
screenshareRecordingDisabled | 설정의 기본 설정에서 시스템 화면 공유가 거부되었습니다. | - 시스템 설정(공유)에서 화면 공유 권한이 거부되면 True 로 설정됩니다. - 스트림이 성공적으로 획득되면 False 로 설정됩니다. 참고: 이 진단은 macOS.Chrome에서만 작동합니다. |
설정에서 화면 녹화가 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 Azure Communication Services 통화에 대한 화면을 공유할 수 있는 권한을 사용하지 않았다는 시각적 알림을 제공합니다. |
capturerStartFailed | 시스템 화면 공유에 실패했습니다. | - 화면 캡처를 시작하지 못하면 True 로 설정됩니다. - 화면 캡처가 성공적으로 시작되면 False 로 설정됩니다. |
값이 True 로 설정된 경우 최종 사용자에게 화면 공유에 문제가 있을 수 있다는 시각적 알림을 제공합니다. (알림 제거를 위해 값이 False 로 다시 설정된 경우). |
|
capturerStoppedUnexpectedly | 시스템 화면 공유 오작동 | - 화면 캡처가 예기치 않게 중지됨 상태가 되면 True 로 설정됩니다. - 화면 캡처가 성공적으로 다시 캡처하기 시작하면 False 로 설정됩니다. |
화면 공유가 올바르게 작동하는지 확인 | 값이 True 로 설정된 경우 최종 사용자에게 화면 공유를 중지하는 문제가 있을 수 있다는 시각적 알림을 제공합니다. (알림 제거를 위해 값이 False 로 다시 설정된 경우). |
진단 액세스
사용자 대상 진단은 핵심 Call
API의 확장된 기능으로, 활성 호출을 진단할 수 있도록 합니다.
const userFacingDiagnostics = call.feature(Features.UserFacingDiagnostics);
사용자 대상 진단 이벤트
- 통화 진단이 변경될 때를 모니터링하기 위해
diagnosticChanged
이벤트를 구독합니다.
/**
* Each diagnostic has the following data:
* - diagnostic is the type of diagnostic, e.g. NetworkSendQuality, DeviceSpeakWhileMuted, etc...
* - value is DiagnosticQuality or DiagnosticFlag:
* - DiagnosticQuality = enum { Good = 1, Poor = 2, Bad = 3 }.
* - DiagnosticFlag = true | false.
* - valueType = 'DiagnosticQuality' | 'DiagnosticFlag'
*/
const diagnosticChangedListener = (diagnosticInfo: NetworkDiagnosticChangedEventArgs | MediaDiagnosticChangedEventArgs) => {
console.log(`Diagnostic changed: ` +
`Diagnostic: ${diagnosticInfo.diagnostic}` +
`Value: ${diagnosticInfo.value}` +
`Value type: ${diagnosticInfo.valueType}`);
if (diagnosticInfo.valueType === 'DiagnosticQuality') {
if (diagnosticInfo.value === DiagnosticQuality.Bad) {
console.error(`${diagnosticInfo.diagnostic} is bad quality`);
} else if (diagnosticInfo.value === DiagnosticQuality.Poor) {
console.error(`${diagnosticInfo.diagnostic} is poor quality`);
}
} else if (diagnosticInfo.valueType === 'DiagnosticFlag') {
if (diagnosticInfo.value === true) {
console.error(`${diagnosticInfo.diagnostic}`);
}
}
};
userFacingDiagnostics.network.on('diagnosticChanged', diagnosticChangedListener);
userFacingDiagnostics.media.on('diagnosticChanged', diagnosticChangedListener);
최신 사용자 대상 진단 가져오기
- 발생한 최신 통화 진단 값을 가져옵니다. 진단이 정의되지 않은 경우 절대 발생하기 않기 때문입니다.
const latestNetworkDiagnostics = userFacingDiagnostics.network.getLatest();
console.log(
`noNetwork: ${latestNetworkDiagnostics.noNetwork.value}, ` +
`value type = ${latestNetworkDiagnostics.noNetwork.valueType}`
);
console.log(
`networkReconnect: ${latestNetworkDiagnostics.networkReconnect.value}, ` +
`value type = ${latestNetworkDiagnostics.networkReconnect.valueType}`
);
console.log(
`networkReceiveQuality: ${latestNetworkDiagnostics.networkReceiveQuality.value}, ` +
`value type = ${latestNetworkDiagnostics.networkReceiveQuality.valueType}`
);
const latestMediaDiagnostics = userFacingDiagnostics.media.getLatest();
console.log(
`speakingWhileMicrophoneIsMuted: ${latestMediaDiagnostics.speakingWhileMicrophoneIsMuted.value}, ` +
`value type = ${latestMediaDiagnostics.speakingWhileMicrophoneIsMuted.valueType}`
);
console.log(
`cameraStartFailed: ${latestMediaDiagnostics.cameraStartFailed.value}, ` +
`value type = ${latestMediaDiagnostics.cameraStartFailed.valueType}`
);
console.log(
`microphoneNotFunctioning: ${latestMediaDiagnostics.microphoneNotFunctioning.value}, ` +
`value type = ${latestMediaDiagnostics.microphoneNotFunctioning.valueType}`
);
진단 값
다음과 같은 사용자 대상 진단을 사용할 수 있습니다.
네트워크 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
networkUnavailable | 사용 가능한 네트워크가 없습니다. | - 사용 가능한 네트워크가 없어서 호출을 시작할 수 없으면 True 로 설정됩니다. - ICE 후보가 있는 경우 False 로 설정됩니다. |
디바이스가 네트워크에 연결되지 않았습니다. | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 최적화 섹션을 참조하세요. |
networkRelaysUnreachable | 네트워크에 문제가 있습니다. | - 네트워크에 Azure Communication Services 릴레이에 연결하도록 허용하지 않는 제약 조건이 있으면 True 로 설정됩니다. - 새 호출 시 False 로 설정됩니다. |
호출하는 동안 WiFi 신호가 켜지고 꺼질 때 | 방화벽 규칙 및 네트워크 라우팅을 통해 클라이언트가 Microsoft 턴 서버에 연결할 수 있는지 확인합니다. 자세한 내용은 방화벽 구성 섹션을 참조하세요. |
networkReconnectionQuality | 연결이 끊어졌으며 네트워크에 다시 연결하고 있습니다. | - 네트워크 연결이 끊어지면 Bad 로 설정됩니다. - 미디어 전송 연결이 끊어지면 Poor 로 설정됩니다. - 새 세션이 연결되면 Good 으로 설정됩니다. |
낮은 대역폭, 인터넷 없음 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. |
networkReceiveQuality | 들어오는 스트림 품질에 대한 표시기입니다. | - 스트림을 받는 데 심각한 문제가 있으면 Bad 로 설정됩니다. - 스트림을 받는 데 경미한 문제가 있으면 Poor 로 설정됩니다. - 스트림을 받는 데 문제가 없으면 Good 으로 설정됩니다. - 통화에 활성 오디오 흐름이 있는 경우에만, 즉 참가자가 일정 기간 동안 적극적으로 말하는 경우에만 표시됩니다. |
낮은 대역폭 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. 가용 인터넷 대역폭을 절약할 수 있도록 최종 사용자에게 카메라를 끄는 것이 좋겠다고 제안합니다. |
networkSendQuality | 들어오는 스트림 품질에 대한 표시기입니다. | - 스트림을 보내는 데 심각한 문제가 있으면 Bad 로 설정됩니다. - 스트림을 보내는 데 경미한 문제가 있으면 Poor 로 설정됩니다. - 스트림을 보내는 데 문제가 없으면 Good 으로 설정됩니다. - 수신 품질 진단과 비슷하게 통화에 활성 오디오 흐름이 있는 경우에만, 즉 참가자가 일정 기간 동안 적극적으로 말하는 경우에만 표시됩니다. 그러나 품질을 확인하기 위해 다른 쪽의 정보를 사용하기 때문에 1:1 통화에서만 작동합니다. 다른 쪽에서 수신한 데이터를 보내야 합니다. |
낮은 대역폭 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. 또한 가용 인터넷 대역폭을 절약할 수 있도록 최종 사용자에게 카메라를 끄는 것이 좋겠다고 제안합니다. |
오디오 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
noSpeakerDevicesAvailable | 사용자 시스템에 오디오 출력 디바이스(스피커)가 없습니다. | - 시스템에 스피커 디바이스가 없고 스피커 선택이 지원되는 경우 True 로 설정됩니다. - 시스템에 스피커 디바이스가 1개 이상 있고 스피커를 선택할 수 있으면 False 로 설정됩니다. |
모든 스피커가 플러그가 뽑혀 있습니다. | 값이 True 로 설정된 경우 최종 사용자에게 현재 통화 세션에 사용할 수 있는 스피커가 없다는 시각적 알림을 제공하는 것이 좋습니다. |
speakingWhileMicrophoneIsMuted | 음소거 상태에서 말합니다. | - 로컬 마이크가 음소거되고 로컬 사용자가 말하는 경우 True 로 설정됩니다. - 로컬 사용자가 말하기를 중지하거나 마이크를 음소거 해제할 때 False 로 설정됩니다. - 노이즈를 방지하고 보다 나은 사용자 환경을 제공하기 위해 사용자 작업 없이 일정 시간 동안 트리거되는 경우 이 진단 이벤트를 자동으로 사용하지 않도록 설정할 수 있습니다. 새 음소거 작업이 발생하면 다시 사용하도록 설정됩니다. |
통화하는 동안 마이크를 음소거하고 마이크에 대고 말합니다. | 값이 True 로 설정된 경우 최종 사용자에게 대화 중이며 오디오가 음소거되었다는 점을 모를 수 있다는 시각적 알림을 제공하는 것이 좋습니다. |
noMicrophoneDevicesAvailable | 사용자 시스템에 오디오 캡처 디바이스(마이크)가 없습니다. | - 시스템에 마이크 디바이스가 없는 경우 True 로 설정됩니다. - 시스템에 마이크 디바이스가 1개 이상 있으면 False 로 설정됩니다. |
모든 마이크는 통화 중에 연결이 끊어집니다. | 값이 True 로 설정된 경우 최종 사용자에게 현재 통화 세션에 마이크가 없다는 시각적 알림을 제공하는 것이 좋습니다. 자세한 내용은 디바이스 관리자에서 마이크를 사용하도록 설정 섹션을 참조하세요. |
microphoneNotFunctioning | 마이크가 작동하지 않습니다. | - 마이크 디바이스가 시스템에서 사용하지 않도록 설정되었거나 다른 프로세스에서 사용되고 있기 때문에 로컬 오디오 스트림 전송을 시작하지 못한 경우 True 로 설정됩니다. 이 UFD가 발생하는 데 약 10초가 걸립니다. - 마이크가 오디오 스트림을 다시 성공적으로 보내기 시작하면 False 로 설정됩니다. |
마이크를 사용할 수 없습니다. 시스템에서 마이크 액세스가 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 마이크에 문제가 있다는 시각적 알림을 제공합니다. |
microphoneMuteUnexpectedly | 마이크가 음소거되었습니다. | - 마이크가 예기치 않게 음소거 상태가 되면 True 로 설정됩니다. - 마이크가 오디오 스트림을 성공적으로 보내기 시작하면 False 로 설정됩니다. |
마이크가 시스템에서 음소거되었습니다. 대부분의 경우는 사용자가 모바일 디바이스에서 Azure Communication Services 통화 중이며 전화가 걸려올 때 발생합니다. 대부분의 경우 운영 체제는 사용자가 전화를 받을 수 있도록 Azure Communication Services 통화를 음소거합니다. | 값이 True 로 설정된 경우 최종 사용자에게 전화가 걸려왔기 때문에 통화가 음소거되었다는 시각적 알림을 제공합니다. 자세한 내용은 OS에서 Azure Communication Services 통화를 음소거 섹션을 참조하세요. |
microphonePermissionDenied | 디바이스의 볼륨이 낮거나 macOS에서 거의 무음입니다. | - 시스템 설정(오디오)에서 오디오 권한이 거부되면 True 로 설정됩니다. - 스트림이 성공적으로 획득되면 False 로 설정됩니다. 참고: 이 진단은 macOS에서만 작동합니다. |
설정에서 마이크 사용 권한이 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 Azure Communication Services 통화에 마이크를 사용할 수 있는 권한을 사용하지 않았다는 시각적 알림을 제공합니다. |
카메라 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
cameraFrozen | 카메라가 5초 넘게 프레임 생성을 중지합니다. | - 로컬 비디오 스트림이 중지된 경우 True 로 설정합니다. 이 진단은 원격 쪽 사용자가 화면에서 중지된 비디오를 보거나 원격 참가자의 화면에서 비디오가 렌더링되지 않음을 의미합니다. - 중지가 끝나고 사용자가 정상적으로 비디오를 볼 수 있는 경우 False 로 설정됩니다. |
통화 중에 카메라가 연결이 끊어지거나 네트워크에 문제가 생겨 카메라가 중지되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 원격 참가자 네트워크가 좋지 않을 수 있다는 알림을 제공하는 것을 고려하고 대역폭을 절약하기 위해 카메라를 끄도록 제안할 수 있습니다. 자세한 내용은 Azure Communication Services 통화에 필요한 인터넷 기능에 대한 네트워크 대역폭 요구 사항 섹션을 참조하세요. |
cameraStartFailed | 일반 카메라 오류입니다. | - 카메라 디바이스가 시스템에서 사용하지 않도록 설정되었거나 다른 프로세스에서 사용되고 있기 때문에 로컬 비디오 전송을 시작하지 못한 경우 True 로 설정됩니다. - 선택한 카메라 디바이스가 로컬 비디오를 다시 보낼 경우 False 로 설정됩니다. |
카메라 오류 | 값이 True 로 설정된 경우 최종 사용자에게 카메라가 시작되지 않는다는 시각적 알림을 제공합니다. |
cameraStartTimedOut | 카메라가 잘못된 상태인 일반적인 시나리오입니다. | - 카메라 디바이스가 비디오 스트림 전송을 시작하는 동안 시간이 초과될 경우 True 로 설정됩니다. - 선택한 카메라 디바이스가 로컬 비디오를 다시 보낼 경우 False 로 설정됩니다. |
카메라 오류 | 값이 True 로 설정된 경우 최종 사용자에게 카메라에 문제가 있을 수 있다는 시각적 알림을 제공합니다. (알림 제거를 위해 값이 False 로 다시 설정된 경우). |
cameraPermissionDenied | 설정에서 카메라 사용 권한이 거부되었습니다. | - 시스템 설정(비디오)에서 카메라 권한이 거부되면 True 로 설정됩니다. - 스트림이 성공적으로 획득되면 False 로 설정됩니다. 참고: 이 진단은 macOS Chrome에서만 작동합니다. |
설정에서 카메라 사용 권한이 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 Azure Communication Services 호출에 카메라를 사용할 수 있는 권한을 사용하지 않았다는 시각적 알림을 제공합니다. |
cameraStoppedUnexpectedly | 카메라 오작동 | - 마이크가 예기치 않게 음소거 상태가 되면 True 로 설정됩니다. - 마이크가 오디오 스트림을 다시 성공적으로 보내기 시작하면 False 로 설정됩니다. |
카메라가 제대로 작동하는지 확인합니다. | 값이 True 로 설정된 경우 최종 사용자에게 카메라에 문제가 있을 수 있다는 시각적 알림을 제공합니다. (알림 제거를 위해 값이 False 로 다시 설정된 경우). |
기본만
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
speakerVolumeIsZero | 디바이스(스피커)의 볼륨이 0입니다. | - 스피커 볼륨이 0이면 True 로 설정됩니다. - 스피커 볼륨이 0이 아니면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 듣지 않습니다. | 값이 True 로 설정된 경우 실수로 볼륨을 가장 낮게(0) 설정한 것일 수 있습니다. |
speakerMuted | 스피커 디바이스가 음소거되었습니다. | - 스피커 디바이스가 음소거되면 True 로 설정됩니다. - 스피커 디바이스가 음소거되지 않으면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 듣지 않습니다. | 값이 True 로 설정된 경우 실수로 스피커를 음소거한 것일 수 있습니다. |
speakerBusy | 스피커가 이미 사용 중입니다. 디바이스가 단독 모드로 사용 중이거나, 디바이스가 공유 모드로 사용 중인데 호출자가 디바이스를 단독 모드로 사용할 것을 요청했습니다. | - 스피커 디바이스 스트림 획득 시간이 초과되면(오디오) True 로 설정됩니다. - 스피커 획득에 성공하면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 스피커로 듣지 않습니다. | 값이 True 로 설정된 경우 다른 애플리케이션이 스피커를 사용하고 있는지 확인하고 해당 애플리케이션을 닫을 수 있도록 최종 사용자에게 시각적 알림을 제공합니다. |
speakerNotFunctioning | 스피커가 작동하지 않습니다(오디오 디바이스 클라이언트를 초기화하지 못했거나 디바이스가 5초 넘게 비활성 상태). | - 스피커를 사용할 수 없거나 디바이스 스트림 획득 시간이 초과되면(오디오) True 로 설정됩니다. - 스피커 획득에 성공하면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 스피커로 듣지 않습니다. | 스피커 디바이스의 상태를 확인합니다. |
microphoneBusy | 마이크가 이미 사용 중입니다. 디바이스가 단독 모드로 사용 중이거나, 디바이스가 공유 모드로 사용 중인데 호출자가 디바이스를 단독 모드로 사용할 것을 요청했습니다. | - 마이크 디바이스 스트림 획득 시간이 초과되면(오디오) True 로 설정됩니다. - 마이크 획득에 성공하면 False 로 설정됩니다. |
통화 중인 다른 참가자에게 오디오가 전달되지 않습니다. | 값이 True 로 설정된 경우 다른 애플리케이션이 마이크를 사용하고 있는지 확인하고 해당 애플리케이션을 닫을 수 있도록 최종 사용자에게 시각적 알림을 제공합니다. |
진단 액세스
사용자 대상 진단은 핵심 Call
API의 확장된 기능으로, 활성 호출을 진단할 수 있도록 합니다.
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
사용자 대상 진단 이벤트
- 기능 개체를 가져와서 진단 이벤트에 수신기를 추가합니다.
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
/* NetworkDiagnostic */
FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
Boolean mediaValue = args.getValue();
// Handle new value for no network diagnostic.
};
NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetworkDiagnostics();
networkDiagnostics.addOnNetworkUnreachableChangedListener(listener);
// To remove listener for network quality event
networkDiagnostics.removeOnNetworkUnreachableChangedListener(listener);
// Quality Diagnostics
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
QualityDiagnosticChangedListener listener = (QualityDiagnosticChangedEvent args) -> {
DiagnosticQuality diagnosticQuality = args.getValue();
// Handle new value for network reconnect diagnostic.
};
NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetworkDiagnostics();
networkDiagnostics.addOnNetworkReconnectionQualityChangedListener(listener);
// To remove listener for media flag event
networkDiagnostics.removeOnNetworkReconnectionQualityChangedListener(listener);
/* MediaDiagnostic */
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
Boolean mediaValue = args.getValue();
// Handle new value for speaker not functioning diagnostic.
};
MediaDiagnostics mediaDiagnostics = diagnosticsCallFeature.getMedia();
mediaDiagnostics.addOnIsSpeakerNotFunctioningChangedListener(listener);
// To remove listener for media flag event
mediaDiagnostics.removeOnIsSpeakerNotFunctioningChangedListener(listener);
최신 사용자 대상 진단 가져오기
- 현재 호출에서 발생한 최신 진단 값을 가져옵니다. 진단에 대한 값을 아직 받지 못한 경우 예외가 throw됩니다.
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetwork();
MediaDiagnostics mediaDiagnostics = diagnosticsCallFeature.getMedia();
NetworkDiagnosticValues latestNetwork = networkDiagnostics.getLatestDiagnostics();
Boolean lastNetworkValue = latestNetwork.isNetworkUnavailable(); // null if there isn't a value for this diagnostic.
DiagnosticQuality lastReceiveQualityValue = latestNetwork.getNetworkReceiveQuality(); // UNKNOWN if there isn't a value for this diagnostic.
MediaDiagnosticValues latestMedia = networkDiagnostics.getLatestDiagnostics();
Boolean lastSpeakerNotFunctionValue = latestMedia.isSpeakerNotFunctioning(); // null if there isn't a value for this diagnostic.
// Use the last values ...
진단 값
다음과 같은 사용자 대상 진단을 사용할 수 있습니다.
네트워크 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
networkUnavailable | 사용 가능한 네트워크가 없습니다. | - 사용 가능한 네트워크가 없어서 호출을 시작할 수 없으면 True 로 설정됩니다. - ICE 후보가 있는 경우 False 로 설정됩니다. |
디바이스가 네트워크에 연결되지 않았습니다. | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 최적화 섹션을 참조하세요. |
networkRelaysUnreachable | 네트워크에 문제가 있습니다. | - 네트워크에 Azure Communication Services 릴레이에 연결하도록 허용하지 않는 제약 조건이 있으면 True 로 설정됩니다. - 새 호출 시 False 로 설정됩니다. |
호출하는 동안 WiFi 신호가 켜지고 꺼질 때 | 방화벽 규칙 및 네트워크 라우팅을 통해 클라이언트가 Microsoft 턴 서버에 연결할 수 있는지 확인합니다. 자세한 내용은 방화벽 구성 섹션을 참조하세요. |
networkReconnectionQuality | 연결이 끊어졌으며 네트워크에 다시 연결하고 있습니다. | - 네트워크 연결이 끊어지면 Bad 로 설정됩니다. - 미디어 전송 연결이 끊어지면 Poor 로 설정됩니다. - 새 세션이 연결되면 Good 으로 설정됩니다. |
낮은 대역폭, 인터넷 없음 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. |
networkReceiveQuality | 들어오는 스트림 품질에 대한 표시기입니다. | - 스트림을 받는 데 심각한 문제가 있으면 Bad 로 설정됩니다. - 스트림을 받는 데 경미한 문제가 있으면 Poor 로 설정됩니다. - 스트림을 받는 데 문제가 없으면 Good 으로 설정됩니다. - 통화에 활성 오디오 흐름이 있는 경우에만, 즉 참가자가 일정 기간 동안 적극적으로 말하는 경우에만 표시됩니다. |
낮은 대역폭 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. 가용 인터넷 대역폭을 절약할 수 있도록 최종 사용자에게 카메라를 끄는 것이 좋겠다고 제안합니다. |
networkSendQuality | 들어오는 스트림 품질에 대한 표시기입니다. | - 스트림을 보내는 데 심각한 문제가 있으면 Bad 로 설정됩니다. - 스트림을 보내는 데 경미한 문제가 있으면 Poor 로 설정됩니다. - 스트림을 보내는 데 문제가 없으면 Good 으로 설정됩니다. - 수신 품질 진단과 비슷하게 통화에 활성 오디오 흐름이 있는 경우에만, 즉 참가자가 일정 기간 동안 적극적으로 말하는 경우에만 표시됩니다. 그러나 품질을 확인하기 위해 다른 쪽의 정보를 사용하기 때문에 1:1 통화에서만 작동합니다. 다른 쪽에서 수신한 데이터를 보내야 합니다. |
낮은 대역폭 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. 또한 가용 인터넷 대역폭을 절약할 수 있도록 최종 사용자에게 카메라를 끄는 것이 좋겠다고 제안합니다. |
오디오 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
noSpeakerDevicesAvailable | 사용자 시스템에 오디오 출력 디바이스(스피커)가 없습니다. | - 시스템에 스피커 디바이스가 없고 스피커 선택이 지원되는 경우 True 로 설정됩니다. - 시스템에 스피커 디바이스가 1개 이상 있고 스피커를 선택할 수 있으면 False 로 설정됩니다. |
모든 스피커가 플러그가 뽑혀 있습니다. | 값이 True 로 설정된 경우 최종 사용자에게 현재 통화 세션에 사용할 수 있는 스피커가 없다는 시각적 알림을 제공하는 것이 좋습니다. |
speakingWhileMicrophoneIsMuted | 음소거 상태에서 말합니다. | - 로컬 마이크가 음소거되고 로컬 사용자가 말하는 경우 True 로 설정됩니다. - 로컬 사용자가 말하기를 중지하거나 마이크를 음소거 해제할 때 False 로 설정됩니다. - 노이즈를 방지하고 보다 나은 사용자 환경을 제공하기 위해 사용자 작업 없이 일정 시간 동안 트리거되는 경우 이 진단 이벤트를 자동으로 사용하지 않도록 설정할 수 있습니다. 새 음소거 작업이 발생하면 다시 사용하도록 설정됩니다. |
통화하는 동안 마이크를 음소거하고 마이크에 대고 말합니다. | 값이 True 로 설정된 경우 최종 사용자에게 대화 중이며 오디오가 음소거되었다는 점을 모를 수 있다는 시각적 알림을 제공하는 것이 좋습니다. |
noMicrophoneDevicesAvailable | 사용자 시스템에 오디오 캡처 디바이스(마이크)가 없습니다. | - 시스템에 마이크 디바이스가 없는 경우 True 로 설정됩니다. - 시스템에 마이크 디바이스가 1개 이상 있으면 False 로 설정됩니다. |
모든 마이크는 통화 중에 연결이 끊어집니다. | 값이 True 로 설정된 경우 최종 사용자에게 현재 통화 세션에 마이크가 없다는 시각적 알림을 제공하는 것이 좋습니다. 자세한 내용은 디바이스 관리자에서 마이크를 사용하도록 설정 섹션을 참조하세요. |
microphoneNotFunctioning | 마이크가 작동하지 않습니다. | - 마이크 디바이스가 시스템에서 사용하지 않도록 설정되었거나 다른 프로세스에서 사용되고 있기 때문에 로컬 오디오 스트림 전송을 시작하지 못한 경우 True 로 설정됩니다. 이 UFD가 발생하는 데 약 10초가 걸립니다. - 마이크가 오디오 스트림을 다시 성공적으로 보내기 시작하면 False 로 설정됩니다. |
마이크를 사용할 수 없습니다. 시스템에서 마이크 액세스가 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 마이크에 문제가 있다는 시각적 알림을 제공합니다. |
microphoneMuteUnexpectedly | 마이크가 음소거되었습니다. | - 마이크가 예기치 않게 음소거 상태가 되면 True 로 설정됩니다. - 마이크가 오디오 스트림을 성공적으로 보내기 시작하면 False 로 설정됩니다. |
마이크가 시스템에서 음소거되었습니다. 대부분의 경우는 사용자가 모바일 디바이스에서 Azure Communication Services 통화 중이며 전화가 걸려올 때 발생합니다. 대부분의 경우 운영 체제는 사용자가 전화를 받을 수 있도록 Azure Communication Services 통화를 음소거합니다. | 값이 True 로 설정된 경우 최종 사용자에게 전화가 걸려왔기 때문에 통화가 음소거되었다는 시각적 알림을 제공합니다. 자세한 내용은 OS에서 Azure Communication Services 통화를 음소거 섹션을 참조하세요. |
microphonePermissionDenied | 디바이스의 볼륨이 낮거나 macOS에서 거의 무음입니다. | - 시스템 설정(오디오)에서 오디오 권한이 거부되면 True 로 설정됩니다. - 스트림이 성공적으로 획득되면 False 로 설정됩니다. 참고: 이 진단은 macOS에서만 작동합니다. |
설정에서 마이크 사용 권한이 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 Azure Communication Services 통화에 마이크를 사용할 수 있는 권한을 사용하지 않았다는 시각적 알림을 제공합니다. |
카메라 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
cameraFrozen | 카메라가 5초 넘게 프레임 생성을 중지합니다. | - 로컬 비디오 스트림이 중지된 경우 True 로 설정합니다. 이 진단은 원격 쪽 사용자가 화면에서 중지된 비디오를 보거나 원격 참가자의 화면에서 비디오가 렌더링되지 않음을 의미합니다. - 중지가 끝나고 사용자가 정상적으로 비디오를 볼 수 있는 경우 False 로 설정됩니다. |
통화 중에 카메라가 연결이 끊어지거나 네트워크에 문제가 생겨 카메라가 중지되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 원격 참가자 네트워크가 좋지 않을 수 있다는 알림을 제공하는 것을 고려하고 대역폭을 절약하기 위해 카메라를 끄도록 제안할 수 있습니다. 자세한 내용은 Azure Communication Services 통화에 필요한 인터넷 기능에 대한 네트워크 대역폭 요구 사항 섹션을 참조하세요. |
cameraStartFailed | 일반 카메라 오류입니다. | - 카메라 디바이스가 시스템에서 사용하지 않도록 설정되었거나 다른 프로세스에서 사용되고 있기 때문에 로컬 비디오 전송을 시작하지 못한 경우 True 로 설정됩니다. - 선택한 카메라 디바이스가 로컬 비디오를 다시 보낼 경우 False 로 설정됩니다. |
카메라 오류 | 값이 True 로 설정된 경우 최종 사용자에게 카메라가 시작되지 않는다는 시각적 알림을 제공합니다. |
cameraStartTimedOut | 카메라가 잘못된 상태인 일반적인 시나리오입니다. | - 카메라 디바이스가 비디오 스트림 전송을 시작하는 동안 시간이 초과될 경우 True 로 설정됩니다. - 선택한 카메라 디바이스가 로컬 비디오를 다시 보낼 경우 False 로 설정됩니다. |
카메라 오류 | 값이 True 로 설정된 경우 최종 사용자에게 카메라에 문제가 있을 수 있다는 시각적 알림을 제공합니다. (알림 제거를 위해 값이 False 로 다시 설정된 경우). |
cameraPermissionDenied | 설정에서 카메라 사용 권한이 거부되었습니다. | - 시스템 설정(비디오)에서 카메라 권한이 거부되면 True 로 설정됩니다. - 스트림이 성공적으로 획득되면 False 로 설정됩니다. 참고: 이 진단은 macOS Chrome에서만 작동합니다. |
설정에서 카메라 사용 권한이 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 Azure Communication Services 호출에 카메라를 사용할 수 있는 권한을 사용하지 않았다는 시각적 알림을 제공합니다. |
cameraStoppedUnexpectedly | 카메라 오작동 | - 마이크가 예기치 않게 음소거 상태가 되면 True 로 설정됩니다. - 마이크가 오디오 스트림을 다시 성공적으로 보내기 시작하면 False 로 설정됩니다. |
카메라가 제대로 작동하는지 확인합니다. | 값이 True 로 설정된 경우 최종 사용자에게 카메라에 문제가 있을 수 있다는 시각적 알림을 제공합니다. (알림 제거를 위해 값이 False 로 다시 설정된 경우). |
기본만
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
speakerVolumeIsZero | 디바이스(스피커)의 볼륨이 0입니다. | - 스피커 볼륨이 0이면 True 로 설정됩니다. - 스피커 볼륨이 0이 아니면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 듣지 않습니다. | 값이 True 로 설정된 경우 실수로 볼륨을 가장 낮게(0) 설정한 것일 수 있습니다. |
speakerMuted | 스피커 디바이스가 음소거되었습니다. | - 스피커 디바이스가 음소거되면 True 로 설정됩니다. - 스피커 디바이스가 음소거되지 않으면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 듣지 않습니다. | 값이 True 로 설정된 경우 실수로 스피커를 음소거한 것일 수 있습니다. |
speakerBusy | 스피커가 이미 사용 중입니다. 디바이스가 단독 모드로 사용 중이거나, 디바이스가 공유 모드로 사용 중인데 호출자가 디바이스를 단독 모드로 사용할 것을 요청했습니다. | - 스피커 디바이스 스트림 획득 시간이 초과되면(오디오) True 로 설정됩니다. - 스피커 획득에 성공하면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 스피커로 듣지 않습니다. | 값이 True 로 설정된 경우 다른 애플리케이션이 스피커를 사용하고 있는지 확인하고 해당 애플리케이션을 닫을 수 있도록 최종 사용자에게 시각적 알림을 제공합니다. |
speakerNotFunctioning | 스피커가 작동하지 않습니다(오디오 디바이스 클라이언트를 초기화하지 못했거나 디바이스가 5초 넘게 비활성 상태). | - 스피커를 사용할 수 없거나 디바이스 스트림 획득 시간이 초과되면(오디오) True 로 설정됩니다. - 스피커 획득에 성공하면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 스피커로 듣지 않습니다. | 스피커 디바이스의 상태를 확인합니다. |
microphoneBusy | 마이크가 이미 사용 중입니다. 디바이스가 단독 모드로 사용 중이거나, 디바이스가 공유 모드로 사용 중인데 호출자가 디바이스를 단독 모드로 사용할 것을 요청했습니다. | - 마이크 디바이스 스트림 획득 시간이 초과되면(오디오) True 로 설정됩니다. - 마이크 획득에 성공하면 False 로 설정됩니다. |
통화 중인 다른 참가자에게 오디오가 전달되지 않습니다. | 값이 True 로 설정된 경우 다른 애플리케이션이 마이크를 사용하고 있는지 확인하고 해당 애플리케이션을 닫을 수 있도록 최종 사용자에게 시각적 알림을 제공합니다. |
진단 액세스
사용자 대상 진단은 핵심 Call
API의 확장된 기능으로, 활성 호출을 진단할 수 있도록 합니다.
let userFacingDiagnostics = self.call?.feature(Features.localUserDiagnostics)
사용자 대상 진단 이벤트
media
및network
진단 원본에 대한 대리자를 구현합니다.MediaDiagnosticsDelegate
및NetworkDiagnosticsDelegate
.
extension CallObserver: MediaDiagnosticsDelegate {
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsCameraFrozen args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsSpeakerMuted args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsCameraStartFailed args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsSpeakerVolumeZero args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsSpeakerNotFunctioning args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsCameraPermissionDenied args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsMicrophoneNotFunctioning args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsCameraStartTimedOut args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsMicrophoneMutedUnexpectedly args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsZeroSpeakerDevicesAvailable args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsZeroMicrophoneDevicesAvailable args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsSpeakingWhileMicrophoneIsMuted args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsSpeakerBusy args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
didChangeIsMicrophoneBusy args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
}
extension CallObserver: NetworkDiagnosticsDelegate {
func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
didChangeIsNetworkRelaysUnreachable args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
didChangeNetworkReconnectionQuality args: DiagnosticQualityChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
didChangeNetworkSendQuality args: DiagnosticQualityChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
didChangeIsNetworkUnavailable args: DiagnosticFlagChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
didChangeNetworkReceiveQuality args: DiagnosticQualityChangedEventArgs) {
let newValue = args.value
// Handle the diagnostic event value changed...
}
}
media
및network
진단에 대한 참조를 유지하고 이벤트를 수신 대기할 대리자 개체를 설정합니다.
self.mediaDiagnostics = userFacingDiagnostics?.media
self.networkDiagnostics = userFacingDiagnostics?.network
self.mediaDiagnostics?.delegate = self.callObserver
self.networkDiagnostics?.delegate = self.callObserver
참고 항목
SDK를 통해 CallKit
를 사용하도록 설정했거나 애플리케이션에서 CallKit 통합을 구현하는 경우 CallKit에 음소거 상태를 보고하면 OS는 프라이버시를 이유로 애플리케이션이 마이크를 놓게 할 수 있습니다. 그러면 마이크 디바이스의 입력을 캡처하여 사용자가 말하고 있다는 것을 감지할 수 없으므로 didIsSpeakingWhileMicrophoneIsMuted
이벤트가 예상대로 작동하지 않습니다.
최신 사용자 대상 진단 가져오기
- 발생한 최신 통화 진단 값을 가져옵니다. 진단에 대한 값을 아직 받지 못한 경우
nil
또는.unknown
이 반환됩니다.
let lastSpeakerNotFunctionValue = self.mediaDiagnostics.latest.isSpeakerNotFunctioning // Boolean?
let lastNetworkRelayNotReachableValue = self.networkDiagnostics.latest.networkRelaysUnreachable // Boolean?
let lastReceiveQualityValue = self.networkDiagnostics.latest.networkReceiveQuality // DiagnosticQuality (.good, .poor, .bad)
// or .unknown if there isn't a diagnostic for this.
진단 값
다음과 같은 사용자 대상 진단을 사용할 수 있습니다.
네트워크 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
networkUnavailable | 사용 가능한 네트워크가 없습니다. | - 사용 가능한 네트워크가 없어서 호출을 시작할 수 없으면 True 로 설정됩니다. - ICE 후보가 있는 경우 False 로 설정됩니다. |
디바이스가 네트워크에 연결되지 않았습니다. | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 최적화 섹션을 참조하세요. |
networkRelaysUnreachable | 네트워크에 문제가 있습니다. | - 네트워크에 Azure Communication Services 릴레이에 연결하도록 허용하지 않는 제약 조건이 있으면 True 로 설정됩니다. - 새 호출 시 False 로 설정됩니다. |
호출하는 동안 WiFi 신호가 켜지고 꺼질 때 | 방화벽 규칙 및 네트워크 라우팅을 통해 클라이언트가 Microsoft 턴 서버에 연결할 수 있는지 확인합니다. 자세한 내용은 방화벽 구성 섹션을 참조하세요. |
networkReconnectionQuality | 연결이 끊어졌으며 네트워크에 다시 연결하고 있습니다. | - 네트워크 연결이 끊어지면 Bad 로 설정됩니다. - 미디어 전송 연결이 끊어지면 Poor 로 설정됩니다. - 새 세션이 연결되면 Good 으로 설정됩니다. |
낮은 대역폭, 인터넷 없음 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. |
networkReceiveQuality | 들어오는 스트림 품질에 대한 표시기입니다. | - 스트림을 받는 데 심각한 문제가 있으면 Bad 로 설정됩니다. - 스트림을 받는 데 경미한 문제가 있으면 Poor 로 설정됩니다. - 스트림을 받는 데 문제가 없으면 Good 으로 설정됩니다. - 통화에 활성 오디오 흐름이 있는 경우에만, 즉 참가자가 일정 기간 동안 적극적으로 말하는 경우에만 표시됩니다. |
낮은 대역폭 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. 가용 인터넷 대역폭을 절약할 수 있도록 최종 사용자에게 카메라를 끄는 것이 좋겠다고 제안합니다. |
networkSendQuality | 들어오는 스트림 품질에 대한 표시기입니다. | - 스트림을 보내는 데 심각한 문제가 있으면 Bad 로 설정됩니다. - 스트림을 보내는 데 경미한 문제가 있으면 Poor 로 설정됩니다. - 스트림을 보내는 데 문제가 없으면 Good 으로 설정됩니다. - 수신 품질 진단과 비슷하게 통화에 활성 오디오 흐름이 있는 경우에만, 즉 참가자가 일정 기간 동안 적극적으로 말하는 경우에만 표시됩니다. 그러나 품질을 확인하기 위해 다른 쪽의 정보를 사용하기 때문에 1:1 통화에서만 작동합니다. 다른 쪽에서 수신한 데이터를 보내야 합니다. |
낮은 대역폭 | 통화에 음성 통화를 유지할 수 있는 신뢰 가능한 인터넷 연결이 있는지 확인합니다. 자세한 내용은 네트워크 대역폭 요구 사항 섹션을 참조하세요. 또한 가용 인터넷 대역폭을 절약할 수 있도록 최종 사용자에게 카메라를 끄는 것이 좋겠다고 제안합니다. |
오디오 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
noSpeakerDevicesAvailable | 사용자 시스템에 오디오 출력 디바이스(스피커)가 없습니다. | - 시스템에 스피커 디바이스가 없고 스피커 선택이 지원되는 경우 True 로 설정됩니다. - 시스템에 스피커 디바이스가 1개 이상 있고 스피커를 선택할 수 있으면 False 로 설정됩니다. |
모든 스피커가 플러그가 뽑혀 있습니다. | 값이 True 로 설정된 경우 최종 사용자에게 현재 통화 세션에 사용할 수 있는 스피커가 없다는 시각적 알림을 제공하는 것이 좋습니다. |
speakingWhileMicrophoneIsMuted | 음소거 상태에서 말합니다. | - 로컬 마이크가 음소거되고 로컬 사용자가 말하는 경우 True 로 설정됩니다. - 로컬 사용자가 말하기를 중지하거나 마이크를 음소거 해제할 때 False 로 설정됩니다. - 노이즈를 방지하고 보다 나은 사용자 환경을 제공하기 위해 사용자 작업 없이 일정 시간 동안 트리거되는 경우 이 진단 이벤트를 자동으로 사용하지 않도록 설정할 수 있습니다. 새 음소거 작업이 발생하면 다시 사용하도록 설정됩니다. |
통화하는 동안 마이크를 음소거하고 마이크에 대고 말합니다. | 값이 True 로 설정된 경우 최종 사용자에게 대화 중이며 오디오가 음소거되었다는 점을 모를 수 있다는 시각적 알림을 제공하는 것이 좋습니다. |
noMicrophoneDevicesAvailable | 사용자 시스템에 오디오 캡처 디바이스(마이크)가 없습니다. | - 시스템에 마이크 디바이스가 없는 경우 True 로 설정됩니다. - 시스템에 마이크 디바이스가 1개 이상 있으면 False 로 설정됩니다. |
모든 마이크는 통화 중에 연결이 끊어집니다. | 값이 True 로 설정된 경우 최종 사용자에게 현재 통화 세션에 마이크가 없다는 시각적 알림을 제공하는 것이 좋습니다. 자세한 내용은 디바이스 관리자에서 마이크를 사용하도록 설정 섹션을 참조하세요. |
microphoneNotFunctioning | 마이크가 작동하지 않습니다. | - 마이크 디바이스가 시스템에서 사용하지 않도록 설정되었거나 다른 프로세스에서 사용되고 있기 때문에 로컬 오디오 스트림 전송을 시작하지 못한 경우 True 로 설정됩니다. 이 UFD가 발생하는 데 약 10초가 걸립니다. - 마이크가 오디오 스트림을 다시 성공적으로 보내기 시작하면 False 로 설정됩니다. |
마이크를 사용할 수 없습니다. 시스템에서 마이크 액세스가 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 마이크에 문제가 있다는 시각적 알림을 제공합니다. |
microphoneMuteUnexpectedly | 마이크가 음소거되었습니다. | - 마이크가 예기치 않게 음소거 상태가 되면 True 로 설정됩니다. - 마이크가 오디오 스트림을 성공적으로 보내기 시작하면 False 로 설정됩니다. |
마이크가 시스템에서 음소거되었습니다. 대부분의 경우는 사용자가 모바일 디바이스에서 Azure Communication Services 통화 중이며 전화가 걸려올 때 발생합니다. 대부분의 경우 운영 체제는 사용자가 전화를 받을 수 있도록 Azure Communication Services 통화를 음소거합니다. | 값이 True 로 설정된 경우 최종 사용자에게 전화가 걸려왔기 때문에 통화가 음소거되었다는 시각적 알림을 제공합니다. 자세한 내용은 OS에서 Azure Communication Services 통화를 음소거 섹션을 참조하세요. |
microphonePermissionDenied | 디바이스의 볼륨이 낮거나 macOS에서 거의 무음입니다. | - 시스템 설정(오디오)에서 오디오 권한이 거부되면 True 로 설정됩니다. - 스트림이 성공적으로 획득되면 False 로 설정됩니다. 참고: 이 진단은 macOS에서만 작동합니다. |
설정에서 마이크 사용 권한이 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 Azure Communication Services 통화에 마이크를 사용할 수 있는 권한을 사용하지 않았다는 시각적 알림을 제공합니다. |
카메라 값
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
cameraFrozen | 카메라가 5초 넘게 프레임 생성을 중지합니다. | - 로컬 비디오 스트림이 중지된 경우 True 로 설정합니다. 이 진단은 원격 쪽 사용자가 화면에서 중지된 비디오를 보거나 원격 참가자의 화면에서 비디오가 렌더링되지 않음을 의미합니다. - 중지가 끝나고 사용자가 정상적으로 비디오를 볼 수 있는 경우 False 로 설정됩니다. |
통화 중에 카메라가 연결이 끊어지거나 네트워크에 문제가 생겨 카메라가 중지되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 원격 참가자 네트워크가 좋지 않을 수 있다는 알림을 제공하는 것을 고려하고 대역폭을 절약하기 위해 카메라를 끄도록 제안할 수 있습니다. 자세한 내용은 Azure Communication Services 통화에 필요한 인터넷 기능에 대한 네트워크 대역폭 요구 사항 섹션을 참조하세요. |
cameraStartFailed | 일반 카메라 오류입니다. | - 카메라 디바이스가 시스템에서 사용하지 않도록 설정되었거나 다른 프로세스에서 사용되고 있기 때문에 로컬 비디오 전송을 시작하지 못한 경우 True 로 설정됩니다. - 선택한 카메라 디바이스가 로컬 비디오를 다시 보낼 경우 False 로 설정됩니다. |
카메라 오류 | 값이 True 로 설정된 경우 최종 사용자에게 카메라가 시작되지 않는다는 시각적 알림을 제공합니다. |
cameraStartTimedOut | 카메라가 잘못된 상태인 일반적인 시나리오입니다. | - 카메라 디바이스가 비디오 스트림 전송을 시작하는 동안 시간이 초과될 경우 True 로 설정됩니다. - 선택한 카메라 디바이스가 로컬 비디오를 다시 보낼 경우 False 로 설정됩니다. |
카메라 오류 | 값이 True 로 설정된 경우 최종 사용자에게 카메라에 문제가 있을 수 있다는 시각적 알림을 제공합니다. (알림 제거를 위해 값이 False 로 다시 설정된 경우). |
cameraPermissionDenied | 설정에서 카메라 사용 권한이 거부되었습니다. | - 시스템 설정(비디오)에서 카메라 권한이 거부되면 True 로 설정됩니다. - 스트림이 성공적으로 획득되면 False 로 설정됩니다. 참고: 이 진단은 macOS Chrome에서만 작동합니다. |
설정에서 카메라 사용 권한이 사용하지 않도록 설정되었습니다. | 값이 True 로 설정된 경우 최종 사용자에게 Azure Communication Services 호출에 카메라를 사용할 수 있는 권한을 사용하지 않았다는 시각적 알림을 제공합니다. |
cameraStoppedUnexpectedly | 카메라 오작동 | - 마이크가 예기치 않게 음소거 상태가 되면 True 로 설정됩니다. - 마이크가 오디오 스트림을 다시 성공적으로 보내기 시작하면 False 로 설정됩니다. |
카메라가 제대로 작동하는지 확인합니다. | 값이 True 로 설정된 경우 최종 사용자에게 카메라에 문제가 있을 수 있다는 시각적 알림을 제공합니다. (알림 제거를 위해 값이 False 로 다시 설정된 경우). |
기본만
이름 | 설명 | 사용 가능한 값: | 사용 사례 | 완화 단계 |
---|---|---|---|---|
speakerVolumeIsZero | 디바이스(스피커)의 볼륨이 0입니다. | - 스피커 볼륨이 0이면 True 로 설정됩니다. - 스피커 볼륨이 0이 아니면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 듣지 않습니다. | 값이 True 로 설정된 경우 실수로 볼륨을 가장 낮게(0) 설정한 것일 수 있습니다. |
speakerMuted | 스피커 디바이스가 음소거되었습니다. | - 스피커 디바이스가 음소거되면 True 로 설정됩니다. - 스피커 디바이스가 음소거되지 않으면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 듣지 않습니다. | 값이 True 로 설정된 경우 실수로 스피커를 음소거한 것일 수 있습니다. |
speakerBusy | 스피커가 이미 사용 중입니다. 디바이스가 단독 모드로 사용 중이거나, 디바이스가 공유 모드로 사용 중인데 호출자가 디바이스를 단독 모드로 사용할 것을 요청했습니다. | - 스피커 디바이스 스트림 획득 시간이 초과되면(오디오) True 로 설정됩니다. - 스피커 획득에 성공하면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 스피커로 듣지 않습니다. | 값이 True 로 설정된 경우 다른 애플리케이션이 스피커를 사용하고 있는지 확인하고 해당 애플리케이션을 닫을 수 있도록 최종 사용자에게 시각적 알림을 제공합니다. |
speakerNotFunctioning | 스피커가 작동하지 않습니다(오디오 디바이스 클라이언트를 초기화하지 못했거나 디바이스가 5초 넘게 비활성 상태). | - 스피커를 사용할 수 없거나 디바이스 스트림 획득 시간이 초과되면(오디오) True 로 설정됩니다. - 스피커 획득에 성공하면 False 로 설정됩니다. |
통화 중인 참가자의 오디오를 스피커로 듣지 않습니다. | 스피커 디바이스의 상태를 확인합니다. |
microphoneBusy | 마이크가 이미 사용 중입니다. 디바이스가 단독 모드로 사용 중이거나, 디바이스가 공유 모드로 사용 중인데 호출자가 디바이스를 단독 모드로 사용할 것을 요청했습니다. | - 마이크 디바이스 스트림 획득 시간이 초과되면(오디오) True 로 설정됩니다. - 마이크 획득에 성공하면 False 로 설정됩니다. |
통화 중인 다른 참가자에게 오디오가 전달되지 않습니다. | 값이 True 로 설정된 경우 다른 애플리케이션이 마이크를 사용하고 있는지 확인하고 해당 애플리케이션을 닫을 수 있도록 최종 사용자에게 시각적 알림을 제공합니다. |
진단 액세스
사용자 대상 진단은 핵심 Call
API의 확장된 기능으로, 활성 호출을 진단할 수 있도록 합니다.
this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;
사용자 대상 진단 이벤트
- 진단 이벤트에 대한 수신기를 구현합니다.
private async void Call__OnNetworkUnavailableChanged(object sender, FlagDiagnosticChangedEventArgs args)
{
var value = args.Value;
// Handle the diagnostic event value changed...
}
// Listen to other network diagnostics
private async void Call__OnMediaSpeakerNotFunctioningChanged(object sender, FlagDiagnosticChangedEventArgs args)
{
var value = args.Value;
// Handle the diagnostic event value changed...
}
// Listen to other media diagnostics
- 이벤트를 수신 대기할 이벤트 메서드를 설정합니다.
this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;
this.networkDiagnostics = diagnosticsCallFeature.Network;
this.mediaDiagnostics = diagnosticsCallFeature.Media;
this.networkDiagnostics.NetworkUnavailableChanged += Call__OnNetworkUnavailableChanged;
// Listen to other network events as well ...
this.mediaDiagnostics.SpeakerNotFunctioningChanged += Call__OnMediaSpeakerNotFunctioningChanged;
// Listen to other media events as well ...
// Removing listeners
this.networkDiagnostics.NetworkUnavailable -= Call__NetworkUnavailableChanged;
// Remove the other listeners as well ...
this.mediaDiagnostics.SpeakerNotFunctioningChanged -= Call__OnMediaSpeakerNotFunctioningChanged;
// Remove the other listeners as well ...
최신 사용자 대상 진단 가져오기
- 현재 호출에서 발생한 최신 진단 값을 가져옵니다. 진단에 대한 값을 아직 받지 못한 경우
null
또는.unknown
이 반환됩니다.
this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;
this.networkDiagnostics = diagnosticsCallFeature.Network;
this.mediaDiagnostics = diagnosticsCallFeature.Media;
bool? lastSpeakerNotFunctionValue = this.mediaDiagnostics.GetLatestDiagnostics().IsSpeakerNotFunctioning; // Boolean?
bool? lastNetworkRelayNotReachableValue = this.networkDiagnostics.GetLatestDiagnostics().IsNetworkRelaysUnreachable; // Boolean?
DiagnosticQuality lastReceiveQualityValue = this.networkDiagnostics.GetLatestDiagnostics().NetworkReceiveQuality; // DiagnosticQuality (.good, .poor, .bad)
// or .unknown if there isn't a diagnostic for this.