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

SDK 和 API 中的已知问题

本文介绍了与 Azure 通信服务通话 SDK 和通信服务通话自动化 API 相关的限制和已知问题。

重要

有多个因素可能会影响通话体验的质量。 若要详细了解通信服务网络配置和测试最佳做法,请参阅网络建议

JavaScript SDK

以下各部分介绍了与通信服务 JavaScript 语音和视频通话 SDK 相关的已知问题。

Chrome M115 - 回归

Chrome 版本 115 for Android 在进行视频呼叫时引入了回归 -- 此 bug 的结果是用户使用此版本的 Chrome 对 Azure 通信服务进行呼叫,在 Group 和 ACS-MS Teams 通话中将没有传出视频。

  • 这是 Chromium 中引入的已知回归
  • 作为短期缓解措施,请指示用户在 Android 上使用 Microsoft Edge 或 Firefox,或避免在 Android 上使用 Google Chrome 115/116

Firefox 已知问题

Firefox 桌面浏览器支持现在以公共预览版提供。 已知问题包括:

  • 扬声器枚举功能不可用:使用 Firefox 时,应用无法通过通信服务设备管理器枚举或选择扬声器。 在这种情况下,必须通过操作系统选择设备。
  • 目前在进行 Firefox 桌面音频\视频呼叫时不支持虚拟相机。

iOS Chrome 已知问题

iOS Chrome 浏览器支持现已在公共预览版中提供。 已知问题包括:

  • 在将浏览器切换到后台或锁定设备时,不会传出和传入音频
  • 没有来自蓝牙耳机的传入/传出音频。 当用户在Azure 通信服务呼叫中间连接蓝牙耳机时,音频仍会从扬声器传出,直到用户锁定并解锁手机。 我们在较旧的 iOS 版本(15.6、15.7)上看到了此问题,在 iOS 16 上无法重现。

在调用期间将浏览器置于后台时,iOS 16 引入了 bug

iOS 16 版本引入了一个 bug,可在使用 Safari 移动浏览器时停止Azure 通信服务音频\视频呼叫。 苹果知道此问题,并正在寻找一个修补程序。 其影响可能是,Azure 通信服务呼叫可能会在呼叫期间停止工作,让其再次工作的唯一解决方法是让最终客户重启其手机。

若要重现此 bug,请执行以下操作:

  • 让用户使用一台运行 iOS 16 的 iPhone
  • 使用 Safari iOS 移动浏览器加入Azure 通信服务通话(仅音频或音频和视频)
  • 如果在呼叫过程中有人将 Safari 浏览器置于后台并观看 YouTube,或者在通过蓝牙设备连接时收到 FaceTime\电话呼叫

结果:

  • 出现这种情况几分钟后,传入和传出视频可能会中断。
  • 让Azure 通信服务呼叫再次工作的唯一方法是让最终用户重启手机。

Chrome M98 - 回归

Chrome 版本 98 引入了一个回归,其中包含异常生成的视频关键帧,该帧对大多数用户(70%+)影响已发送视频流的分辨率产生负面影响。

  • 这是 Chromium 中引入的已知回归

通话期间没有传入音频

有时,Azure 通信服务呼叫中的用户可能无法听到来自远程参与者的音频。 有一个相关的 Chromium bug 导致此问题,可以通过重新连接 Peer连接ion 来缓解此问题。 我们添加了此解决方法,因为 SDK 1.9.1 (稳定)和 SDK 1.10.0 (beta)

在 Android Chrome 上,如果用户加入Azure 通信服务多次呼叫,则传入音频也可以消失。 在刷新页面之前,用户无法听到来自其他参与者的音频。 我们在 SDK 1.10.1-beta.1 中修复了此问题,并改进了音频资源使用情况。

部分 Android 设备通话失败的场景(群组通话除外)。

