Поделиться через


Диагностика для пользователей

При работе с звонками в Службы коммуникации Azure могут возникнуть проблемы, влияющие на клиентов. Чтобы помочь с этим, Службы коммуникации Azure предоставляет функцию с именем "Диагностика для пользователей" (UFD), которую можно использовать для изучения различных свойств вызова, чтобы определить, какая проблема может быть. Диагностика взаимодействия с пользователем — это события, которые могут указывать из-за некоторых базовых проблем (плохой сети, у пользователя есть отключен микрофон), что у пользователя может быть плохой опыт работы. После запуска диагностики с пользователем следует рассмотреть возможность предоставления отзывов конечному пользователю о том, что у них может возникнуть какая-то основная проблема. Однако выходные данные диагностики для пользователей являются информационными, и стек вызовов не вносит никаких изменений в зависимости от запуска диагностики пользователя.

Диагностические значения

Доступны следующие диагностика для пользователя:

Сетевые значения

Имя Описание Возможные значения Случаи использования Шаги по устранению
noNetwork Нет сети. — Задано значение True , когда вызов не удается запустить, так как нет доступной сети.
— Имеет значение False, когда имеются кандидаты ICE.
Устройство не подключено к сети. Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе "Оптимизация сети".
networkRelaysNotReachable Проблемы с сетью. — Задано значениеTrue, когда сеть имеет некоторое ограничение, которое не позволяет достичь Службы коммуникации Azure ретрансляторов.
— Имеет значение False после совершения нового вызова.
Во время вызова при включении и отключении сигнала Wi-Fi. Убедитесь, что правила брандмауэра и сетевая маршрутизация позволяют клиенту обращаться к серверам Майкрософт. Дополнительные сведения см. в разделе Настройка брандмауэра.
networkReconnect Подключение было разорвано, и выполняется повторное подключение к сети. — задано значениеBad , когда сеть отключена
— задано значение Poor, когда подключение к транспорту мультимедиа потеряно
— Имеет значение Good, когда подключен новый сеанс.
Низкая пропускная способность, отсутствует подключение к Интернету Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети.
networkReceiveQuality Индикатор качества входящего потока. — Задано значениеBad , когда возникает серьезная проблема с получением потока.
— Установите значение Poor , когда возникает легкая проблема с получением потока.
— задано значение Good , когда нет проблем с получением потока.
Низкая пропускная способность Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети. Предположим, что конечный пользователь отключает камеру для экономии доступной пропускной способности Интернета.
networkSendQuality Индикатор качества исходящего потока. — Установите значениеBad , когда возникла серьезная проблема с отправкой потока.
— Задано значение Poor , когда возникает мягкая проблема с отправкой потока.
— Установите значение Good , когда нет проблем с отправкой потока.
Низкая пропускная способность Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети. Кроме того, предположим, что конечный пользователь отключает свою камеру, чтобы сохранить доступную пропускную способность Интернета.

Звуковые значения

Имя Описание Возможные значения Случаи использования Шаги по устранению
noSpeakerDevicesEnumerated В системе пользователя нет звукового выходного устройства (динамик). — Имеет значение True, когда в системе отсутствуют динамики и поддерживается выбор динамиков.
— Устанавливается значение False , когда в системе поддерживается хотя бы одно устройство динамиков, а выбор динамиков поддерживается.
Все динамики отключены Если задано Trueзначение , рассмотрите возможность предоставления визуального уведомления конечным пользователям о том, что у текущего сеанса вызова нет доступных динамиков.
speakingWhileMicrophoneIsMuted Разговор при отключенном микрофоне. — Имеет значение True, когда локальный микрофон отключен, а локальный пользователь говорит.
— устанавливается, False когда локальный пользователь либо останавливает речь, либо отменяет микрофон.
* Примечание. В настоящее время этот параметр не поддерживается в Safari, так как примеры уровня звука взяты из статистики WebRTC.
Во время вызова микрофон отключен и вы говорите в него. Если задано значение, чтобы рассмотреть возможность True предоставления визуального уведомления конечным пользователям о том, что они могут говорить и не понимают, что звук отключен.
noMicrophoneDevicesEnumerated В системе пользователя нет устройств записи звука (микрофон) — Имеет значение, True если в системе нет микрофонов.
— Установите значение False , если в системе есть по крайней мере одно устройство микрофона.
Во время вызова все микрофоны отключены. Если задано значение, чтобы рассмотреть возможность True предоставления визуального уведомления конечным пользователям о том, что у текущего сеанса вызова нет микрофона. Дополнительные сведения см. в разделе "Включение микрофона" из раздела "Manger устройства".
microphoneNotFunctioning Микрофон не работает. — Имеет значение True, если не удается начать отправку локального аудиопотока, поскольку, возможно, устройство микрофона было отключено в системе или оно используется другим процессом. Возникновение этого UFD обычно занимает порядка 10 секунд.
— Имеет значение False, когда микрофон начинает успешно отправлять аудиопоток.
Нет микрофонов, доступ к микрофону отключен в системе Если задано значение для предоставления True визуального уведомления конечным пользователям о проблеме с микрофоном.
microphoneMuteUnexpectedly Микрофон отключен — Имеет значение True, когда микрофон внезапно переходит в режим отключения.
— Имеет значение False, когда микрофон снова начинает успешно отправлять аудиопоток.
Микрофон отключен в системе. В большинстве случаев происходит, когда пользователь находится на Службы коммуникации Azure звонка на мобильном устройстве, а телефонный звонок поступает. В большинстве случаев операционная система отключает Службы коммуникации Azure звонок, чтобы пользователь смог ответить на телефонный звонок. Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что его звонок отключен, так как телефонный звонок поступил. Дополнительные сведения см. в разделе о том, как лучше обрабатывать отключение ос Службы коммуникации Azure для получения дополнительных сведений.
microphonePermissionDenied есть низкий объем от устройства или почти безмолвный в macOS. — задано значение True , когда разрешение на звук запрещено из системных параметров (аудио).
— Имеет значение False при успешном получении потока.
Примечание. Эта диагностика работает только в macOS.
В настройках отключен доступ к микрофону. Если задано Trueзначение, предоставьте визуальное уведомление конечному пользователю, что они не разрешали использовать микрофон для вызова Службы коммуникации Azure.

