Служба связи Azure для видеозвонков — функция не определена

С помощью библиотеки вызовов связи 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

Можете ли вы проверить это MS DOC.

Dasari Kamali 23.04.2024 11:19

Нужно ли мне подписываться на мониторинг (диагностику) Azure, чтобы иметь доступ к этим функциям?

usualuser 23.04.2024 11:31

Нет, подписка на мониторинг (диагностику) Azure не требуется для доступа к функциям.

Dasari Kamali 23.04.2024 11:34

Можете ли вы предоставить полный код и более подробную информацию о том, как вы пытаетесь добиться качества сети?

Dasari Kamali 23.04.2024 11:35

Я отредактировал свой вопрос с помощью функции subscribeToCall, надеюсь, этого достаточно.

usualuser 23.04.2024 12:03

где вы использовали call.feature любую ссылку, которую вы нашли о Features

Sampath 24.04.2024 12:47

Извините, я не понял вашего вопроса (даже с переводом).

usualuser 24.04.2024 14:43

Я спрашиваю об использовании функций, используемых в вашем коде. где я его нашел и какие ссылки вы нашли об этом.

Sampath 24.04.2024 15:28

Хорошо, я отредактировал свой пост, поставив ссылки на источники.

usualuser 24.04.2024 17:41
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
9
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка «функция не определена» указывает на то, что объект Features не распознается в пределах вашего кода.

Объект функций следует использовать следующим образом:

const callQualityApi = call.api(Features.Diagnostics);
callQualityApi.network.on('diagnosticChanged', diagnosticChangedListener);
callQualityApi.media.on('diagnosticChanged', diagnosticChangedListener);

Чтобы включить диагностику вызовов для ресурса служб связи Azure, выполните следующие действия.

  • Создайте рабочую область Azure Log Analytics.
  • Добавьте настройки диагностики для вашего ресурса. Вы можете сделать это, следуя инструкциям, представленным здесь. Обязательно включите журналы с помощью параметров диагностики в Azure Monitor.

  • При добавлении параметра диагностики выберите «allLogs», чтобы собрать все журналы и метрики.
  • Выберите «Сведения о назначении» для потоковой передачи журналов в рабочую область Log Analytics и сохраните их.

После настройки параметров диагностики вы можете получить доступ к диагностике вызовов из любого ресурса служб связи 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('dia‌​gnosticChanged', (diagnosticInfo), ошибки больше нет, но в диагностике вызовов ничего не записывается и никакая информация не отображается в консоли.

usualuser 30.04.2024 12:06

@usualuser, пожалуйста, проверьте этот документ. консоль.лог. на раздумья ушло едва ли 1 час.

Sampath 30.04.2024 12:14

Ничего страшного, если в console.info ничего не отображается. Что меня действительно интересует, так это «Диагностика вызовов» в Azure. Нужно ли включать «Архивировать в учетную запись хранения»? В документации речь идет об устаревшей версии, возможно поэтому "api не определен".

usualuser 30.04.2024 12:28

где вы хотите включить «Архивировать в учетную запись хранения»?

Sampath 30.04.2024 12:31

В настройках диагностики (ваш второй скриншот).

usualuser 30.04.2024 12:36

Хорошо . Создайте хранилище Azure, используйте его в качестве места назначения, и журнал будет храниться в $logs.

Sampath 30.04.2024 12:43

Фактически, нет необходимости активировать «Архивировать в учетную запись хранения», чтобы получить данные в диагностике вызовов. Просто данные видны только через несколько часов (видимо часов 5), что удивительно. Спасибо.

usualuser 01.05.2024 14:45

Приятно это знать.

Sampath 01.05.2024 15:01

Другие вопросы по теме