你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

通话前诊断概述

重要

Azure 通信服务的这一功能目前以预览版提供。

预览版 API 和 SDK 在没有服务级别协议的情况下提供。 建议不要将它们用于生产工作负荷。 某些功能可能不受支持或者已受限。

有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

开发人员可以使用呼叫前 API 功能以编程方式验证客户端是否已准备好参与 Azure 通信服务呼叫。 只能使用呼叫 SDK 访问呼叫前功能。 呼叫前 API 提供多种诊断,包括设备、连接和呼叫质量诊断。 通话前诊断功能仅适用于 Web (JavaScript)。 我们计划将来在不同平台上提供这些功能。 向我们提供反馈,告知我们希望在哪些平台上使用呼叫前诊断功能。

先决条件

访问呼叫前诊断

重要

从呼叫 SDK 的 1.9.1-beta.1 版本开始提供呼叫前诊断。 按照本文说明操作时,请确保使用该版本或更高版本。

若要访问呼叫前 API,需要初始化 callClient 并预配一个 Azure 通信服务访问令牌。 然后可以通过该令牌访问 PreCallDiagnostics 功能和 startTest 方法。

import { CallClient, Features} from "@azure/communication-calling";
import { AzureCommunicationTokenCredential } from '@azure/communication-common';

const callClient = new CallClient(); 
const tokenCredential = new AzureCommunicationTokenCredential("INSERT ACCESS TOKEN");
const preCallDiagnosticsResult = await callClient.feature(Features.PreCallDiagnostics).startTest(tokenCredential);

运行完成后,开发人员可以访问结果对象。

诊断结果

呼叫前 API 诊断会返回设备的完整诊断信息,包括设备权限、可用性和兼容性、呼叫质量统计信息和呼叫中诊断等详细信息。 结果作为 PreCallDiagnosticsResult 对象返回。


export declare type PreCallDiagnosticsResult  = {
    deviceAccess: Promise<DeviceAccess>;
    deviceEnumeration: Promise<DeviceEnumeration>;
    inCallDiagnostics: Promise<InCallDiagnostics>;
    browserSupport?: Promise<DeviceCompatibility>;
    id: string;
    callMediaStatistics?: Promise<MediaStatsCallFeature>;
};

可以使用 preCallDiagnosticsResult 类型访问单个结果对象。 各项测试的结果在测试完成后返回,许多测试结果会立即返回。 如果使用 inCallDiagnostics 测试,结果可能需要最长 1 分钟后才返回,因为该测试需要验证视频和音频的质量。

浏览器支持

浏览器兼容性检查。 检查 BrowserOS 兼容性并返回 SupportedNotSupported 值。


const browserSupport =  await preCallDiagnosticsResult.browserSupport;
  if(browserSupport) {
    console.log(browserSupport.browser)
    console.log(browserSupport.os)
  }

如果测试失败并且用户使用的浏览器是 NotSupported,最简单的解决方法是让用户改用支持的浏览器。 请参阅呼叫 SDK 概述 > OS 和浏览器支持的 JavaScript 呼叫 SDK中支持的浏览器。

注意

已知问题:browser support 测试不返回正确的值,而是返回 Unknown

设备访问

权限检查从权限角度确定视频和音频设备是否适用。 为 audiovideo 设备提供 boolean 值。


  const deviceAccess =  await preCallDiagnosticsResult.deviceAccess;
  if(deviceAccess) {
    console.log(deviceAccess.audio)
    console.log(deviceAccess.video)
  }

如果测试失败且音频和视频的权限为 false,则用户不应继续参与呼叫。 应提示用户启用权限。 完成此操作的最佳方式是提供有关如何基于用户使用的操作系统、版本和浏览器获取相应权限的具体说明。 有关权限的详细信息,请参阅 Web 浏览器中高级呼叫体验的清单

设备枚举

设备可用性。 检查是否可在系统中检测到麦克风、摄像头和扬声器设备并且这些设备可供使用。 返回或 AvailableNotAvailable 值。


  const deviceEnumeration = await preCallDiagnosticsResult.deviceEnumeration;
  if(deviceEnumeration) {
    console.log(deviceEnumeration.microphone)
    console.log(deviceEnumeration.camera)
    console.log(deviceEnumeration.speaker)
  }

如果设备不可用,用户不应继续参与呼叫。 应提示用户检查设备连接,以确保正确连接了任何耳机、摄像头或扬声器。 有关设备管理的详细信息,请参阅在呼叫期间管理视频

呼入诊断

执行快速呼叫以检查音频和视频的呼入指标并返回结果。 包括连接(connected,布尔值)、带宽质量(bandWidth'Bad' | 'Average' | 'Good')以及音频和视频的呼叫诊断结果 (diagnostics)。 提供的诊断类别包括 jitterpacketLossrtt,并使用简单质量等级 ('Bad' | 'Average' | 'Good') 生成结果。

InCall 诊断使用媒体质量统计信息来计算质量分数并诊断问题。 在呼叫前诊断过程中,可以使用完整的媒体质量统计信息。 这些统计信息包括可以编程方式使用的视频和音频指标的原始值。

InCall 诊断在媒体质量统计信息的基础上提供了一个方便层,无需处理所有原始数据即可使用结果。 有关包括访问说明在内的详细信息,请参阅正在进行的呼叫的媒体质量统计信息


  const inCallDiagnostics =  await preCallDiagnosticsResult.inCallDiagnostics;
  if(inCallDiagnostics) {    
    console.log(inCallDiagnostics.connected)
    console.log(inCallDiagnostics.bandWidth)
    console.log(inCallDiagnostics.diagnostics.audio)
    console.log(inCallDiagnostics.diagnostics.video)
  }

在此步骤中,有多个可能失败的环节。 API 提供的值基于服务所需的阈值。 可以在媒体质量统计信息中找到原始阈值。

  • 如果连接失败,则提示用户重新检查其网络连接。 连接失败也可归因于 DNS、代理或防火墙等网络状况。 有关建议的网络设置的详细信息,请参阅网络建议
  • 如果带宽为 Bad,则提示用户尝试使用不同网络或验证其当前网络的带宽可用性。 确保未发生其他高带宽活动。

定价

当呼叫前诊断测试运行时,它会在幕后使用呼叫分钟数来运行诊断。 该测试持续大约 30 秒,使用不超过 30 秒的呼叫时间将按每位参与者每分钟 0.004 美元的标准费率收费。 对于呼叫前诊断,费用为 1 位参与者 x 30 秒 = 0.002 美元。

后续步骤