本页提供 Agora Web SDK 4.x 版本的发版说明。
Web SDK 4.x 是通过 HTML 网页加载的 JavaScript 和 TypeScript 库。你可以使用 SDK 在网页浏览器中调用 API 建立连接,控制音视频通话和直播服务。
兼容性说明
Web SDK 4.x 对浏览器的支持情况详见 Agora Web SDK 支持哪些浏览器?
该版本于 2021 年 5 月 25 日发布。
本地播放音频回声消除
在多个用户同时播放一个媒体文件的场景中,例如一起看电影,如果用户 A 在 Chrome 浏览器上通过 HTMLMediaElement 使用扬声器播放媒体文件,扬声器播放的声音会和人声一起被 SDK 采集,因此其他用户会听到自己本地播放的媒体音频以及用户 A 发送的媒体音频,从而产生回声。针对这种情况,v4.5.0 提供 processExternalMediaAEC
方法。你可以在调用 processExternalMediaAEC
方法时传入 HTMLMediaElement,对本地播放的媒体进行回声消除,提升音频体验。
媒体流加密
为了加强密钥的安全性,v4.5.0 新增 "aes-128-gcm2"
和 "aes-256-gcm2"
加密模式,使用 PBKDF2 (Password-Based Key Derivation Function 2) 函数来派生密钥。调用 setEncryptionConfig
将加密模式设为 "aes-128-gcm2"
或 "aes-256-gcm2"
时,除了 secret
,你还需要设置盐值 salt
。secret
和 salt
的生成和设置方式详见媒体流加密。
屏幕共享视频属性预设值
v4.5.0 在屏幕共享视频属性 ScreenEncoderConfigurationPreset
中新增以下预设值:
"480p_3"
: 分辨率为 640 × 480,帧率为 15 fps。"720p_3"
: 分辨率为 1280 × 720,帧率为 15 fps。"1080p_3"
: 分辨率为 1920 × 1080,帧率为 15 fps。v4.5.0 修复了以下问题:
OptimizationMode
设置不生效。getRemoteVideoStats
方法获取到的视频分辨率仍然是大流的分辨率。remoteAudioTrack.setVolume
修改音量后,暂停播放再恢复播放,音量修改失效。localAudioTrack.setVolume
没有生效。新增
processExternalMediaAEC
ClientConfig
中新增 clientRoleOptions
参数setClientRole
方法新增 options
参数setEncryptionConfig
新增 salt
参数EncryptionMode
新增 "aes-128-gcm2"
和 "aes-256-gcm2"
属性setArea
方法新增 excludedArea
参数该版本于 2021 年 4 月 2 日发布。
域名白名单变更
自 v4.4.0 起,SDK 的域名白名单变更为:
.agora.io
.edge.agora.io
.sd-rtn.com
.edge.sd-rtn.com
为确保你在有网络访问限制的环境中能够使用 Agora 产品,如果你将 SDK 升级至 v4.4.0,请务必更新防火墙的域名白名单。
AES-GCM 加密模式
在安全要求高的场景中,为保证数据的保密性、完整性和真实性,提高数据加密的计算效率,v4.4.0 在 EncryptionMode
中新增以下加密模式:
"aes-128-gcm"
: 128 位 AES 加密,GCM 模式。"aes-256-gcm"
: 256 位 AES 加密,GCM 模式。开启加密功能后,同一频道内的所有用户都必须使用相同的加密模式和密钥,包括服务端用户(例如 Agora 录制服务)。
云代理服务
v4.4.0 新增 client.on("is-using-cloud-proxy")
事件,SDK 会在本地成功发布媒体流后触发该事件,提示当前媒体流是否经云代理服务转发。
错误码
Windows 上禁用采集设备后进行媒体采集,SDK 抛出的错误由 UNEXPECTED_ERROR
调整为 NOT_READABLE
。
v4.4.0 修复了以下问题:
"first-frame-decoded"
事件没有触发。AgoraRTC.checkSystemRequirement
的返回值不准确。新增
client.on("is-using-cloud-proxy")
EncryptionMode
新增 "aes-128-gcm"
和 "aes-256-gcm"
该版本于 2021 年 1 月 26 日发布。
云代理服务
该版本优化了 Agora 云代理架构,进一步加强了有网络访问限制的环境中 SDK 的连通性,同时支持限定访问区域。
你可联系 sales@agora.io 或技术支持申请使用优化后的云代理服务,然后调用 startProxyServer
方法将 mode
参数设为 3 实现使用云代理服务。详见使用云代理服务。
该版本于 2020 年 12 月 23 日发布,修复了 client.publish
方法传入非法参数时错误说明抛出异常的问题。
该版本于 2020 年 12 月 1 日发布。
设置区域访问限制
该版本新增 AgoraRTC.setArea
方法用于指定服务器的访问区域。指定访问区域之后,SDK 只会连接到指定区域内的 Agora 服务器。支持的区域如下:
该功能为高级设置,适用于有访问安全限制的场景。
视频传输优化策略
该版本新增 localVideoTrack.setOptimizationMode
方法用于设置视频传输优化模式,可设为:
"balanced"
: 使用默认的传输优化模式。"detail"
: 清晰优先。"motion"
: 流畅优先。各个传输优化模式的介绍详见 API 参考。该方法适用于在视频通话、视频直播或屏幕共享过程中需要动态调整视频传输优化模式的场景。例如在屏幕共享过程中,如想要把屏幕共享内容从演示文稿切换为视频,可以调用此方法将传输优化模式从 "detail"
切换为 "motion"
,确保视频画面在网络波动时不会出现卡顿。
远端用户网络质量
该版本新增 AgoraRTCClient.getRemoteNetworkQuality
方法用于获取本地订阅的所有远端用户的上下行网络质量。
云代理
该版本中 AgoraRTCClient.startProxyServer
方法的 mode
参数类型由 boolean
改成 number
。
音频或视频轨道被 setEnabled
方法禁用时,依然可以调用 setDevice
方法切换设备。
调用 AgoraRTCClient.setEncryptionConfig
开启 SDK 内置加密功能后,当终端用户设置的密码为弱密码时,SDK 会在控制台打印警告信息,提醒用户设置强密码,即密码必须满足以下要求:
该版本修复了以下问题:
setEnabled(false)
禁用该轨道,发布会失败且无法恢复。BufferSourceAudioTrack
的声音失真。onMicrophoneChanged
、onCameraChanged
或 onPlaybackDeviceChanged
),之后再有设备变更时才会触发设备变更事件。新增
AgoraRTC.setArea
localVideoTrack.setOptimizationMode
AgoraRTCClient.getRemoteNetworkQuality
更新
AgoraRTCClient.startProxyServer
方法的 mode
参数类型由 boolean
改成 number
该版本于 2020 年 10 月 27 日发布。该版本修复了以下问题:
event_network_quality
回调的准确性。createCameraVideoTrack
的调用无法结束。unsubscribe
取消订阅某远端用户的一路未发布的轨道后,后续对该用户的订阅和取消订阅操作都失效。setEnabled
方法启用和禁用视频轨道的消耗。client.getLocalVideoStats
方法的偶现报错。该版本于 2020 年 9 月 4 日发布。
客户端截图
v4.1.0 新增 getCurrentFrameData
方法,用于获取当前渲染的视频帧数据。
音频播放设备管理
v4.1.0 新增了以下方法和回调,用于音频播放设备的管理:
setPlaybackDevice
: 用于设置音频播放设备,比如扬声器。该方法仅支持 Chrome 浏览器。getPlaybackDevices
: 用于获取可用的音频播放设备。onPlaybackDeviceChanged
: 用于提示有音频播放设备被添加或移除。network-quality
事件的准确性。checkVideoTrackIsActive
不准确。setEnabled
可能失败。UNEXPECTED_RESPONSE: ERR_SUBSCRIBE_REQUEST_INVALID
。新增
AgoraRTC.getPlaybackDevices
AgoraRTC.onPlaybackDeviceChanged
Client.getLocalAudioStats
Client.getRemoteAudioStats
Client.getLocalVideoStats
Client.getRemoteVideoStats
LocalVideoTrack.getCurrentFrameData
RemoteVideoTrack.getCurrentFrameData
LocalAudioTrack.setPlaybackDevice
RemoteAudioTrack.setPlaybackDevice
废弃
LocalTrack.getStats
和 RemoteTrack.getStats
,请使用 Client.getLocalAudioStats
等方法来获取本地和远端的媒体质量信息。该版本于 2020 年 7 月 18 日发布,该版本修复了以下问题:
该版本于 2020 年 7 月 15 日发布。
v4.0.0 删除了 setMute
方法,新增 setEnabled
方法来实现启用或禁用本地轨道。这样做的好处在于:
Client.on("user-mute-updated")
回调。setEnabled
不会引入额外的远端回调事件。如果该本地轨道已发布,setEnabled(false)
后远端会触发 Client.on("user-unpublished")
回调,setEnabled(true)
后远端会触发 Client.on("user-published")
回调。setMute(true)
后,SDK 依然会发送黑帧和静音帧。对于视频轨道来说,Mute 后摄像头的指示灯并不会关闭,因而影响用户体验。而通过 setEnabled(false)
禁用本地视频轨道后,SDK 会立刻关闭摄像头并停止采集视频。请注意,由于
setEnabled
涉及设备采集,所以是一个异步方法,通过 Promise 返回异步操作的结果。
视频编码策略
v4.0.0 在 CameraVideoTrackInitConfig
、ScreenVideoTrackInitConfig
和 CustomVideoTrackInitConfig
类中新增 optimizationMode
字段,支持在调用 createCameraVideoTrack
、createCustomVideoTrack
和 createScreenVideoTrack
方法创建视频轨道时选择视频画面是清晰优先还是流畅优先:
通过
createScreenVideoTrack
创建的视频轨道默认设置为清晰优先。
AgoraRTC.createScreenVideoTrack
的 withAudio
参数,除了 enable
和 disable
外,还可设为 auto
,根据浏览器是否支持决定是否分享音频,以满足更多屏幕共享音频的使用场景。mediaType
参数携带 "all"
,只能为 "video"
或 "audio"
,以避免代码的重复。这一改动涉及以下 API:Client.subscribe
方法中的 mediaType
参数不能设为 "all"
,只能设为 "audio"
或 "video"
。Client.on("user-published")
和 Client.on("user-unpublished")
回调的 mediaType
参数不再报告 "all"
,只会报告 "audio"
或 "video"
。v4.0.0 修复了以下问题:
unpublish
后远端会触发 Client.on("user-left")
回调。"rtc"
模式下进行屏幕共享发生周期性模糊。Client.on("network-quality")
回调不准。新增
Client.localTracks
,用于保存已发布的本地轨道对象列表。LocalTrack.setEnabled
,用于启用或禁用本地轨道。CameraVideoTrackInitConfig
、ScreenVideoTrackInitConfig
和 CustomVideoTrackInitConfig
类中新增 optimizationMode
字段,用于在创建视频轨道时设置视频画面是清晰优先还是流畅优先。更新
AgoraRTC.createScreenVideoTrack
的 withAudio
参数新增支持设为 auto
。Client.subscribe
的 mediaType
参数不能设为 "all"
。Client.on("user-published")
和 Client.on("user-unpublished")
回调的 mediaType
参数不再报告 "all"
。废弃
LocalAudioTrackStats.muteState
属性。LocalVideoTrackStats.muteState
属性。RemoteAudioTrackStats.muteState
属性。RemoteVideoTrackStats.muteState
属性。删除
Client.on("user-mute-updated")
回调。LocalTrack.setMute
方法。AgoraRTCRemoteUser.audioMuted
属性。AgoraRTCRemoteUser.videoMuted
属性。LocalTrack.getUserId
方法。