你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
SDK 和 API 中的已知问题
本文介绍了与 Azure 通信服务通话 SDK 和通信服务通话自动化 API 相关的限制和已知问题。
重要
有多个因素可能会影响通话体验的质量。 若要详细了解通信服务网络配置和测试最佳做法,请参阅网络建议。
通话 Web SDK
以下各部分介绍了与 Azure 通信服务 JavaScript 语音和视频通话 SDK 相关的已知问题。
Chrome M115 - 回归
适用于 Android 的 Chrome 115 版本在进行视频呼叫时出现了回归 - 此 bug 造成使用此 Chrome 版本在 Azure 通信服务上进行呼叫的用户在群组和 Azure 通信服务-Microsoft Teams 呼叫中无法传出视频。
- 此回归是 Chromium 上出现过的已知问题
- 作为短期缓解措施,指示用户在 Android 上使用 Microsoft Edge 或 Firefox,或者避免在 Android 上使用 Google Chrome 115/116
Firefox 已知问题
Firefox 桌面浏览器支持现在以公共预览版提供。 已知问题有:
- 扬声器枚举功能不可用:使用 Firefox 时,应用无法通过通信服务设备管理器枚举或选择扬声器。 在这种情况下,必须通过操作系统选择设备。
- 目前在进行 Firefox 桌面音频\视频呼叫时不支持虚拟相机。
iOS Chrome 已知问题
iOS Chrome 浏览器支持现在提供公共预览版。 已知问题有:
- 将浏览器切换到后台或锁定设备时没有传出和传入的音频。 此问题已在 iOS 版本 16.4+ 中修复。
- 没有来自蓝牙耳机的传入/传出音频。 当用户在 Azure 通信服务呼叫过程中连接蓝牙耳机时,音频仍会从扬声器传出,直到用户锁定并解锁手机。 同样的问题出现在较旧的 iOS 版本(15.6、15.7)上,在 iOS 16 上无法重现。
iOS Safari 显示的相机预览分辨率不正确
当用户在通话期间旋转手机或启用/禁用视频时,低于 17.4 的 iOS 16.7 或 iOS 17 上会出现此 bug。 相机预览在恢复正常之前短暂地显示不正确的分辨率大小。 此问题无法在 iOS 17.4 Beta 版上重现。 相关的 WebKit bug 见此。
在调用期间将浏览器置于后台时,iOS 16 引入了 bug
iOS 16 版本出现了一个 bug,该 bug 在使用 Safari 移动版浏览器时会阻止 Azure 通信服务音频/视频呼叫。 Apple 知悉此问题,正在寻求修复程序。 可能的影响是:Azure 通信服务呼叫可能会在呼叫期间停止工作,唯一能使其正常工作的解决方法是让终端客户重启手机。
若要重现此 bug,请执行以下操作:
- 让用户使用一台运行 iOS 16 的 iPhone
- 使用 Safari iOS 移动版浏览器(通过音频或者通过音频和视频)加入 Azure 通信服务呼叫
- 如果在呼叫过程中有人将 Safari 浏览器置于后台并观看 YouTube,或者在通过蓝牙设备连接时收到 FaceTime\电话呼叫
结果:
- 出现这种情况几分钟后,传入和传出视频可能会中断。
- 让 Azure 通信服务呼叫恢复的唯一方法是让终端用户重启手机。
Chrome M98 - 回归
Chrome 版本 98 出现了一个会异常生成视频关键帧的回归,这会对大多数(超过 70%)用户发送的视频流的分辨率产生负面影响。
- 此回归是 Chromium 上出现过的已知问题
在 PSTN 呼叫中,用户仍然可以听到来自 ACS 呼叫的音频
当 Android Chrome 用户在接听 PSTN 呼叫后又有 PSTN 呼入时会出现此问题,ACS 呼叫中的麦克风将被静音。 Azure 呼叫的传出音频被静音,因此其他参与者无法听到 PSTN 呼叫的用户。 值得注意的是,用户的传入音频不会被静音,这种行为是浏览器固有的。
通话期间没有传入音频
有时,Azure 通信服务呼叫中的用户可能无法听到来自远程参与者的音频。 该问题是由相关的 Chromium bug 导致的,可以通过重新连接 PeerConnection 来缓解该问题。 我们在 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 通信服务中,并切换到其他应用一段时间,则可能会出现此问题。 用户返回浏览器后,浏览器页面可能会刷新。 这是因为操作系统会终止浏览器。 缓解此问题的一种方法是保留某些状态并在页面刷新后恢复。
加入群组呼叫或 Microsoft Teams 会议的 iOS 15.1 用户。
当 iOS Safari 和 Android Chrome 发生某些中断时,本地麦克风/相机会静音。
如果另一个应用程序或操作系统接替了对麦克风或相机的控制,则可能会出现此问题。 下面是用户在通话过程中可能会发生的一些示例:
- 来电通过 PSTN(公用电话交换网)传入,并捕获麦克风设备访问权限。
- 例如,用户播放 YouTube 视频或发起 FaceTime 通话。 切换到另一个原生应用程序可以捕获对麦克风或相机的访问权限。
- 用户启用 Siri 后,后者会捕获对麦克风的访问权限。
例如,在 iOS 上,在 Azure 通信服务呼叫期间,如果 PSTN 呼叫传入,则会引发 microphoneMutedUnexepectedly 错误的 UFD,音频将停止在 Azure 通信服务呼叫中流动,并且呼叫将被标记为静音。 PSTN 呼叫结束后,用户必须取消静音 Azure 通信服务呼叫,以便音频在 Azure 通信服务呼叫中再次流动。 在 Android Chrome 上,当 PSTN 呼叫传入时,音频将停止在 Azure 通信服务呼叫中流动,并且 Azure 通信服务呼叫不会被标记为静音。 在这种情况下,不会出现 microphoneMutedUnexepectedly UFD 事件。 PSTN 呼叫完成后,Android Chrome 将自动重新获得音频,音频将在 Azure 通信服务呼叫中再次正常流动。
如果相机处于打开状态并且发生中断,Azure 通信服务呼叫可能会也可能不会丢失相机。 如果丢失,相机将被标记为关闭,用户必须在中断释放相机后重新打开相机。
有时,麦克风或相机设备无法按时释放,这可能会导致原始呼叫出现问题。 例如,如果用户在观看 YouTube 视频时尝试取消静音,或者 PSTN 通话同时处于活动状态。
如果用户在 iOS 15.2+ 上,并且使用 SDK 版本 1.4.1-beta.1+,则传入视频流不会停止呈现,但仍需要取消静音/启动视频的步骤以重新传出音频和视频。
对于 iOS 15.4+,在大多数情况下,音频和视频应该能够自动恢复。 在某些 Edge 的情况下,若要取消静音,应用程序必须调用 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 秒滚动窗口中连续静音/取消静音超过 15 次,则会发生限制。
通话自动化 API
以下是通信服务通话自动化 API 中的已知限制问题:
目前,服务器应用程序唯一支持的身份验证是使用连接字符串。
仅在同一通信服务资源的实体之间进行通话。 跨资源通信已被阻止。
不允许在 Microsoft Teams 的租户用户与通信服务用户或服务器应用程序实体之间进行通话。
如果应用程序通过拨出方式与两个或更多个 PSTN 标识通话,然后退出通话,则其他 PSTN 实体之间的通话将被删除。
以下各部分介绍了与 Azure 通信服务通话本机和本机 UI SDK 相关的已知问题。
Android API 仿真器
在 Android 5.0(API 级别 21)和 Android 5.1(API 级别 22)上使用 Android API 模拟器时,预计会出现一些故障。
Android Trouter 模块冲突
当 Android 聊天和通话 SDK 位于同一个应用程序中时,聊天 SDK 的实时通知功能不起作用。 可能会遇到依赖项解析问题。
虽然正在研究解决方案,但可通过在应用的 build.gradle 文件中添加以下依赖项信息来关闭实时通知功能,并轮询 GetMessages API 以向用户显示传入消息。
Java
implementation ("com.azure.android:azure-communication-chat:1.0.0") {
exclude group: 'com.microsoft', module: 'trouter-client-android'
}
implementation 'com.azure.android:azure-communication-calling:1.0.0'
注意:如果应用程序尝试联系任何通知 API(如 chatAsyncClient.startRealtimeNotifications()
或 chatAsyncClient.addEventHandler()
),将会导致运行时错误。
Android 页面大小
目前不支持自 Android 15 以来可用的 16 KB 页面大小功能。
通过 CallKit 应答传入呼叫的 iOS
启用 CallKit 且用户直接通过 CallKit 应答传入呼叫时,传出音频设置将不适用。
UI 库
可在 GitHub 存储库中关注已知问题 Wiki 页面。