你当前正在访问 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 用户。
当 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 模拟器时,预期会出现一些崩溃。