本文提供声网 React Native SDK 的发版说明。
SDK 自 3.4.6 版本起对 iOS 15 进行了兼容性适配。对 3.2.1(含)及 3.4.5(含)之间的 SDK 版本,在 iOS 15 上高概率会发生崩溃。为避免该问题,请务必将 SDK 升级至 3.4.6 或之后版本。
该版本于 2022 年 5 月 14 日发布。
动态库对应的 implementation
字段变更(Android)
集成 SDK 时,你可以修改 /android/app/build.gradle
文件中的 dependencies
中的 implementation
字段,以指定需要集成的动态库。详见减少 App 体积。
为简化 implementation
字段,该版本对下列动态库的 implementation
字段做了变更:
动态库 | implementation 字段(3.6.2 版) |
implementation 字段(3.7.0 及之后版) |
---|---|---|
AI 降噪插件:libagora_ai_denoise_extension.so |
io.agora.rtc:full-ains | io.agora.rtc::ains |
全格式音频解码插件:libagora_full_audio_format_extension.so |
io.agora.rtc:full-full-audio-format | io.agora.rtc:full-audio-format |
空间音效
该版本新增空间音效功能,用于塑造远端用户声音的方位感和模拟声音在真实世界中的传播过程,实现本地用户听远端用户时的空间音效。
如有需要,请联系 sales@agora.io。
屏幕共享
该版本新增 startScreenCapture
、stopScreenCapture
、updateScreenCaptureParameters
方法,支持在 Android 和 iOS 平台开启屏幕共享。详见屏幕共享。
本地语音音调
该版本新增 enableLocalVoicePitchCallback
方法和 LocalVoicePitchInHz
回调,允许 SDK 按设置的时间间隔向 app 报告本地用户的语音音调。
远端首帧出图回调
该版本在 RtcChannelEvents
类中新增 FirstRemoteVideoFrame
回调,以在多频道场景下向本地用户报告远端用户的首帧视频已渲染。你还可以从该回调中获取远端用户 ID、视频宽度 (px)、高度 (px)、首帧出图时间 (ms)。
切换用户角色失败回调
该版本新增 ClientRoleChangeFailed
回调,用于报告直播场景下用户切换角色失败的原因和当前的用户角色。
网络连接发生改变的原因
为方便用户了解网络连接发生改变的原因,该版本在 ConnectionChangedReason
中新增如下枚举:
SameUidLogin(19)
:使用相同的 UID 从不同的设备加入同一频道。TooManyBroadcasters(20)
:频道内主播人数已达上限。该枚举仅在开启 128 人功能后报告。频道能力提升
自该版本起,单个频道可支持最多 128 位主播同时在线并同时发布音视频流,观众人数无限制,每位主播或观众最多可同时订阅 50 位主播。
如有需要,请联系 sales@agora.io。
虚拟背景
测试结果和用户反馈显示,虚拟背景功能在多种复杂背景环境和多种人物姿态下均提升了实际效果。因此,自该版本起,虚拟背景由 Beta 功能转变为正式功能。
新版 AI 降噪
自该版本起,声网在原版 AI 降噪功能的基础上增加了新版 AI 降噪功能,拥有更好的降噪效果。如果你希望体验新版 AI 降噪,请联系 sales@agora.io。
playEffect 优化
为避免阻塞,该版本优化了 playEffect
的内部实现逻辑,以减少播放音效文件时的卡顿。
音频体验优化
该版本改善了网络突发抖动和高丢包情况下的音频卡顿问题。
传输升级
该版本升级了传输协议和算法,增强了弱网对抗能力。同时,优化了多人视频场景的可伸缩视频编码能力,提升了视频体验。
该版本修复了 app 离开频道并退后台一段时间后,再切回前台时低概率性无法重新加入频道的问题。(iOS)
新增
startScreenCapture
stopScreenCapture
updateScreenCaptureParameters
enableLocalVoicePitchCallback
LocalVoicePitchInHz
RtcChannelEvents
类中新增 FirstRemoteVideoFrame
ClientRoleChangeFailed
ConnectionChangedReason
中新增 SameUidLogin(19)
和 TooManyBroadcasters(20)
LocalVideoStreamError
中新增:ExtensionCaptureStarted(13)
ExtensionCaptureStoped(14)
ExtensionCaptureDisconnected(15)
ScreenCapturePermissionDenied(16)
废弃
SetClientRoleNotAuthorized(119)
,改用 ClientRoleChangeFailedReason
该版本于 2022 年 4 月 13 日发布。
旁路推流
为降低旁路推流集成难度,该版本优化了推流 API 设计,并改善了推流客户端和服务端内部对网络问题的处理机制。你可以通过该版本新增的如下方法体验优化后的旁路推流功能:
startRtmpStreamWithoutTranscoding
: 开始非转码推流。与旧推流方法 addPublishStreamUrl(false)
作用相同。startRtmpStreamWithTranscoding
: 开始 CDN 直播推流并设置转码属性。与依次调用旧推流方法 setLiveTranscoding
、addPublishStreamUrl(true)
的作用相同。updateRtmpTranscoding
: 更新转码属性。与非首次调用旧推流方法 setLiveTranscoding
的作用相同。stopRtmpStream
: 结束 CDN 直播推流。与旧推流方法 removePublishStreamUrl
作用相同。该版本废弃 addPublishStreamUrl
、setLiveTranscoding
、removePublishStreamUrl
这三个旧推流方法,声网推荐你使用新的推流方法,并参考旁路推流更新你的业务代码逻辑。
同时,自该版本起,不管你使用新推流方法还是旧推流方法,你都可以体验如下改进:
推流状态、错误、事件透明:
RtmpStreamingState
状态码中新增 Disconnecting(5)
:SDK 正在与声网推流服务器和 CDN 服务器断开连接。当你调用 remove
或 stop
方法正常结束推流时,SDK 会依次报告推流状态为 Disconnecting
,Idle
。RtmpStreamingErrorCode
错误码中新增如下:NotBroadcaster(11)
:用户角色不是主播,该用户无法使用推流功能。请检查你的应用代码逻辑。TranscodingNoMixStream(13)
:非转码推流情况下,调用了 update
或 setLiveTranscoding
方法更新转码属性。请检查你的应用代码逻辑。NetDown(14)
:主播的网络出错。InvalidAppid(15)
:你的 App ID 没有使用声网推流服务的权限。请参考前提条件开启推流服务。RtmpStreamingEvent
事件码中新增如下:AdvancedFeatureNotSupport(3)
:功能不支持。RequestTooOften(4)
:预留参数。转码推流时,添加多张水印、背景图片:通过在 LiveTranscoding
结构体中新增 watermarkList
、backgroundImageList
实现。
转码推流时,设置每张水印、背景图片的图层编号和透明度:通过在 AgoraImage
结构体中新增 zOrder
和 alpha
实现。
转码推流时,使用 HE-AAC v2 音频编解码器:通过在 AudioCodecProfileType
中新增 HE_AAC_V2
实现。
1. 删除不需要的插件
插件指可选集成到项目文件的动态库。自该版本起,集成 Android 或 iOS SDK 时,声网支持你通过修改如下文件中的特定字段,指定需要集成的动态库,以排除不需要使用的插件,从而减少集成 SDK 后的应用体积:
/android/app/``build.gradle
文件中的 dependencies
字段。示例代码和 dependencies
中 implementation
字段详情请参考《减少 App 体积》中的 Maven Central 集成时删除插件。/ios/Podfile
文件中的 subspecs
字段。示例代码和 subspecs
字段详情请参考《减少 App 体积》中的 CocoaPods 集成时删除插件。2. 视频增强
继基础美颜后,声网新增支持更多视频增强功能:
setVideoDenoiserOptions
方法设置开/关视频降噪和视频降噪效果选项。setLowLightEnhanceOptions
方法设置开/关暗光增强和暗光增强效果选项。setColorEnhanceOptions
方法设置开/关色彩增强和色彩增强效果选项。libagora_video_process_extension.so
AgoraVideoProcessExtension.xcframework
3. Wi-Fi 加速
该版本新增支持并默认开启 Wi-Fi 加速功能。当 SDK 发现集成加速插件的 Wi-Fi 路由器后,该功能会正式生效,使路由器合理分配 Wi-Fi 频谱资源,以降低丢包率和时延,从而减少音视频卡顿。
当路由器提供加速服务后,SDK 会周期性触发 WlAccStats
回调,报告 Wi-Fi 加速效果,并在 Wi-Fi 连接质量不佳时触发 WlAccMessage
回调,报告 Wi-Fi 连接质量不佳的原因和改善 Wi-Fi 连接的操作建议。
如果你不需要使用 Wi-Fi 加速功能,可以在加入频道前调用 enableWirelessAccelerate(false)
关闭该功能。
4. 视频截图上传
为满足对视频内容监管的需求,该版本新增 enableContentInspect
方法,支持开启视频截图上传。成功开启视频截图上传后,SDK 会根据你在 ContentInspectConfig
中设置的视频截图上传模块和频率对本地用户发送的视频进行截图、上传。截图完成后,声网服务器会以 HTTPS 请求的形式通知你的服务器,并将所有截图发送至你指定的第三方云存储。
5. 动态加载 .so 文件(仅 Android 平台)
该版本新增 setAgoraLibPath
方法,用于设置 .so
文件的存储目录。成功调用该方法后,SDK 会在 app 运行时根据你指定的目录动态加载 .so
文件,从而减小 app 的安装包体积。具体实现步骤详见减少 App 体积。
6. 音画同步
同一用户可能使用两个设备分别发送音频流和视频流,为保证接收端听到和看到的音频和视频的时间同步性,该版本新增 setAVSyncSource
方法。你可以在视频发送端调用该方法,并传入音频发送端的频道名、用户 ID,SDK 会以发送的音频流的时间戳为基准进行自动调节发送的视频流,以保证即使在两个发送端的上行网络情况不一致(如分别使用 Wi-Fi 和 4G 网络)的情况下,也能让接收端听到和看到的音频和视频同步。
7. 音视频录制
为方便用户在客户端录制本地音视频,该版本新增如下方法和回调:
startRecording
:设置录制的内容、时长、生成文件的格式、回调间隔,并开启本地音视频录制。该方法支持录制以下内容:
录制生成的文件保存在用户本地。
stopRecording
:停止本地音视频录制。
onRecorderStateChanged
:录制状态发生改变回调。
onRecorderInfoUpdated
:录制信息更新回调。
1. 云代理
为丰富云代理的适用场景,该版本对云代理类型进行了如下改进:
None(0)
由不使用云代理变更为自动模式。在该模式下,SDK 优先连接 SD-RTN™,如果连接失败,自动切换到 TLS 443。自 v3.6.2 起,SDK 默认开启该模式。TCP(2)
,表示 TCP(加密)代理模式。在该模式下,SDK 始终通过 TLS 443 传输数据。同时,该版本新增 ProxyConnected
回调,报告 SDK 连接代理的状态。例如,当用户调用 setCloudProxy
设置代理并成功加入频道后,SDK 会触发该回调,报告用户 ID,连接的代理类型和从调用 joinChannel
到 SDK 触发该回调的经过的时间。
2. 音频录制
该版本扩展了 startAudioRecordingWithConfig
的功能,支持设置录制双声道和更高的音质:
AudioRecordingConfiguration
中新增 recordingChannel
,允许用户设置录制的音频声道为单声道或双声道。因为实际录制的音频声道与采集的音频声道有关,集成方案也会影响最终录制的音频声道,所以如需通过 startAudioRecording
录制立体声,请联系技术支持协助。AudioRecordingConfiguration.recordingQuality
中新增 UltraHigh(3)
,允许用户设置录制的音质为超高音质。超高音质是 recordingQuality
中提供的最高音质。当采样率为 32000 Hz,以超高音质录制 10 分钟的 AAC 音频文件时,文件大小约为 7.5 M。3. 播放音乐文件优化
该版本优化了调用 startAudioMixing
播放音频文件的体验,具体如下:
getAudioFileInfo
获取的音频时长更加准确。如果你希望体验这些优化,请确保已集成如下动态库:
libagora-full-audio-format-extension.so
AgoraFullAudioFormatExtension.xcframework
考虑到该库的体积较大,如果你对 app 体积有限制且不需要体验这些优化,你可以在集成 SDK 时自行删除该动态库。详见减少 App 体积。
4. 音频文件格式(仅 iOS 平台)
该版本新增支持播放如下格式的音频文件:
对于 MP4 和 M4A 格式的在线文件,媒体信息(moov)必须在媒体数据(mdat)之前。
5. 音频设备出错
AudioLocalError
中的 Interrupted(8)
新增支持 iOS 平台。
6. 基础美颜
该版本更新了声网基础美颜算法,提升了你通过 setBeautyEffectOptions
方法开启的基础美颜效果。为平衡美颜效果,该版本将 lighteningLevel
(美白程度)的默认值从 0.7 改为 0.6,并在 BeautyOptions
类中新增 sharpnessLevel
支持设置锐化程度。
自该版本起,调用 setBeautyEffectOptions
前,请确保已集成以下动态库:
libagora_video_process_extension.so
AgoraVideoProcessExtension.xcframework
否则,你无法体验新的声网基础美颜算法带来的基础美颜效果和锐度调节功能,只能体验原来的声网基础美颜算法带来的基础美颜效果。
7. 首帧出图
该版本缩短了弱网环境下首帧出图时间,提升用户视频体验。
8. 其他改进
该版本还进行如下改进:
leaveChannel
或网络中断等原因而离开频道后,本地用户看到远端画面停留在最后一帧,而不再是远端视图直接消失。该版本修复了如下问题:
Android 和 iOS 平台
setAudioMixingPitch
调整音调会导致播放的歌曲从原唱切换为伴奏。仅 Android 平台
Education
音频应用场景下,调用 enableLocalAudio
开启、关闭本地语音采集时,偶现的音量不稳定问题。仅 iOS 平台
startAudioMixing
播放特定的 WAV 音频文件,播放一段时间后会出现无声。startAudioMixing
成功后,时隔 3 秒才收到 AudioMixingStateChanged
回调。addVideoWatermark
添加水印,水印颜色与原色不同。AgoraVideoProcessExtension.xcframework
动态库后,应用上传 Apple App Store 报错。startAudioMixing
无法播放以 “ipod-library://”
开头的本地 iTunes 音乐文件。ChatRoomGaming
后,加入频道会中断第三方音乐播放器播放的音乐。新增
setVideoDenoiserOptions
setLowLightEnhanceOptions
setColorEnhanceOptions
enableWirelessAccelerate
WlAccMessage
WlAccStats
enableContentInspect
ContentInspectResult
setAgoraLibPath
AudioRecordingConfiguration
中新增 recordingChannel
AudioRecordingConfiguration.recordingQuality
中新增 UltraHigh(3)
ProxyConnected
CloudProxyType
中新增 TCP (2)
startRtmpStreamWithoutTranscoding
startRtmpStreamWithTranscoding
updateRtmpTranscoding
stopRtmpStream
RtmpStreamingStateChanged
的 RtmpStreamingState
参数中新增 Disconnecting(5)
RtmpStreamingStateChanged
的 RtmpStreamingErrorCode
参数中新增如下:NotBroadcaster(11)
TranscodingNoMixStream(13)
NetDown(14)
InvalidAppid(15)
RtmpStreamingEvent
的 eventCode
参数中新增如下:AdvancedFeatureNotSupport(3)
RequestTooOften(4)
LiveTranscoding
类中新增如下:watermarkList
backgroundImageList
AgoraImage
类中新增 zOrder
和 alpha
AudioCodecProfileType
中新增 HE_AAC_V2
setAVSyncSource
BeautyOptions
类中新增 sharpnessLevel
startRecording
stopRecording
RecorderStateChanged
RecorderInfoUpdated
修改
CloudProxyType
中 None``(0)
的行为lighteningLevel
的默认值从 0.7 改为 0.6该版本于 2022 年 1 月 13 日发布。
1. 加入频道失败时返回的错误码变更
为准确报告加入频道失败的原因,自该版本起,在如下情况,SDK 返回的错误码由 -5(Refused)
更改为 -17(JoinChannelRejected)
:
RtcEngine
频道的用户使用有效的频道名再次调用 RtcEngine
类中的加入频道方法。RtcChannel
频道的用户再次调用该 RtcChannel
对象的加入频道方法。2. 蓝牙规范选择(仅 iOS 平台)
为确保与蓝牙耳机的连接,自该版本起,当通信场景下的用户或直播场景下的主播使用蓝牙耳机时,SDK 会检测设备是否支持蓝牙免提规范(Hands-Free Profile, HFP)并根据检测结果选择蓝牙规范,具体如下:
1. 视频截图
该版本新增 takeSnapshot
方法,支持对指定用户的视频进行截图,生成 JPG 格式图片,并保存至指定的路径。成功调用该方法后,SDK 触发 SnapshotTaken
回调报告截图是否成功和获取截图的详情。
2. 超分辨率(Beta)
为有效地提升本地用户看到的远端视频画面的分辨率,该版本新增支持超分辨率功能。你可以调用 enableRemoteSuperResolution
开启超分辨率。SDK 会触发 UserSuperResolutionEnabled
回调报告是否已成功开启该功能。如果未成功开启,请通过 reason
排查问题。
3. 背景虚化
为丰富虚拟背景的效果,该版本新增支持用户调用 enableVirtualBackground
开启虚拟背景时设置背景虚化。你需要将自定义的背景图类型设为 Blur
,并根据用户希望的背景虚化程度设置 blur_degree
。
4. 暂停/恢复跨频道媒体流转发
为方便跨频道连麦中的主播快速暂停或恢复媒体流转发,该版本新增如下方法:
pauseAllChannelMediaRelay
:暂停向所有目标频道转发媒体流。resumeAllChannelMediaRelay
:恢复向所有目标频道转发媒体流。成功调用 pauseAllChannelMediaRelay
或 resumeAllChannelMediaRelay
方法后,SDK 会触发 ChannelMediaRelayEvent
回调,并在回调中报告是否成功暂停或恢复媒体流转发。
5. 音乐文件高级设置
为设置音乐文件的播放速度、音轨和声道模式,该版本新增如下方法:
setAudioMixingPlaybackSpeed
: 设置当前音乐文件的播放速度。声网推荐取值范围为 [50,400],100 表示原始速度。getAudioTrackCount
: 获取当前音乐文件的音轨数量。selectAudioTrack
: 指定当前音乐文件的播放音轨。指定音轨的索引取值范围为 [0, getAudioTrackCount()
)。setAudioMixingDualMonoMode
: 设置当前音乐文件的声道模式为原始模式、左声道模式、右声道模式或混合模式。6. 获取音频文件信息
为获取任意音频文件的信息,该版本废弃 getAudioMixingDuration
并新增 getAudioFileInfo
替代。加入频道后,你可以调用 getAudioFileInfo
并通过 RequestAudioFileInfo
回调获取指定音频文件的时长等信息。
1. 音频通话回路测试
为方便用户自行检查本地音频设备、网络状态能否保障正常发送、接收音频流,并保障测试的安全性,该版本在新增 startEchoTest
方法中新增 config
参数。你可以在加入频道前调用该方法,以测试用户的音视频设备和网络回路是否正常。
2. 5G 移动网络的识别和质量测试
该版本新增对 5G 移动网络的识别和质量测试,具体如下:
Mobile5G (6)
枚举,当本地网络切换为 5G 时,SDK 触发 NetworkTypeChanged
回调报告该网络连接类型。enableLastmileTest
或 startLastmileProbeTest
测试 5G 网络连接质量。3. 性能改进
通过优化 FEC(Forward Error Correction)编解码,小幅降低视频场景下的 CPU 占用率。
4. 体验改进
通过优化拥塞控制算法,提升弱网环境下视频清晰度和流畅度。
5. 适配 OpenSL
该版本适配 OpenSL,以降低音频延时;同时,添加黑名单机制,在部分不支持 OpenSL 的机型上关闭 OpenSL,并开启 Java adm,提高音频功能的稳定性。
6. 其他改进
该版本还进行了如下改进:
该版本修复了如下问题:
Android 和 iOS 平台
startAudioMixing
时,远端用户听到的人声和伴奏有轻微的不同步。GameStreaming
场景下,偶现因音乐检测不准确导致的回声或噪声。enableLocalVideo(false)
、enableLocalVideo(true)
关、开本地视频采集或依次调用 muteLocalVideoStream(true)
、muteLocalVideoStream(false)
停止、恢复发送本地视频后,本地用户看远端用户偶现短暂黑屏。muteAllRemoteAudioStreams
,收到 RemoteAudioStateChanged (RemoteMuted)
15 秒后,错误地收到了 RemoteAudioStateChanged (RemoteMuted)
。joinChannel
方法时,返回值不准确。enableLocalAudio(false)
后,SDK 额外触发 LocalAudioStateChanged
回调报告 Recording(1)
。仅 Android 平台
MusicHighQualityStereo (5)
的用户和使用其他音频属性的用户通话时,后者大概率会听到滋啦杂声。AudioRouteChanged
回调。仅 iOS 平台
pauseAudioMixing
,之后再调用 startAudioMixing
播放音频文件,播放失败。setAudioSessionOperationRestriction
后,偶现的远端音频无声。新增
takeSnapshot
SnapshotTaken
enableRemoteSuperResolution
UserSuperResolutionEnabled
VirtualBackgroundSource
结构体中新增 blur_degree
属性和 VirtualBackgroundBlurDegree
枚举backgroundSourceType
枚举中新增 Blur
setAudioMixingPlaybackSpeed
getAudioTrackCount
selectAudioTrack
setAudioMixingDualMonoMode
pauseAllChannelMediaRelay
resumeAllChannelMediaRelay
getAudioFileInfo
RequestAudioFileInfo
NetworkType
中新增 `Mobile5G(6)修改
废弃
getAudioMixingDuration
该版本于 2021 年 9 月 15 日发布。
音频路由行为变更 (仅 Android 平台)
为提升用户体验,该版本优化了如下 SDK 行为:
当 SDK 使用媒体音量时,音频路由受如下影响:
如果连接了多个外置音频设备,当用户移除当前播放设备时,音频路由受如下影响:
setEnableSpeakerphone
> setDefaultAudioRouteToSpeakerphone
> SDK 默认的音频路由。更多介绍见 Android 平台的设置音频路由。
虚拟背景(beta)
为满足用户对自定义虚拟背景的需求,该版本新增 enableVirtualBackground
方法,支持你开启虚拟背景,将用户的背景设为纯色或 PNG、JPG 格式的图片。同时,你可以通过 VirtualBackgroundSourceEnabled
回调了解虚拟背景是否成功开启和相应的出错原因。
1. 视频画质
该版本对采集和接收的视频画质进行了如下改进:
setCameraAutoFocusFaceModeEnabled(false)
。(仅 iOS 平台)2. 其他改进
该版本还进行了如下改进:
该版本修复了如下问题:
Android 和 iOS 平台
enableLoopbackRecording
后,偶现本地用户听到自己的回声。muteLocalAudioStream(true)
停止发布本地音频后,用户第一次加入频道可以听到远端用户,但退出频道后再次加入频道偶现无法听到远端用户。rxQuality
)不准确。仅 Android 平台
仅 iOS 平台
RtcStats
回调报告的 memoryTotalUsageRatio
的值不准确。FixedPortrait
模式时,分辨率宽高设置颠倒导致的大头问题。新增
修改
该版本于 2021 年 7 月 23 日发布。
为提升人脸检测结果的准确性,自该版本起,SDK 在检测到人脸消失后会立即触发 FacePositionChanged
回调。
该版本修复了如下问题:
Android
interface xxx is not visible from class loader
报错。iOS
nonnull
、 _Nullable
修饰符导致运行项目时出现警告。startAudioMixing
时传入经过百分号编码后的 URL,对应的在线音频文件播放失败。该版本于 2021 年 7 月 12 日发布。
1. API 兼容性变更
该版本对 API 进行了如下涉及兼容性的变更:
RtcEngineConfig
类和 createWithConfig
方法,并新增 RtcEngineContext
类和 createWithContext
方法替代。与 RtcEngineConfig
相比,RtcEngineContext
类中的 areaCode
属性的数据类型由 AreaCode
变更为 AreaCode[]
,支持设置多个多个访问区域。RtcStats
接口中的 totalDuration
属性更名为 duration
,users
属性更名为 userCount
,数据类型和含义保持不变。如果你将 SDK 升级到 v3.4.5 或更高版本,为保证你的业务功能不受影响,声网推荐你修改上述 API 的实现。
2. 支持 GCM2 加密
为进一步提升实时音视频传输过程的安全性,该版本进行如下优化:
EncryptionMode
中新增 AES128GCM2
和 AES256GCM2
加密模式。新的 GCM 加密模式使用了安全性更高的密钥派生函数,支持设置密钥和盐。EncryptionConfig
中新增 encryptionKdfSalt
成员,用于为 AES128GCM2
和 AES256GCM2
加密模式设置盐。此外,该版本将默认的加密模式由 AES128XTS
修改为 AES128GCM2
。如果你原来使用了默认的加密模式,将 SDK 升级到 v3.4.5 之后,请务必调用 enableEncryption
并将 EncryptionMode
设置为 AES128XTS
。
3. 媒体流发布行为变更
为方便用户灵活控制多个频道中的发布状态,该版本对 RtcChannel
类进行如下优化:
publish
和 unpublish
,并新增 muteLocalAudioStream
和 muteLocalVideoStream
作为替代。你可以分别设置音频流和视频流的发布状态。ChannelMediaOptions
中新增 publishLocalAudio
和 publishLocalVideo
成员。你可以在加入频道时设置音视频流的发布状态。setClientRole(Broadcaster)
后,本地用户默认发布音视频流。publishLocalAudio = false
和 muteLocalAudioStream(true)
的功能相同。publishLocalVideo = false
和 muteLocalVideoStream(true)
的功能相同。上述优化也带来了 RtcEngine
类的部分行为变更:
RtcEngine
类的 muteLocalAudioStream
和 muteLocalVideoStream
对通过 RtcChannel
类创建的频道不生效,你需要改用 RtcChannel
类的 muteLocalAudioStream
和 muteLocalVideoStream
。options
参数的 joinChannel
加入频道时,你可以设置音视频流的发布状态。options
参数的 joinChannel
加入频道,muteLocalAudioStream
或 muteLocalVideoStream
只有在加入频道后调用才生效。如果你将 SDK 升级到 v3.4.5 或之后版本,为保证你的业务功能不受影响,声网推荐你修改 muteLocalAudioStream
、muteLocalVideoStream
、publish
及 unpublish
的实现。
1. 旁路推流
为向用户透明更多的旁路推流错误和事件,该版本新增如下:
RtmpStreamingErrorCode
中新增错误码 UnPublishOK (100)
: 报告推流已正常结束。当你调用 removePublishStreamUrl
结束推流时,SDK 会返回该错误码和状态码 Idle (0)
。RtmpStreamingEvent
中新增事件码 UrlAlreadyInUse (2)
: 报告该推流 URL 已用于推流。如果你想开始新的推流,请使用新的推流 URL。2. 音乐文件状态
在 pauseAudioMixing
后调用 startAudioMixing
时,该版本在报告 AudioMixingStateChanged(Playing,StartedByUser)
状态之前新增了 AudioMixingStateChanged(Stopped,StoppedByUser)
状态,提示已停止播放音乐文件。
3. 音频设备出错
为方便获取系统电话对音频采集的影响,该版本在 AudioLocalError
中新增 Interrupted (8)
,报告音频采集被系统电话中断。
该版本修复了如下问题:
startAudioMixing
播放在线音乐文件时,偶现 SDK 响应时间过长而引起卡顿。startAudioMixing
播放在线音乐文件时,偶现 ANR 弹窗。新增
RtcEngineContext
类createWithContext
RtmpStreamingErrorCode
中新增 UnPublishOK (100)
RtmpStreamingEvent
中新增 UrlAlreadyInUse (2)
EncryptionMode
中新增 AES128GCM2 (7)
和 AES256GCM2 (8)
EncryptionConfig
中新增 encryptionKdfSalt
RtcChannel
中新增 muteLocalAudioStream
和 muteLocalVideoStream
ChannelMediaOptions
中新增 publishLocalAudio
和 publishLocalVideo
AudioLocalError
中新增 Interrupted (8)
修改
RtcStats
接口中的 totalDuration
属性更名为 duration
,users
属性更名为 userCount
.废弃
createWithConfig
RtcEngineConfig
类RtcChannel
类的 publish
和 unpublish
为提升代码的规范性和健壮性,自 3.4.5 版本起,声网 SDK 对所有类的成员属性严格区分了必传和非必传,并修改了类的构造函数。
本节列出了 v3.4.5 版本所有涉及构造函数变更的类。如果你将 SDK 升级到 v3.4.5 或更高版本,为保证你的业务功能不受影响,请确保修改这些类的实现。
VideoDimensions
类中的以下属性由必传变为可选:
width
height
VideoDimensions
类构造函数变更如下:
v3.4.5 之前
new VideoDimensions(640, 360);
v3.4.5 起
new VideoDimensions({width: 640, height: 360});
AgoraImage
类中的以下属性由必传变为可选:
x
y
width
height
AgoraImage
的构造函数变更如下:
v3.4.5 之前
new AgoraImage('url', 0, 0, 640, 360);
v3.4.5 起
new AgoraImage('url', {x: 0, y: 0, width: 640, height: 360});
TranscodingUser
类中的以下属性由必传变为可选:
x
y
TranscodingUser
的构造函数变更如下:
v3.4.5 之前
new TranscodingUser(0, 0, 0, {width: 640, height: 360, ...});
v3.4.5 起
new TranscodingUser(0, {x: 0, y: 0, width: 640, height: 360, ...});
ChannelMediaInfo
类中的 channelName
由可选变为必传。
ChannelMediaInfo
的构造函数变更如下:
v3.4.5 之前
new ChannelMediaInfo(0, {channelName: 'channelName', token: 'token'});
v3.4.5 起
new ChannelMediaInfo('channelName', 0, {token: 'token'});
Rectangle
类中的以下属性由必传变为可选:
x
y
width
height
Rectangle
的构造函数变更如下:
v3.4.5 之前
new Rectangle(0, 0, 640, 360);
v3.4.5 起
new Rectangle({x: 0, y: 0, width: 640, height: 360});
WatermarkOptions
类中的以下属性由必传变为可选:
positionInLandscapeMode
positionInPortraitMode
WatermarkOptions
的构造函数变更如下:
v3.4.5 之前
new WatermarkOptions(Rectangle, Rectangle, true);
v3.4.5 起
new WatermarkOptions({visibleInPreview: true, positionInLandscapeMode: Rectangle, positionInPortraitMode: Rectangle});
CameraCapturerConfiguration
类中的以下属性由必传变为可选:
preference
cameraDirection
CameraCapturerConfiguration
的构造函数变更如下:
v3.4.5 之前
new CameraCapturerConfiguration(CameraCaptureOutputPreference, CameraDirection, {captureWidth: 640, captureHeight: 360});
v3.4.5 起
new CameraCapturerConfiguration({preference: CameraCaptureOutputPreference, captureWidth: 640, captureHeight: 360, cameraDirection: CameraDirection});
ChannelMediaOptions
类中的以下属性由必传变为可选:
autoSubscribeAudio
autoSubscribeVideo
ChannelMediaOptions
的构造函数变更如下:
v3.4.5 之前
new ChannelMediaOptions(true, true);
v3.4.5 起
new ChannelMediaOptions({autoSubscribeAudio: true, autoSubscribeVideo: true});
EncryptionConfig
类中的以下属性由必传变为可选:
encryptionMode
encryptionKey
EncryptionConfig
的构造函数变更如下:
v3.4.5 之前
new EncryptionConfig(EncryptionMode, 'encryptionKey');
v3.4.5 起
new EncryptionConfig({encryptionMode: EncryptionMode, encryptionKey: 'encryptionKey'});
ClientRoleOptions
类中的 audienceLatencyLevel
属性由必传变为可选。
ClientRoleOptions
的构造函数变更如下:
v3.4.5 之前
new ClientRoleOptions(AudienceLatencyLevelType);
v3.4.5 起
new ClientRoleOptions({audienceLatencyLevel: AudienceLatencyLevelType});
DataStreamConfig
类中的以下属性由可选变为必传:
syncWithAudio
ordered
DataStreamConfig
的构造函数变更如下:
v3.4.5 之前
new DataStreamConfig({syncWithAudio: true, ordered: true});
v3.4.5 起
new DataStreamConfig(true, true);
该版本于 2021 年 5 月 25 日发布。
集成变更
由于 JCenter 即将关闭,声网已停止将 RTC Android SDK 包发布到 JCenter,改为发布到 JitPack。因此,编译 Android 应用时,请确保在项目的 /android/build.gradle
文件中添加如下行:
allprojects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
'https://www.jitpack.io'
替换为 'https://jitpack.io'
。为减少集成 SDK 后的 app 体积,该版本将部分功能以插件列表(命名以 Extension
为后缀)的形式发布,详见插件列表。如果你不需要使用相关插件功能,你可以直接删除对应的插件并重新编译项目。
行为变更
为监听音乐文件播放状态改变的原因,该版本对 AudioMixingStateChanged
回调进行如下修改:
errorCode
参数修改为 reason
参数。AudioMixingErrorCode
,并新增 AudioMixingReason
替代。通过 AudioMixingReason
,你可以获取播放开始、暂停、停止或失败的原因。AudioMixingStateCode
的部分逻辑。例如,循环播放音乐时,播放完成或开始播放都会触发 Playing
状态。如果你将 SDK 升级到 v3.4.2 或更高版本,为保证你的业务功能不受影响,声网推荐你修改 AudioMixingStateChanged
的实现。
1. 虚拟节拍器
为满足在线教学等场景对节拍器的需求,该版本新增如下方法:
startRhythmPlayer
:开启虚拟节拍器。stopRhythmPlayer
:关闭虚拟节拍器。configRhythmPlayer
:在开启虚拟节拍器后,重新配置虚拟节拍器。2. 音效文件播放进度
为控制音效文件的播放进度,该版本新增如下方法或参数:
setEffectPosition
:在播放音效文件后,设置音效文件的播放位置。getEffectDuration
:获取本地音效文件的总时长。getEffectCurrentPosition
:获取音效文件的播放进度。playEffect
:新增 startPos
参数,支持在播放音效文件时设置播放位置。1. 本地文件路径 (仅 Android 平台)
为符合 Google Play Store 的要求,该版本支持通过 URI 访问本地文件。如需调用 startAudioMixing
、startAudioRecordingWithConfig
、getAudioMixingDuration
、preloadEffect
、playEffect
、 getEffectDuration
或 addVideoWatermark
,声网推荐你按如下步骤访问本地文件:
Uri.toString
将 URI 转换为字符串。filePath
或 watermarkUrl
参数。2. 视频编码
声网 SDK 允许你通过 DegradationPreference
设置带宽受限时本地视频编码降级偏好,如降低视频帧率保障视频质量,降低视频质量保障视频帧率。自该版本起,DegradationPreference
新增支持设为 Balanced
,弱网下会降低视频帧率和视频质量,以在流畅性和视频质量之间取得平衡,适用于流畅性和画质均优先的场景,如一对一通话、一对一教学、多人会议。
3. 音乐文件播放进度
为方便控制音乐文件的播放进度,该版本进行如下优化:
startAudioMixing
新增 startPos
参数,支持在播放音乐文件时设置播放位置。getAudioMixingDuration
新增 filePath
参数,支持在播放本地音乐文件前获取该音乐文件总时长。4. 客户端录音
为在录音时设置录音内容,该版本新增 startAudioRecordingWithConfig
方法并废弃 startAudioRecording
。通过 startAudioRecordingWithConfig
的 config
参数,你可以设置录音音质、内容、采样率及录音文件的存储路径。
该版本还新增了错误码 AlreadyInRecording(160)
。如果你在当前录音结束前再次调用 startAudioRecordingWithConfig
,SDK 会报告该错误码。
5. 媒体设备出错
为方便用户了解本地视频出错原因,该版本在 LocalVideoStreamError
中新增错误码 DeviceNotFound(8)
,报告无法找到本地视频采集设备。
该版本修复了如下问题:
enableSoundPositionIndication(true)
后 AudioVolumeIndication
回调的音量信息不准确。setupLocalVideo
或 setupRemoteVideo
后调用如 getCallId
、getSdkVersion
的 get
方法或 destroy
方法,app 的用户界面会卡住。(仅 iOS 平台)新增
startRhythmPlayer
stopRhythmPlayer
configRhythmPlayer
startAudioRecordingWithConfig
getEffectDuration
setEffectPosition
getEffectCurrentPosition
getAudioMixingDuration
新增 filePath
参数playEffect
新增 startPos
参数startAudioMixing
新增 startPos
参数LocalVideoStreamError
中新增 DeviceNotFound(8)
AlreadyInRecording(160)
修改
废弃
startAudioRecording
AudioMixingErrorCode
该版本于 2020 年 3 月 12 日发布。
该版本废弃了 setDefaultMuteAllRemoteAudioStreams
和 setDefaultMuteAllRemoteVideoStreams
,并修改了 mute
相关方法的如下行为:
mute
相关方法需要在加入频道或切换频道后调用,否则会不生效。mute
相关方法都能独立控制用户的订阅状态。一起调用 muteAll
为前缀的方法和 muteRemote
为前缀的方法时,后调用的方法会生效。muteAll
为前缀的方法设置是否订阅所有音频或视频流,包含调用时刻之后加入频道的用户的音频或视频流,即 muteAll
为前缀的方法包含了 setDefaultMute
为前缀的方法的功能。声网不推荐一起调用 muteAll
和 setDefaultMute
为前缀的方法,否则设置可能会不生效。1. 频道媒体选项
为方便开发者更灵活地控制媒体流订阅,joinChannel
和 switchChannel
方法新增 options
参数,支持设置用户加入频道和切换频道时是否订阅频道内所有的远端音频流或视频流。
2. 云代理
为提升声网云代理的易用性,该版本新增 setCloudProxy
方法设置云代理并允许你选择连接 UDP 协议的云代理。详见[云代理](./cloudproxy_native?platform=React Native)。
3. AI 降噪
为在传统降噪模式的基础上消除非平稳噪声,该版本新增 enableDeepLearningDenoise
,用于开启 AI 降噪模式。
4. 歌唱美声
在歌唱场景中,为美化歌声并添加混响效果,该版本新增 setVoiceBeautifierParameters
,并在 VoiceBeautifierPreset
中添加 SingingBeautifier
枚举值。
你可以调用 setVoiceBeautifierPreset(SingingBeautifier)
美化男声并添加歌声在小房间的混响效果。如需更多设置,你可以调用 setVoiceBeautifierParameters(SingingBeautifier, param1, param2)
美化男声或女声,并添加歌声在小房间、大房间或大厅的混响效果。
5. 设置日志文件
为保证日志内容的完整性,该版本新增 createWithConfig
方法,并在 config
参数中新增 logConfig
属性,在你初始化 RtcEngine
时可用于设置声网 SDK 输出的日志文件。详见如何设置日志文件。
自该版本起,声网不推荐使用 setLogFile
、setLogFileSize
和 setLogFilter
方法设置日志文件。
6. 采集画质
为更好地控制摄像头采集的画质,该版本新增支持自定义采集分辨率并监听采集异常:
自定义采集分辨率:调用 setCameraCapturerConfiguration
方法,将采集偏好设为 Manual(3)
并设置采集视频的宽高。
监听采集异常:
localVideoStats
回调的 captureBrightnessLevel
监听。LocalVideoStateChanged(Failed, CaptureFailure)
回调监听。LocalVideoStateChanged(Capturing, CaptureFailure)
回调监听。(仅适用于 iOS)同时,为提升用户体验,该版本在 LocalVideoStateChanged
回调中新增本地采集出错的原因:
CaptureInBackGround(6)
:应用处于后台。CaptureMultipleForegroundApps(7)
:应用窗口处于侧拉、分屏、画中画模式。7. 创建数据流
为了支持歌词同步、课件同步等场景,该版本废弃了原有的 createDataStream
方法,并使用 createDataStreamWithConfig
方法替代,用于创建数据流,并设置数据流是否与发布到声网频道内的音频流同步以及接收到的数据是否有序。
8. 基础变声
该版本新增 setVoiceConversionPreset
方法改变用户的声音。你可以把男声变得低沉、稳重,把女声变得甜美、中性。
1. AES-GCM 加密模式
在安全要求高的场景中,为保证数据的保密性、完整性和真实性,提高数据加密的计算效率,该版本在 EncryptionMode
中新增如下枚举值:
AES128GCM
: 128 位 AES 加密,GCM 模式。AES256GCM
: 256 位 AES 加密,GCM 模式。2. 远端音频统计
remoteAudioStats
中增加 mosValue
,报告声网实时音频 MOS(平均主观意见分)评估系统对接收到的远端音频流的质量评分。remoteAudioStats
中增加 qoeQuality
和 qualityChangedReason
,报告接收远端音频时的体验质量以及体验质量较差的原因。Android 平台
iOS 平台
该版本修复了如下问题:
audioVolumeIndication
回调获取远端用户音量。enableLocalVideo(false)
有可能会崩溃。新增
createWithConfig
setVoiceConversionPreset
EncryptionMode
中新增 AES128GCM
和 AES256GCM
RemoteAudioStats
中新增 mosValue
setVoiceBeautifierParameters
VoiceBeautifierPreset
中新增 SingingBeautifier
enableDeepLearningDenoise
joinChannel
新增 options
参数switchChannel
新增 options
参数createDataStreamWithConfig
RemoteAudioStats
中新增 qoeQuality
和 qualityChangedReason
属性setCloudProxy
LocalVideoStats
中新增 captureBrightnessLevel
属性CameraCapturerConfiguration
中新增 captureWidth
和 captureHeight
属性CameraCaptureOutputPreference
中新增 Manual(3)
LocalVideoStreamError
中新增 CaptureInBackGround(6)
和 CaptureMultipleForegroundApps(7)
ModuleNotFound(157)
废弃
createWithAreaCode
setDefaultMuteAllRemoteVideoStreams
setDefaultMuteAllRemoteAudioStreams
setLogFile
setLogFileSize
setLogFilter
createDataStream
该版本于 2020 年 12 月 23 日发布。
1. 云代理
该版本优化了声网云代理架构。如果你已经在使用云代理,为避免新 SDK 和老云代理的兼容性问题,请在升级 SDK 前联系技术支持。详见云代理。
2. 安全合规
声网已通过 ISO 27001、ISO 27017、ISO 27018 国际认证,为全球用户提供安全可靠的实时互动云服务。详见 ISO 证书。
同时,为支持传输层加密,该版本新增 TLS(Transport Layer Security)加密和 UDP(User Datagram Protocol)加密方式。
极速直播
该版本在 setClientRole
方法中新增 options
参数,支持设置观众的延时级别。你可以通过该方法在互动直播和极速直播之间切换:
详见极速直播产品概述。
1. 会议场景
为提升多人会议的音频体验,该版本在 setAudioProfile
中新增 MEETING(8)
。
2. 美声与音效
为提升美声与音效 API 的易用性,该版本废弃 setLocalVoiceChanger
和 setLocalVoiceReverbPreset
,并新增如下方法替代:
setVoiceBeautifierPreset
: 与 setLocalVoiceChanger
相比,该方法删除了小男孩等变声音效和空旷音效。setAudioEffectPreset
: 与 setLocalVoiceReverbPreset
相比,该方法新增了小男孩等变声音效、空旷音效、3D 人声音效和电音音效,并删除了摇滚和嘻哈音效。setAudioEffectParameters
: 对指定的音效选项进行更细节的设置。该版本支持的音效选项有 3D 人声和电音音效。3. 互动直播延时
互动直播场景下,观众看直播的延时降低了约 500 ms。
4. 本地采集视频画质 (仅 iOS)
为提升本地采集的视频画质,该版本对摄像头采集本地视频进行如下优化:
该版本修复了如下问题:
Android 平台
enableEncryption
后,FirstLocalVideoFramePublished
回调无法被触发。Client.on(disable-local-video)
或 Client.on(mute-video)
回调。iOS 平台
stopChannelMediaRelay
不生效的问题。AdmStartRecording(1012)
错误码的问题。FirstLocalVideoFramePublished
回调无法被触发。Client.on(disable-local-video)
或 Client.on(mute-video)
回调。新增
setClientRole
中新增 options
setAudioEffectPreset
setVoiceBeautifierPreset
setAudioEffectParameters
AudioScenario
enum 中新增 MEETING(8)
废弃
setLocalVoiceChanger
setLocalVoiceReverbPreset
该版本于 2020 年 9 月 28 日发布。
升级必看
为提升用户体验,防止 app 在 iOS 14.0 版本上触发查看本地网络设备的弹窗提示,该版本默认关闭本地网络连通质量报告功能。RtcStats
中的 gatewayRtt
参数会失效,请不要使用该参数获取客户端到本地路由器的往返延时。详见 FAQ。 如果你不介意弹窗提示,且需启用本地网络连通质量报告功能,请联系技术支持。
该版本修改了区域访问限制的区域码 AreaCode
,最新区域码如下:
CN
:中国大陆。NA
:北美区域。EU
:欧洲区域。AS
:除中国大陆以外的亚洲区域。JP
:日本。IN
:印度。GLOB
:(默认)全球。如你此前调用 createWithAreaCode
方法时指定了访问区域,在由之前版本升级至该版本时,请确保使用正确的区域码。
新增特性
该版本新增以下回调方便你了解音视频流当前的发布及订阅状态,有助于订阅和发布相关的数据统计:
AudioPublishStateChanged
:音频发布状态发生改变。VideoPublishStateChanged
:视频发布状态发生改变。AudioSubscribeStateChanged
:音频订阅状态发生改变。VideoSubscribeStateChanged
:视频订阅状态发生改变为提示用户本地音视频首帧已发布,该版本新增如下回调:
FirstLocalAudioFramePublished
:已发布本地音频首帧回调。该回调取代 FirstLocalAudioFrame
回调,我们建议你不再使用 FirstLocalAudioFrame
回调。FirstLocalVideoFramePublished
:已发布本地视频首帧回调。改进
该版本新增 RtmpStreamingEvent
回调,报告 CDN 直播推流过程中发生的事件,如未成功添加背景图或水印。
该版本新增 enableEncryption
方法,用于开启内置加密,并废弃原加密方法:
setEncryptionSecret
setEncryptionMode
与原加密方法相比,该方法新增对国密 SM4 加密模式的支持,你可以根据需要选择合适的加密模式。
该版本进一步扩充了 LocalAudioStats
类、LocalVideoStats
类、RemoteVideoStats
类和 RemoteAudioStats
类的成员,提供更多音视频质量相关数据。
LocalAudioStats
类新增 txPacketLossRate
,表示本端到声网边缘服务器的物理音频丢包率 (%)。
LocalVideoStats
类新增:
txPacketLossRate
:本端到声网边缘服务器的物理视频丢包率 (%)。captureFrameRate
:本地视频采集帧率 (fps)。RemoteAudioStats
和 RemoteVideoStats
类中新增 publishDuration
,表示远端音频流和视频流的累计发布时长(毫秒)。
为提升音频性能,该版本对音频编码码率最大值进行如下优化:
Profile | 3.1.2 版本 | 3.1.2 版本之前 |
---|---|---|
Default |
直播场景: 64 Kbps通信场景: 18 Kbps | 直播场景: 52 Kbps通信场景: 18 Kbps |
SpeechStandard |
18 Kbps | 18 Kbps |
MusicStandard |
64 Kbps | 48 Kbps |
MusicStandardStereo |
80 Kbps | 56 Kbps |
MusicHighQuality |
96 Kbps | 128 Kbps |
MusicHighQualityStereo |
128 Kbps | 192 Kbps |
该版本中,声网 SDK 日志文件的默认个数由 2 个增加至 5 个,单个日志文件的默认大小由 512 KB 扩大至 1024 KB。默认情况下,SDK 会生成 agorasdk.log
、agorasdk_1.log
、agorasdk_2.log
、agorasdk_3.log
、agorasdk_4.log
这 5 个日志文件。最新的日志永远写在 agorasdk.log
中。agorasdk.log
写满后,SDK 会从 1-4 中删除修改时间最早的一个文件,然后将 agorasdk.log
重命名为该文件,并建立新的 agorasdk.log
写入最新的日志。
该版本改进了 TextureView
的底层实现方式,从实例化 TextureView
对象改为用 CreateTextureView
方法创建 TextureView
对象。
问题修复
该版本修复了如下问题:
FirstLocalVideoFrame
和 FirstRemoteVideoFrame
回调的触发时机不准确。setAudioMixingPitch
方法时,部分参数不生效。API 变更
AudioPublishStateChanged
VideoPublishStateChanged
AudioSubscribeStateChanged
VideoSubscribeStateChanged
FirstLocalAudioFramePublished
FirstLocalVideoFramePublished
enableEncryption
LocalAudioStats
类中新增 txPacketLossRate
LocalVideoStats
类中新增 txPacketLossRate
和 captureFrameRate
RemoteAudioStats
和 RemoteVideoStats
类中新增 publishDuration
RtmpStreamingEvent
NoServerResources(103)
setEncryptionSecret
setEncryptionMode
FirstLocalAudioFrame
AdmImproperSettings(1053)
该版本于 2020 年 9 月 4 日发布。功能特性及相关文档详见下文。
功能特性
TextureView
渲染。相关文档
你可以参考以下文档集成 SDK,实现相应的实时音视频功能:
声网在 GitHub 提供一个开源的声网 React Native Quickstart 示例项目。你也可以前往下载并体验。