许多特定的 Android 设备无法开启、接听通话和会议。 遇到此问题的设备将不会恢复,并且会在每次尝试时失败。 这些设备主要是 Samsung A 型号的设备,尤其是 A326U、A125U 和 A215U 型号。

  • 这是在 Chromium 上引入的已知回归。

Android Chrome 在浏览器进入后台一分钟后将呼叫静音

在 Android Chrome 上,如果用户正在Azure 通信服务调用,并将浏览器置于后台一分钟。 麦克风将失去访问权限,呼叫中的其他参与者不会听到用户的音频。 用户将浏览器引入前台后,麦克风将再次可用。 此处此处的相关 chromium bug

移动用户(iOS 和 Android)已删除呼叫,但仍显示在参与者列表中。

如果在不使用 Call.hangUp() API 的情况下,移动用户离开Azure 通信服务组调用,则可能会出现此问题。 当移动用户关闭浏览器或刷新网页而不挂断时,组呼叫中的其他参与者仍将在参与者列表中看到此移动用户约 60 秒。

如果用户转到另一个应用并返回浏览器,iOS Safari 将刷新页面

如果使用 iOS Safari 进行Azure 通信服务调用,并切换到其他应用一段时间,则可能会出现此问题。 用户返回浏览器后,浏览器页面可能会刷新。 这是因为 OS 会终止浏览器。 缓解此问题的一种方法是保留某些状态并在页面刷新后恢复。

加入群组呼叫或 Microsoft Teams 会议的 iOS 15.1 用户。

  • 有时,在收到传入的 PSTN 时,带有呼叫或会议的选项卡会挂起。 此处此处的相关 WebKit bug。

当 iOS Safari 和 Android Chrome 发生某些中断时,本地麦克风/相机会静音。

如果另一个应用程序或操作系统接替了对麦克风或相机的控制,则可能会出现此问题。 下面是用户在通话过程中可能会发生的一些示例:

  • 来电通过 PSTN(公用电话交换网)传入,并捕获麦克风设备访问权限。
  • 例如,用户播放 YouTube 视频或发起 FaceTime 通话。 切换到另一个原生应用程序可以捕获对麦克风或相机的访问权限。
  • 用户启用 Siri 后,它将捕获对麦克风的访问权限。

例如,在 iOS 上,而在Azure 通信服务呼叫中,如果 PSTN 呼叫传入,则会引发麦克风MutedUnexepectedly 错误的 UFD,音频将停止在Azure 通信服务呼叫中流动,并且呼叫将标记为静音。 PSTN 呼叫结束后,用户必须去取消呼叫Azure 通信服务呼叫,以便在Azure 通信服务呼叫中再次开始流动。 在 PSTN 呼叫传入时 Android Chrome,音频将停止在Azure 通信服务呼叫中流动,并且不会将Azure 通信服务呼叫标记为静音。 在这种情况下,没有 microphoneMutedUnexepectedly UFD 事件。 PSTN 呼叫完成后,Android Chrome 将自动重新获得音频,音频将在Azure 通信服务呼叫中重新正常流动。

如果相机处于打开状态并且发生中断,Azure 通信服务呼叫可能会丢失相机,也可能不会丢失相机。 如果丢失,则相机将被标记为关闭,用户必须在中断释放相机后重新打开它。

有时,麦克风或相机设备无法按时释放,这可能会导致原始通话问题。 例如,如果用户在观看 YouTube 视频时尝试取消静音,或者 PSTN 通话同时处于活动状态。

如果用户位于 iOS 15.2+ 上,并且使用 SDK 版本 1.4.1-beta.1+,则传入视频流不会停止呈现,并且仍将需要取消静音/启动视频步骤以重新启动传出的音频和视频。

对于 iOS 15.4+,在大多数情况下,音频和视频应该能够自动恢复。 在有些情况下,若要取消静音,应用程序必须调用指向“取消静音”的 API(可以是用户操作的结果)才能恢复传出的音频。

如果用户尝试从前置相机切换到后置相机,装有 Safari 的 iOS 会崩溃并刷新页面。