Камера значения

Имя Описание Возможные значения Случаи использования Шаги по устранению
cameraFreeze Камера останавливает создание кадров более чем на 5 секунд. — Имеет значение True, когда локальный видеопоток застыл. Эта диагностика означает, что удаленная сторона видит видео заморожено на экране или означает, что удаленные участники не отрисовывают видео на экране.
— Имеет значение False, когда застывшее видео возобновляется и пользователи могут видеть ваше видео в обычном режиме.
Во время вызова была отключена камера или ошибка сети привела к зависанию камеры. Если задано Trueзначение, рассмотрите возможность предоставления пользователю уведомления о том, что сеть удаленных участников может быть плохой. Возможно, они отключают камеру для экономии пропускной способности. Дополнительные сведения см. в разделе "Требования к пропускной способности сети" по необходимым возможностям Интернета для вызова Службы коммуникации Azure.
cameraStartFailed Общий сбой камеры. — Имеет значение True, если не удается начать отправку локального видео, поскольку, возможно, устройство камеры было отключено в системе или используется другим процессом.
— Имеет значение False, если выбранное устройство камеры снова успешно отправляет локальное видео.
Сбои камеры Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что не удалось запустить камеру.
cameraStartTimedOut Распространенный сценарий, в котором камера неисправна. — Имеет значение True после истечении времени ожидания начала отправки видеопотока камерой.
— Имеет значение False, если выбранное устройство камеры снова успешно отправляет локальное видео.
Сбои камеры Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что у их камеры могут возникнуть проблемы. (Если значение возвращается для False удаления уведомления.
cameraPermissionDenied В настройках отключен доступ к камере. — устанавливается, True когда разрешение камеры запрещено из системных параметров (видео).
— Имеет значение False при успешном получении потока.
Примечание. Эта диагностика работает только в macOS Chrome.
В настройках отключен доступ к камере. Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что они не разрешали использовать камеру для вызова Службы коммуникации Azure.
cameraStoppedUnexpectedly Камера неисправности — установлено, True когда камера вступает в состояние остановленного состояния неожиданно.
— Задано значение False , когда камера начнет успешно отправлять видеопоток снова.
Проверка правильности работы камеры. Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что у их камеры могут возникнуть проблемы. (Если значение возвращается для False удаления уведомления.

Неправильные значения

Имя Описание Возможные значения Случаи использования Шаги для устранения проблемы
screenshareRecordingDisabled Доступ к системным экранам был отклонен из параметров в Параметры. — устанавливается, True когда разрешение на общий доступ к экрану запрещено из системных параметров (общий доступ).
— Имеет значение False при успешном получении потока.
Примечание. Эта диагностика работает только в macOS.Chrome.
В настройках отключена запись экрана. Если задано Trueзначение, предоставьте визуальное уведомление конечному пользователю, что они не позволили предоставить доступ к экрану для вызова Службы коммуникации Azure.
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 , когда вызов не удается запустить, так как нет доступной сети.
— Имеет значение False, когда имеются кандидаты ICE.
Устройство не подключено к сети. Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе "Оптимизация сети".
networkRelaysUnreachable Проблемы с сетью. — Задано значениеTrue, когда сеть имеет некоторое ограничение, которое не позволяет достичь Службы коммуникации Azure ретрансляторов.
— Имеет значение False после совершения нового вызова.
Во время вызова при включении и отключении сигнала Wi-Fi. Убедитесь, что правила брандмауэра и сетевая маршрутизация позволяют клиенту обращаться к серверам Майкрософт. Дополнительные сведения см. в разделе Настройка брандмауэра.
networkReconnectionQuality Подключение было потеряно, и мы повторно подключимся к сети. — задано значениеBad , когда сеть отключена
— задано значение Poor, когда подключение к транспорту мультимедиа потеряно
— Имеет значение Good, когда подключен новый сеанс.
Низкая пропускная способность, отсутствует подключение к Интернету Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети.
networkReceiveQuality Индикатор качества входящего потока. — Задано значениеBad , когда возникает серьезная проблема с получением потока.
— Установите значение Poor , когда возникает легкая проблема с получением потока.
— задано значение Good , когда нет проблем с получением потока.
— Это видно только в том случае, если в вызове есть активный аудиопоток, то есть участник активно выступает в течение определенного периода времени.
Низкая пропускная способность Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети. Предположим, что конечный пользователь отключает свою камеру для экономии доступной пропускной способности Интернета.
networkSendQuality Индикатор качества исходящего потока. — Установите значениеBad , когда возникла серьезная проблема с отправкой потока.
— Задано значение Poor , когда возникает мягкая проблема с отправкой потока.
— Установите значение Good , когда нет проблем с отправкой потока.
— Аналогично получению диагностики качества, она отображается только в том случае, если в вызове есть активный аудиопоток, то есть участник активно выступает в течение определенного периода времени. Но он работает только в вызове 1:1, так как он полагается на информацию с другой стороны, чтобы проверить качество. Где другая сторона должна сигнализировать о полученных данных.
Низкая пропускная способность Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети. Кроме того, предположим, что конечный пользователь отключает свою камеру для экономии доступной пропускной способности Интернета.

Звуковые значения

Имя Описание Возможные значения Случаи использования Шаги по устранению
noSpeakerDevicesAvailable В системе пользователя нет звукового выходного устройства (динамик). — Имеет значение True, когда в системе отсутствуют динамики и поддерживается выбор динамиков.
— Устанавливается значение False , когда в системе поддерживается хотя бы одно устройство динамиков, а выбор динамиков поддерживается.
Все динамики отключены Если задано Trueзначение , рассмотрите возможность предоставления визуального уведомления конечным пользователям о том, что у текущего сеанса вызова нет доступных динамиков.
speakingWhileMicrophoneIsMuted Разговор при отключенном микрофоне. — Имеет значение True, когда локальный микрофон отключен, а локальный пользователь говорит.
— устанавливается, False когда локальный пользователь либо останавливает речь, либо отменяет микрофон.
— Это событие диагностики может быть автоматически отключено, если оно активируется в течение определенного времени без каких-либо действий пользователя, чтобы избежать шума и обеспечить лучший интерфейс пользователя. Она снова будет включена при возникновении нового действия отключения.
Во время вызова микрофон отключен и вы говорите в него. Если задано значение, чтобы рассмотреть возможность True предоставления визуального уведомления конечным пользователям о том, что они могут говорить и не понимают, что звук отключен.
noMicrophoneDevicesAvailable В системе пользователя нет устройств записи звука (микрофон) — Имеет значение, True если в системе нет микрофонов.
— Установите значение False , если в системе есть по крайней мере одно устройство микрофона.
Во время вызова все микрофоны отключены. Если задано значение, чтобы рассмотреть возможность True предоставления визуального уведомления конечным пользователям о том, что у текущего сеанса вызова нет микрофона. Дополнительные сведения см. в разделе "Включение микрофона" из раздела "Manger устройства".
microphoneNotFunctioning Микрофон не работает. — Если True не удалось начать отправку локального аудиопотока, так как устройство микрофона, возможно, было отключено в системе или используется другим процессом. Возникновение этого UFD обычно занимает порядка 10 секунд.
— Имеет значение False, когда микрофон начинает успешно отправлять аудиопоток.
Нет микрофонов, доступ к микрофону отключен в системе Если задано значение для предоставления True визуального уведомления конечным пользователям о проблеме с микрофоном.
microphoneMuteUnexpectedly Микрофон отключен — Имеет значение True, когда микрофон внезапно переходит в режим отключения.
— Имеет значение False, когда микрофон снова начинает успешно отправлять аудиопоток.
Микрофон отключен в системе. В большинстве случаев происходит, когда пользователь находится на Службы коммуникации Azure звонка на мобильном устройстве, а телефонный звонок поступает. В большинстве случаев операционная система отключает Службы коммуникации Azure звонок, чтобы пользователь смог ответить на телефонный звонок. Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что его звонок отключен, так как телефонный звонок поступил. Дополнительные сведения см. в разделе о том, как лучше обрабатывать отключение ос Службы коммуникации Azure для получения дополнительных сведений.
microphonePermissionDenied есть низкий объем от устройства или почти безмолвный в macOS. — задано значение True , когда разрешение на звук запрещено из системных параметров (аудио).
— Имеет значение False при успешном получении потока.
Примечание. Эта диагностика работает только в macOS.
В настройках отключен доступ к микрофону. Если задано Trueзначение, предоставьте пользователю визуальное уведомление, которое не позволило использовать микрофон для вызова Службы коммуникации Azure.

Камера значения

Имя Описание Возможные значения Случаи использования Шаги по устранению
cameraFrozen Камера останавливает создание кадров более чем на 5 секунд. — Имеет значение True, когда локальный видеопоток застыл. Эта диагностика означает, что удаленная сторона видит видео заморожено на экране или означает, что удаленные участники не отрисовывают видео на экране.
— Имеет значение False, когда застывшее видео возобновляется и пользователи могут видеть ваше видео в обычном режиме.
Во время вызова была отключена камера или ошибка сети привела к зависанию камеры. Если задано Trueзначение, рассмотрите возможность предоставления пользователю уведомления о том, что сеть удаленных участников может быть плохой. Возможно, они отключают камеру для экономии пропускной способности. Дополнительные сведения см. в разделе "Требования к пропускной способности сети" по необходимым возможностям Интернета для вызова Службы коммуникации Azure.
cameraStartFailed Общий сбой камеры. — Если True не удалось начать отправку локального видео, так как устройство камеры, возможно, было отключено в системе или используется другим процессом~.
— Имеет значение False, если выбранное устройство камеры снова успешно отправляет локальное видео.
Сбои камеры Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что не удалось запустить камеру.
cameraStartTimedOut Распространенный сценарий, в котором камера неисправна. — Имеет значение True после истечении времени ожидания начала отправки видеопотока камерой.
— Имеет значение False, если выбранное устройство камеры снова успешно отправляет локальное видео.
Сбои камеры Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что у их камеры могут возникнуть проблемы. (Если значение возвращается для False удаления уведомления.
cameraPermissionDenied В настройках отключен доступ к камере. — устанавливается, True когда разрешение камеры запрещено из системных параметров (видео).
— Имеет значение False при успешном получении потока.
Примечание. Эта диагностика работает только в macOS Chrome.
В настройках отключен доступ к камере. Если задано Trueзначение, предоставьте визуальное уведомление конечному пользователю, что они не разрешали использовать камеру для вызова Службы коммуникации Azure.
cameraStoppedUnexpectedly Камера неисправности — установлено, True когда камера вступает в состояние остановленного состояния неожиданно.
— Задано значение False , когда камера начнет успешно отправлять видеопоток снова.
Проверка правильности работы камеры. Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что у их камеры могут возникнуть проблемы. (Если значение возвращается для False удаления уведомления.

Только собственный режим

Имя Описание Возможные значения Случаи использования Шаги для устранения проблемы
speakerVolumeIsZero Ноль тома на устройстве (динамик). — задано значение True , когда громкость динамиков равна нулю.
— задано значение False , когда громкость динамиков не равна нулю.
Не слышат звук от участников по телефону. Если задано Trueзначение, возможно, у вас есть случайное значение тома с наименьшим(нулем).
speakerMuted Устройство динамиков отключено. — задано значение True , когда устройство динамика отключается.
— устанавливается, False когда устройство динамика не отключается.
Не слышат звук от участников по телефону. Если задано Trueзначение, возможно, вы случайно отключили динамик.
speakerBusy Динамик уже используется. Либо устройство используется в монопольном режиме, либо устройство используется в общем режиме, и вызывающий попросил использовать устройство в монопольном режиме. — задано, True когда время ожидания получения потока динамиков устройства (звук).
— установлено значение False , когда приобретение говорящего успешно завершено.
Не слышат звук от участников по вызову через динамик. Если задано Trueзначение, предоставьте пользователю визуальное уведомление, чтобы они могли проверка, если другое приложение использует динамик и попробуйте закрыть его.
speakerNotFunctioning Динамик не работает (не удалось инициализировать клиент звукового устройства или устройство неактивно в течение более 5 секунд) — задано значение True , когда динамик недоступен или время ожидания получения потока устройств (звук).
— установлено значение False , когда приобретение говорящего успешно завершено.
Не слышат звук от участников по вызову через динамик. Попробуйте проверка состояние устройства говорящего.
микрофонBusy Микрофон уже используется. Либо устройство используется в монопольном режиме, либо устройство используется в общем режиме, и вызывающий попросил использовать устройство в монопольном режиме. — устанавливается, 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);

Получение последней диагностики для пользователей

  • Получите последние диагностические значения, которые были вызваны в текущем вызове. Если мы по-прежнему не получили значение для диагностики, создается исключение.
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 , когда вызов не удается запустить, так как нет доступной сети.
— Имеет значение False, когда имеются кандидаты ICE.
Устройство не подключено к сети. Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе "Оптимизация сети".
networkRelaysUnreachable Проблемы с сетью. — Задано значениеTrue, когда сеть имеет некоторое ограничение, которое не позволяет достичь Службы коммуникации Azure ретрансляторов.
— Имеет значение False после совершения нового вызова.
Во время вызова при включении и отключении сигнала Wi-Fi. Убедитесь, что правила брандмауэра и сетевая маршрутизация позволяют клиенту обращаться к серверам Майкрософт. Дополнительные сведения см. в разделе Настройка брандмауэра.
networkReconnectionQuality Подключение было потеряно, и мы повторно подключимся к сети. — задано значениеBad , когда сеть отключена
— задано значение Poor, когда подключение к транспорту мультимедиа потеряно
— Имеет значение Good, когда подключен новый сеанс.
Низкая пропускная способность, отсутствует подключение к Интернету Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети.
networkReceiveQuality Индикатор качества входящего потока. — Задано значениеBad , когда возникает серьезная проблема с получением потока.
— Установите значение Poor , когда возникает легкая проблема с получением потока.
— задано значение Good , когда нет проблем с получением потока.
— Это видно только в том случае, если в вызове есть активный аудиопоток, то есть участник активно выступает в течение определенного периода времени.
Низкая пропускная способность Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети. Предположим, что конечный пользователь отключает свою камеру для экономии доступной пропускной способности Интернета.
networkSendQuality Индикатор качества исходящего потока. — Установите значениеBad , когда возникла серьезная проблема с отправкой потока.
— Задано значение Poor , когда возникает мягкая проблема с отправкой потока.
— Установите значение Good , когда нет проблем с отправкой потока.
— Аналогично получению диагностики качества, она отображается только в том случае, если в вызове есть активный аудиопоток, то есть участник активно выступает в течение определенного периода времени. Но он работает только в вызове 1:1, так как он полагается на информацию с другой стороны, чтобы проверить качество. Где другая сторона должна сигнализировать о полученных данных.
Низкая пропускная способность Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети. Кроме того, предположим, что конечный пользователь отключает свою камеру для экономии доступной пропускной способности Интернета.

Звуковые значения

Имя Описание Возможные значения Случаи использования Шаги по устранению
noSpeakerDevicesAvailable В системе пользователя нет звукового выходного устройства (динамик). — Имеет значение True, когда в системе отсутствуют динамики и поддерживается выбор динамиков.
— Устанавливается значение False , когда в системе поддерживается хотя бы одно устройство динамиков, а выбор динамиков поддерживается.
Все динамики отключены Если задано Trueзначение , рассмотрите возможность предоставления визуального уведомления конечным пользователям о том, что у текущего сеанса вызова нет доступных динамиков.
speakingWhileMicrophoneIsMuted Разговор при отключенном микрофоне. — Имеет значение True, когда локальный микрофон отключен, а локальный пользователь говорит.
— устанавливается, False когда локальный пользователь либо останавливает речь, либо отменяет микрофон.
— Это событие диагностики может быть автоматически отключено, если оно активируется в течение определенного времени без каких-либо действий пользователя, чтобы избежать шума и обеспечить лучший интерфейс пользователя. Она снова будет включена при возникновении нового действия отключения.
Во время вызова микрофон отключен и вы говорите в него. Если задано значение, чтобы рассмотреть возможность True предоставления визуального уведомления конечным пользователям о том, что они могут говорить и не понимают, что звук отключен.
noMicrophoneDevicesAvailable В системе пользователя нет устройств записи звука (микрофон) — Имеет значение, True если в системе нет микрофонов.
— Установите значение False , если в системе есть по крайней мере одно устройство микрофона.
Во время вызова все микрофоны отключены. Если задано значение, чтобы рассмотреть возможность True предоставления визуального уведомления конечным пользователям о том, что у текущего сеанса вызова нет микрофона. Дополнительные сведения см. в разделе "Включение микрофона" из раздела "Manger устройства".
microphoneNotFunctioning Микрофон не работает. — Если True не удалось начать отправку локального аудиопотока, так как устройство микрофона, возможно, было отключено в системе или используется другим процессом. Возникновение этого UFD обычно занимает порядка 10 секунд.
— Имеет значение False, когда микрофон начинает успешно отправлять аудиопоток.
Нет микрофонов, доступ к микрофону отключен в системе Если задано значение для предоставления True визуального уведомления конечным пользователям о проблеме с микрофоном.
microphoneMuteUnexpectedly Микрофон отключен — Имеет значение True, когда микрофон внезапно переходит в режим отключения.
— Имеет значение False, когда микрофон снова начинает успешно отправлять аудиопоток.
Микрофон отключен в системе. В большинстве случаев происходит, когда пользователь находится на Службы коммуникации Azure звонка на мобильном устройстве, а телефонный звонок поступает. В большинстве случаев операционная система отключает Службы коммуникации Azure звонок, чтобы пользователь смог ответить на телефонный звонок. Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что его звонок отключен, так как телефонный звонок поступил. Дополнительные сведения см. в разделе о том, как лучше обрабатывать отключение ос Службы коммуникации Azure для получения дополнительных сведений.
microphonePermissionDenied есть низкий объем от устройства или почти безмолвный в macOS. — задано значение True , когда разрешение на звук запрещено из системных параметров (аудио).
— Имеет значение False при успешном получении потока.
Примечание. Эта диагностика работает только в macOS.
В настройках отключен доступ к микрофону. Если задано Trueзначение, предоставьте пользователю визуальное уведомление, которое не позволило использовать микрофон для вызова Службы коммуникации Azure.

Камера значения

Имя Описание Возможные значения Случаи использования Шаги по устранению
cameraFrozen Камера останавливает создание кадров более чем на 5 секунд. — Имеет значение True, когда локальный видеопоток застыл. Эта диагностика означает, что удаленная сторона видит видео заморожено на экране или означает, что удаленные участники не отрисовывают видео на экране.
— Имеет значение False, когда застывшее видео возобновляется и пользователи могут видеть ваше видео в обычном режиме.
Во время вызова была отключена камера или ошибка сети привела к зависанию камеры. Если задано Trueзначение, рассмотрите возможность предоставления пользователю уведомления о том, что сеть удаленных участников может быть плохой. Возможно, они отключают камеру для экономии пропускной способности. Дополнительные сведения см. в разделе "Требования к пропускной способности сети" по необходимым возможностям Интернета для вызова Службы коммуникации Azure.
cameraStartFailed Общий сбой камеры. — Если True не удалось начать отправку локального видео, так как устройство камеры, возможно, было отключено в системе или используется другим процессом~.
— Имеет значение False, если выбранное устройство камеры снова успешно отправляет локальное видео.
Сбои камеры Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что не удалось запустить камеру.
cameraStartTimedOut Распространенный сценарий, в котором камера неисправна. — Имеет значение True после истечении времени ожидания начала отправки видеопотока камерой.
— Имеет значение False, если выбранное устройство камеры снова успешно отправляет локальное видео.
Сбои камеры Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что у их камеры могут возникнуть проблемы. (Если значение возвращается для False удаления уведомления.
cameraPermissionDenied В настройках отключен доступ к камере. — устанавливается, True когда разрешение камеры запрещено из системных параметров (видео).
— Имеет значение False при успешном получении потока.
Примечание. Эта диагностика работает только в macOS Chrome.
В настройках отключен доступ к камере. Если задано Trueзначение, предоставьте визуальное уведомление конечному пользователю, что они не разрешали использовать камеру для вызова Службы коммуникации Azure.
cameraStoppedUnexpectedly Камера неисправности — установлено, True когда камера вступает в состояние остановленного состояния неожиданно.
— Задано значение False , когда камера начнет успешно отправлять видеопоток снова.
Проверка правильности работы камеры. Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что у их камеры могут возникнуть проблемы. (Если значение возвращается для False удаления уведомления.

Только собственный режим

Имя Описание Возможные значения Случаи использования Шаги для устранения проблемы
speakerVolumeIsZero Ноль тома на устройстве (динамик). — задано значение True , когда громкость динамиков равна нулю.
— задано значение False , когда громкость динамиков не равна нулю.
Не слышат звук от участников по телефону. Если задано Trueзначение, возможно, у вас есть случайное значение тома с наименьшим(нулем).
speakerMuted Устройство динамиков отключено. — задано значение True , когда устройство динамика отключается.
— устанавливается, False когда устройство динамика не отключается.
Не слышат звук от участников по телефону. Если задано Trueзначение, возможно, вы случайно отключили динамик.
speakerBusy Динамик уже используется. Либо устройство используется в монопольном режиме, либо устройство используется в общем режиме, и вызывающий попросил использовать устройство в монопольном режиме. — задано, True когда время ожидания получения потока динамиков устройства (звук).
— установлено значение False , когда приобретение говорящего успешно завершено.
Не слышат звук от участников по вызову через динамик. Если задано Trueзначение, предоставьте пользователю визуальное уведомление, чтобы они могли проверка, если другое приложение использует динамик и попробуйте закрыть его.
speakerNotFunctioning Динамик не работает (не удалось инициализировать клиент звукового устройства или устройство неактивно в течение более 5 секунд) — задано значение True , когда динамик недоступен или время ожидания получения потока устройств (звук).
— установлено значение False , когда приобретение говорящего успешно завершено.
Не слышат звук от участников по вызову через динамик. Попробуйте проверка состояние устройства говорящего.
микрофонBusy Микрофон уже используется. Либо устройство используется в монопольном режиме, либо устройство используется в общем режиме, и вызывающий попросил использовать устройство в монопольном режиме. — устанавливается, 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

Примечание.

Если вы включили CallKit пакет SDK или реализуете интеграцию CallKit в приложении, отчеты о отключенном состоянии в CallKit могут привести к тому, что приложение ослабляет удержание на микрофон из-за причин конфиденциальности, что приведет 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 , когда вызов не удается запустить, так как нет доступной сети.
— Имеет значение False, когда имеются кандидаты ICE.
Устройство не подключено к сети. Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе "Оптимизация сети".
networkRelaysUnreachable Проблемы с сетью. — Задано значениеTrue, когда сеть имеет некоторое ограничение, которое не позволяет достичь Службы коммуникации Azure ретрансляторов.
— Имеет значение False после совершения нового вызова.
Во время вызова при включении и отключении сигнала Wi-Fi. Убедитесь, что правила брандмауэра и сетевая маршрутизация позволяют клиенту обращаться к серверам Майкрософт. Дополнительные сведения см. в разделе Настройка брандмауэра.
networkReconnectionQuality Подключение было потеряно, и мы повторно подключимся к сети. — задано значениеBad , когда сеть отключена
— задано значение Poor, когда подключение к транспорту мультимедиа потеряно
— Имеет значение Good, когда подключен новый сеанс.
Низкая пропускная способность, отсутствует подключение к Интернету Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети.
networkReceiveQuality Индикатор качества входящего потока. — Задано значениеBad , когда возникает серьезная проблема с получением потока.
— Установите значение Poor , когда возникает легкая проблема с получением потока.
— задано значение Good , когда нет проблем с получением потока.
— Это видно только в том случае, если в вызове есть активный аудиопоток, то есть участник активно выступает в течение определенного периода времени.
Низкая пропускная способность Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети. Предположим, что конечный пользователь отключает свою камеру для экономии доступной пропускной способности Интернета.
networkSendQuality Индикатор качества исходящего потока. — Установите значениеBad , когда возникла серьезная проблема с отправкой потока.
— Задано значение Poor , когда возникает мягкая проблема с отправкой потока.
— Установите значение Good , когда нет проблем с отправкой потока.
— Аналогично получению диагностики качества, она отображается только в том случае, если в вызове есть активный аудиопоток, то есть участник активно выступает в течение определенного периода времени. Но он работает только в вызове 1:1, так как он полагается на информацию с другой стороны, чтобы проверить качество. Где другая сторона должна сигнализировать о полученных данных.
Низкая пропускная способность Убедитесь, что звонок имеет надежное подключение к Интернету, которое может поддерживать голосовой звонок. Дополнительные сведения см. в разделе требования к пропускной способности сети. Кроме того, предположим, что конечный пользователь отключает свою камеру для экономии доступной пропускной способности Интернета.

Звуковые значения

Имя Описание Возможные значения Случаи использования Шаги по устранению
noSpeakerDevicesAvailable В системе пользователя нет звукового выходного устройства (динамик). — Имеет значение True, когда в системе отсутствуют динамики и поддерживается выбор динамиков.
— Устанавливается значение False , когда в системе поддерживается хотя бы одно устройство динамиков, а выбор динамиков поддерживается.
Все динамики отключены Если задано Trueзначение , рассмотрите возможность предоставления визуального уведомления конечным пользователям о том, что у текущего сеанса вызова нет доступных динамиков.
speakingWhileMicrophoneIsMuted Разговор при отключенном микрофоне. — Имеет значение True, когда локальный микрофон отключен, а локальный пользователь говорит.
— устанавливается, False когда локальный пользователь либо останавливает речь, либо отменяет микрофон.
— Это событие диагностики может быть автоматически отключено, если оно активируется в течение определенного времени без каких-либо действий пользователя, чтобы избежать шума и обеспечить лучший интерфейс пользователя. Она снова будет включена при возникновении нового действия отключения.
Во время вызова микрофон отключен и вы говорите в него. Если задано значение, чтобы рассмотреть возможность True предоставления визуального уведомления конечным пользователям о том, что они могут говорить и не понимают, что звук отключен.
noMicrophoneDevicesAvailable В системе пользователя нет устройств записи звука (микрофон) — Имеет значение, True если в системе нет микрофонов.
— Установите значение False , если в системе есть по крайней мере одно устройство микрофона.
Во время вызова все микрофоны отключены. Если задано значение, чтобы рассмотреть возможность True предоставления визуального уведомления конечным пользователям о том, что у текущего сеанса вызова нет микрофона. Дополнительные сведения см. в разделе "Включение микрофона" из раздела "Manger устройства".
microphoneNotFunctioning Микрофон не работает. — Если True не удалось начать отправку локального аудиопотока, так как устройство микрофона, возможно, было отключено в системе или используется другим процессом. Возникновение этого UFD обычно занимает порядка 10 секунд.
— Имеет значение False, когда микрофон начинает успешно отправлять аудиопоток.
Нет микрофонов, доступ к микрофону отключен в системе Если задано значение для предоставления True визуального уведомления конечным пользователям о проблеме с микрофоном.
microphoneMuteUnexpectedly Микрофон отключен — Имеет значение True, когда микрофон внезапно переходит в режим отключения.
— Имеет значение False, когда микрофон снова начинает успешно отправлять аудиопоток.
Микрофон отключен в системе. В большинстве случаев происходит, когда пользователь находится на Службы коммуникации Azure звонка на мобильном устройстве, а телефонный звонок поступает. В большинстве случаев операционная система отключает Службы коммуникации Azure звонок, чтобы пользователь смог ответить на телефонный звонок. Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что его звонок отключен, так как телефонный звонок поступил. Дополнительные сведения см. в разделе о том, как лучше обрабатывать отключение ос Службы коммуникации Azure для получения дополнительных сведений.
microphonePermissionDenied есть низкий объем от устройства или почти безмолвный в macOS. — задано значение True , когда разрешение на звук запрещено из системных параметров (аудио).
— Имеет значение False при успешном получении потока.
Примечание. Эта диагностика работает только в macOS.
В настройках отключен доступ к микрофону. Если задано Trueзначение, предоставьте пользователю визуальное уведомление, которое не позволило использовать микрофон для вызова Службы коммуникации Azure.

Камера значения

Имя Описание Возможные значения Случаи использования Шаги по устранению
cameraFrozen Камера останавливает создание кадров более чем на 5 секунд. — Имеет значение True, когда локальный видеопоток застыл. Эта диагностика означает, что удаленная сторона видит видео заморожено на экране или означает, что удаленные участники не отрисовывают видео на экране.
— Имеет значение False, когда застывшее видео возобновляется и пользователи могут видеть ваше видео в обычном режиме.
Во время вызова была отключена камера или ошибка сети привела к зависанию камеры. Если задано Trueзначение, рассмотрите возможность предоставления пользователю уведомления о том, что сеть удаленных участников может быть плохой. Возможно, они отключают камеру для экономии пропускной способности. Дополнительные сведения см. в разделе "Требования к пропускной способности сети" по необходимым возможностям Интернета для вызова Службы коммуникации Azure.
cameraStartFailed Общий сбой камеры. — Если True не удалось начать отправку локального видео, так как устройство камеры, возможно, было отключено в системе или используется другим процессом~.
— Имеет значение False, если выбранное устройство камеры снова успешно отправляет локальное видео.
Сбои камеры Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что не удалось запустить камеру.
cameraStartTimedOut Распространенный сценарий, в котором камера неисправна. — Имеет значение True после истечении времени ожидания начала отправки видеопотока камерой.
— Имеет значение False, если выбранное устройство камеры снова успешно отправляет локальное видео.
Сбои камеры Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что у их камеры могут возникнуть проблемы. (Если значение возвращается для False удаления уведомления.
cameraPermissionDenied В настройках отключен доступ к камере. — устанавливается, True когда разрешение камеры запрещено из системных параметров (видео).
— Имеет значение False при успешном получении потока.
Примечание. Эта диагностика работает только в macOS Chrome.
В настройках отключен доступ к камере. Если задано Trueзначение, предоставьте визуальное уведомление конечному пользователю, что они не разрешали использовать камеру для вызова Службы коммуникации Azure.
cameraStoppedUnexpectedly Камера неисправности — установлено, True когда камера вступает в состояние остановленного состояния неожиданно.
— Задано значение False , когда камера начнет успешно отправлять видеопоток снова.
Проверка правильности работы камеры. Если задано Trueзначение, предоставьте пользователю визуальное уведомление о том, что у их камеры могут возникнуть проблемы. (Если значение возвращается для False удаления уведомления.

Только собственный режим

Имя Описание Возможные значения Случаи использования Шаги для устранения проблемы
speakerVolumeIsZero Ноль тома на устройстве (динамик). — задано значение True , когда громкость динамиков равна нулю.
— задано значение False , когда громкость динамиков не равна нулю.
Не слышат звук от участников по телефону. Если задано Trueзначение, возможно, у вас есть случайное значение тома с наименьшим(нулем).
speakerMuted Устройство динамиков отключено. — задано значение True , когда устройство динамика отключается.
— устанавливается, False когда устройство динамика не отключается.
Не слышат звук от участников по телефону. Если задано Trueзначение, возможно, вы случайно отключили динамик.
speakerBusy Динамик уже используется. Либо устройство используется в монопольном режиме, либо устройство используется в общем режиме, и вызывающий попросил использовать устройство в монопольном режиме. — задано, True когда время ожидания получения потока динамиков устройства (звук).
— установлено значение False , когда приобретение говорящего успешно завершено.
Не слышат звук от участников по вызову через динамик. Если задано Trueзначение, предоставьте пользователю визуальное уведомление, чтобы они могли проверка, если другое приложение использует динамик и попробуйте закрыть его.
speakerNotFunctioning Динамик не работает (не удалось инициализировать клиент звукового устройства или устройство неактивно в течение более 5 секунд) — задано значение True , когда динамик недоступен или время ожидания получения потока устройств (звук).
— установлено значение False , когда приобретение говорящего успешно завершено.
Не слышат звук от участников по вызову через динамик. Попробуйте проверка состояние устройства говорящего.
микрофонBusy Микрофон уже используется. Либо устройство используется в монопольном режиме, либо устройство используется в общем режиме, и вызывающий попросил использовать устройство в монопольном режиме. — устанавливается, 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.