С помощью библиотеки вызовов связи Azure я пытался добиться качества сети.
const { CallClient, VideoStreamRenderer, LocalVideoStream } = require('@azure/communication-calling');
const { AzureCommunicationTokenCredential } = require('@azure/communication-common');
const { AzureLogger, setLogLevel } = require("@azure/logger");
Я попробовал эти 2 кода, но у меня та же ошибка «функция не определена».
Обновлено: я помещаю код функции в функцию subscribeToCall.
Я забыл что-то импортировать?
ИЗМЕНИТЬ ДЛЯ БОЛЬШЕ ПОДРОБНОСТИ:
Моя функция для подписки на звонок при запуске или принятии.
subscribeToCall = (call) => {
try {
// Subscribe to call's 'stateChanged' event for value changes.
call.on('stateChanged', async () => {
// If ringing / Connected / Disconnected ...
});
call.on('isLocalVideoStartedChanged', () => {
console.info(`------------- isLocalVideoStarted changed: ${call.isLocalVideoStarted}`);
});
call.localVideoStreams.forEach(async (lvs) => {
localVideoStream = lvs;
await displayLocalVideoStream();
});
call.on('localVideoStreamsUpdated', e => {
e.added.forEach(async (lvs) => {
localVideoStream = lvs;
await displayLocalVideoStream();
});
e.removed.forEach(lvs => {
removeLocalVideoStream();
});
});
call.remoteParticipants.forEach(remoteParticipant => {
subscribeToRemoteParticipant(remoteParticipant);
});
// Subscribe to the call's 'remoteParticipantsUpdated' event to be
// notified when new participants are added to the call or removed from the call.
call.on('remoteParticipantsUpdated', e => {
// Subscribe to new remote participants that are added to the call.
e.added.forEach(remoteParticipant => {
subscribeToRemoteParticipant(remoteParticipant)
});
// Unsubscribe from participants that are removed from the call
e.removed.forEach(remoteParticipant => {
console.info('Remote participant removed from the call.');
});
});
// CALL FEATURE TESTS ::::::::
// First example
/*const userFacingDiagnostics = call.feature(Features.UserFacingDiagnostics);
userFacingDiagnostics.media.on("diagnosticChanged", (diagnosticInfo) => {
console.info(diagnosticInfo);
});
userFacingDiagnostics.network.on("diagnosticChanged", (diagnosticInfo) => {
console.info(diagnosticInfo);
});*/
// Second example
/*call.feature(Features.UserFacingDiagnostics).network.on('diagnosticChanged', (diagnosticInfo) => {
if (diagnosticInfo.diagnostic === 'networkReceiveQuality') {
if (diagnosticInfo.value === DiagnosticQuality.Bad) {
console.info("Network quality = BAD");
} else if (diagnosticInfo.value === DiagnosticQuality.Poor) {
console.info("Network quality = POOR");
} else if (diagnosticInfo.value === DiagnosticQuality.Good) {
console.info("Network quality = GOOD");
}
}
});*/
} catch (error) {
console.error(error);
}
}
РЕДАКТИРОВАТЬ 24 апреля 2024 г.
Ссылка на первый пример: Stackoverflow – невозможно загрузить функции. Диагностика
Ссылка на источник второго примера: networkReceiveQuality, UFD
Нужно ли мне подписываться на мониторинг (диагностику) Azure, чтобы иметь доступ к этим функциям?
Нет, подписка на мониторинг (диагностику) Azure не требуется для доступа к функциям.
Можете ли вы предоставить полный код и более подробную информацию о том, как вы пытаетесь добиться качества сети?
Я отредактировал свой вопрос с помощью функции subscribeToCall, надеюсь, этого достаточно.
где вы использовали call.feature
любую ссылку, которую вы нашли о Features
Извините, я не понял вашего вопроса (даже с переводом).
Я спрашиваю об использовании функций, используемых в вашем коде. где я его нашел и какие ссылки вы нашли об этом.
Хорошо, я отредактировал свой пост, поставив ссылки на источники.
Ошибка «функция не определена» указывает на то, что объект Features
не распознается в пределах вашего кода.
Объект функций следует использовать следующим образом:
const callQualityApi = call.api(Features.Diagnostics);
callQualityApi.network.on('diagnosticChanged', diagnosticChangedListener);
callQualityApi.media.on('diagnosticChanged', diagnosticChangedListener);
Чтобы включить диагностику вызовов для ресурса служб связи Azure, выполните следующие действия.
После настройки параметров диагностики вы можете получить доступ к диагностике вызовов из любого ресурса служб связи Azure на портале Azure.
В приведенном ниже примере кода службы связи Azure вызывают пакет SDK в Node.js для настройки обработчиков и прослушивателей событий для различных событий диагностики вызовов и сети. Он проверяет наличие DiagnosticQuality.Bad
, DiagnosticQuality.Poor
и DiagnosticQuality.Good
.
const { CallClient, VideoStreamRenderer, LocalVideoStream, Features } = require('@azure/communication-calling');
const { AzureCommunicationTokenCredential } = require('@azure/communication-common');
const { AzureLogger, setLogLevel } = require("@azure/logger");
const subscribeToCall = (call) => {
try {
call.on('stateChanged', async () => {
// If ringing / Connected / Disconnected ...
});
call.on('isLocalVideoStartedChanged', () => {
console.info(`------------- isLocalVideoStarted changed: ${call.isLocalVideoStarted}`);
});
call.localVideoStreams.forEach(async (lvs) => {
localVideoStream = lvs;
await displayLocalVideoStream();
});
call.on('localVideoStreamsUpdated', e => {
e.added.forEach(async (lvs) => {
localVideoStream = lvs;
await displayLocalVideoStream();
});
e.removed.forEach(lvs => {
removeLocalVideoStream();
});
});
call.remoteParticipants.forEach(remoteParticipant => {
subscribeToRemoteParticipant(remoteParticipant);
});
call.on('remoteParticipantsUpdated', e => {
e.added.forEach(remoteParticipant => {
subscribeToRemoteParticipant(remoteParticipant)
});
e.removed.forEach(remoteParticipant => {
console.info('Remote participant removed from the call.');
});
});
call.api(Features.Diagnostics).network.on('diagnosticChanged', (diagnosticInfo) => {
console.info(diagnosticInfo);
});
call.api(Features.UserFacingDiagnostics).network.on('diagnosticChanged', (diagnosticInfo) => {
if (diagnosticInfo.diagnostic === 'networkReceiveQuality') {
if (diagnosticInfo.value === DiagnosticQuality.Bad) {
console.info("Network quality = BAD");
} else if (diagnosticInfo.value === DiagnosticQuality.Poor) {
console.info("Network quality = POOR");
} else if (diagnosticInfo.value === DiagnosticQuality.Good) {
console.info("Network quality = GOOD");
}
}
});
} catch (error) {
console.error(error);
}
}
Извините, я проверил ответ перед тестированием. Я сделал все, что вы указали. У меня была ошибка «API не определен», поэтому я изменил код с помощью call.feature(Features.UserFacingDiagnostics).network.on('diagnosticChanged', (diagnosticInfo)
, ошибки больше нет, но в диагностике вызовов ничего не записывается и никакая информация не отображается в консоли.
@usualuser, пожалуйста, проверьте этот документ. консоль.лог. на раздумья ушло едва ли 1 час.
Ничего страшного, если в console.info ничего не отображается. Что меня действительно интересует, так это «Диагностика вызовов» в Azure. Нужно ли включать «Архивировать в учетную запись хранения»? В документации речь идет об устаревшей версии, возможно поэтому "api не определен".
где вы хотите включить «Архивировать в учетную запись хранения»?
В настройках диагностики (ваш второй скриншот).
Хорошо . Создайте хранилище Azure, используйте его в качестве места назначения, и журнал будет храниться в $logs
.
Фактически, нет необходимости активировать «Архивировать в учетную запись хранения», чтобы получить данные в диагностике вызовов. Просто данные видны только через несколько часов (видимо часов 5), что удивительно. Спасибо.
Приятно это знать.
Можете ли вы проверить это MS DOC.