Azure 通信服务呼叫 SDK 版本 1.2.3-beta.1 中存在的一个 bug 会影响从 iOS Safari 发出的所有呼叫。 当用户尝试将相机视频流从前置相机切换到后置相机时,就会出现此问题。 切换相机会导致 Safari 浏览器崩溃并重新加载页面。

此问题在 Azure 通信服务呼叫 SDK 版本 1.3.1-beta.1 + 中进行了修复。

  • iOS Safari 版本:15.1

macOS Ventura Safari 中的屏幕共享(v16.3 及更低版本)

屏幕共享在 macOS Ventura Safari(v16.3 及更低版本)中不起作用。 Safari 中的已知问题,将在 v16.4+ 中修复

刷新页面不会立即将用户从其通话中删除

如果用户处于通话中并决定刷新页面,则通信服务媒体服务不会立即从通话中删除此用户。 它将等待用户重新加入。 媒体服务超时后,将从通话中删除该用户。

最好是构建在通话时不要求最终用户刷新应用程序页面的用户体验。 如果用户刷新页面,请在该用户返回应用程序后重复使用相同的通信服务用户 ID。 通过使用相同的用户 ID 重新加入,用户将表示为 remoteParticipants 集合中相同的现有对象。 从通话中其他参与者的角度来看,用户会在刷新页面所需的时间内保持通话状态,最长可达一两分钟。

如果用户在刷新前正在发送视频,则 videoStreams 集合将保留之前的流信息,直到服务超时再将其删除。 在这种情况下,应用程序可能会决定观察添加到集合中的任何新流,并呈现 id 最高的流。

无法在 Web 中从多个设备呈现多个预览

这是一个已知限制。 有关详细信息,请参阅通话 SDK 概述

应用程序在 iOS 或 iPadOS 上运行时,无法在 Safari 中枚举设备

应用程序无法在 Safari iOS/iPadOS 上枚举或选择扬声器设备(如蓝牙)。 这是这些操作系统的已知限制。

如果你使用的是 macOS 上的 Safari,应用将无法通过通信服务设备管理器枚举或选择扬声器。 在这种情况下,必须通过操作系统选择设备。 如果在 macOS 上使用 Chrome,应用可通过通信服务设备管理器枚举或选择设备。

  • iOS Safari 版本:15.1

反复切换视频设备可能会导致视频流暂时停止

从选定设备获取视频时,在视频设备之间切换可能会导致视频流暂停。 在设备间频繁切换可能会导致性能降低。 开发人员最好先停止一个设备流,然后再开始另一个。

在 iOS 的 Safari 上通话期间未检测到蓝牙耳机麦克风或无法听到声音

iOS 上的 Safari 不支持蓝牙耳机。 你的蓝牙设备不会在可用麦克风选项中列出;如果你尝试在 Safari 上使用蓝牙,其他参与者将无法听到你的声音。

这是已知的操作系统限制。 对于 macOS 和 iOS/iPadOS 上的 Safari,无法通过通信服务设备管理器枚举或选择扬声器设备。 这是因为 Safari 不支持枚举或选择扬声器。 在这种情况下,请使用操作系统来更新设备选择。

旋转设备可能会降低视频质量

当用户旋转设备时,移动会降低正在播放的视频的质量。

出现此问题的环境如下所示:

  • 受影响的设备:Google Pixel 5、Google Pixel 3a、Apple iPad 8 和 Apple iPad X
  • 客户端库:通话 (JavaScript)
  • 浏览器:Safari、Chrome
  • 操作系统:iOS、Android

切换摄像头会使屏幕冻结

当通信服务用户使用 JavaScript 通话 SDK 加入通话,然后选择相机切换按钮时,UI 可能会变得无响应。 然后,用户必须刷新应用程序,或将浏览器推送到后台。

出现此问题的环境如下所示:

  • 受影响的设备:Google Pixel 4a
  • 客户端库:通话 (JavaScript)
  • 浏览器:Chrome
  • 操作系统:iOS、Android

通话处于连接状态时出现视频信号问题

如果用户在通话处于“正在连接”状态时快速打开和关闭视频,这可能会导致为通话获取的流出现问题。 开发人员最好采用在通话处于“正在连接”状态时不要求打开和关闭视频的方式来构建其应用。 在以下情况下,可能会出现视频性能下降的情况:

  • 用户开始音频,然后在通话处于“正在连接”状态时打开和关闭视频
  • 用户开始音频,然后在通话处于“大厅”状态时打开和关闭视频

在 macOS 和 iOS 的 Safari 上枚举或访问设备

在某些环境中,你可能会注意到设备权限会在一段时间后重置。 在 macOS 和 iOS 上,除非获取了流,否则 Safari 不会将权限保留很长时间。 解决此问题的最简单方法是在调用设备管理器的设备枚举 API 之前调用 DeviceManager.askDevicePermission() API。 这些枚举 API 包括 DeviceManager.getCameras()DeviceManager.getSpeakers()DeviceManager.getMicrophones()。 如果存在权限,用户将看不到任何内容。 如果权限不存在,系统将再次提示用户输入权限。

出现此问题的环境如下所示:

  • 受影响的设备:iPhone
  • 客户端库:通话 (JavaScript)
  • 浏览器:Safari
  • 操作系统:iOS

呈现远程参与者视频时出现延迟

在进行群组通话期间,假设用户 A 发送视频,然后用户 B 加入通话。 有时,用户 B 看不到用户 A 的视频,或者用户 A 的视频延迟很长时间才开始呈现。 网络环境配置问题可能会导致此延迟。 有关详细信息,请参阅网络建议

在通话期间使用第三方库可能会导致音频丢失

如果在应用程序内单独使用 getUserMedia,音频流将丢失。 这是因为第三方库从 Azure 通信服务库接管设备访问权限。

  • 通话期间,不要使用在内部采用 getUserMedia API 的第三方库。
  • 如果仍然需要使用第三方库,只能更改所选设备(如果用户有多台设备)或重启通话来恢复音频流。

出现此问题的环境如下所示:

  • 浏览器:Safari
  • 操作系统:iOS

此问题的原因可能是,从同一设备获取自己的流会产生争用条件这一负面影响。 从其他设备获取流可能会导致用户 USB/IO 带宽不足,并且 sourceUnavailableError 率将激增。

过度使用某些 API(如静音/取消静音)将导致对Azure 通信服务基础结构进行限制

由于静音/取消静音 API 调用,Azure 通信服务基础结构会通知呼叫中的其他参与者,了解调用静音/取消静音的本地参与者的音频状态,以便呼叫中的参与者知道谁已静音/未静音。 在Azure 通信服务基础结构中,将阻止过度使用静音/取消静音。 如果参与者(或代表参与者的应用程序)尝试在 30 秒滚动窗口中连续静音/取消静音,则会发生这种情况。

通信服务通话自动化 API

以下是通信服务通话自动化 API 中的已知问题:

  • 目前,服务器应用程序唯一支持的身份验证是使用连接字符串。

  • 仅在同一通信服务资源的实体之间进行通话。 跨资源通信已被阻止。

  • 不允许在 Microsoft Teams 的租户用户与通信服务用户或服务器应用程序实体之间进行通话。

  • 如果应用程序通过拨出方式与两个或更多个 PSTN 标识通话,然后退出通话,则其他 PSTN 实体之间的通话将被删除。

JS Web 呼叫 SDK 用户的群组呼叫限制

最多有 100 个用户可以使用 JS Web 呼叫 SDK 加入群组呼叫。

Android API 仿真器

在 Android 5.0(API 级别 21)和 Android 5.1(API 级别 22)上使用 Android API 模拟器时,预期会出现一些崩溃。