android agora voice sdk3.x升级4.x实战带你走完全流程
背景
我们线上环境发现有一批声网sdk崩溃,后来跟踪下原因都是模拟器的崩溃,彻查原因发现android agora voice sdk3.x如果只适配 abiFilters 'armeabi-v7a', 'arm64-v8a' 对模拟器支持不太好,所以问声网技术支持后,他们推荐升级到4x,可以更兼容模拟器.所以做了如下升级文档.供大家参考.
迁移文档:
https://docs.agora.io/cn/video-call-4.x/migration_guide_windows_ng?platform=Windows#changes
SDK 升级后的 API 设置:
https://docs.agora.io/cn/video-call-4.x/migrate_to_ng?platform=Android
v4.x SDK 对部分功能的实现方式进行了优化或修改,从而导致与 v3.x 或 v2.x 不兼容。为了继续使用 app 中已有的声网功能,请根据变更介绍更新 app 中的代码。
变更介绍
本节以 v3.7.2.1 为基础,按如下分类介绍 v4.1.1 相对于 v3.7.2.1 的主要变更,你需要结合实际业务场景更新 app 代码
- 中断性变更:介绍影响较大的 API 兼容性变更,修改相关实现代码的预期耗时较多。
- 行为变更:介绍对 SDK 默认行为和 API 行为的合理优化造成的变更,无需修改相关实现代码或修改代码的预期耗时较少。
- 功能差距:介绍在 v3.7.2.1 中支持、但在 v4.1.1 中不支持的功能,这些功能会在后续版本中增加。
- 已删除 API:介绍在 v3.7.2.1 中支持、但在 v4.1.1 中删除了的 API,这些 API 大部分在 v4.1.1 中有替代方案,修改相关实现代码的预期耗时较少。
- 命名和数据类型变更:介绍主要 API 的命名和数据类型变更,你可以借助 IDE 的报错提示更新相关实现代码,预期耗时较少。
中断性变更
从 v3.7.2.1 升级至 v4.1.1 后,实现部分功能的 API 存在差异。本节介绍这些 API 的兼容性变更及 app 代码的更新逻辑。
警告码
在 v3.7.2.1 中,SDK 通过 onWarning 回调报告警告码。
为方便用户定位和排查问题,vv4.1.1 通过 API 返回值或不同状态回调来报告问题和原因。例如:
- onConnectionStateChanged:报告网络连接状态。
- onLocalAudioStateChanged:报告本地音频状态。
- onLocalVideoStateChanged:报告本地视频状态。
- onRemoteAudioStateChanged:报告远端音频状态。
- onRemoteVideoStateChanged:报告远端视频状态。
因此,v4.1.1 不建议 onWarning 回调。
行为变更
本节介绍由 v4.1.1 对 SDK 默认行为和 API 行为的合理优化造成的变更。
网络质量回调
在 v3.7.2.1 中,如果 onNetworkQuality 中的 uid 为 0,则该回调返回的是本地用户的网络质量。 在 v4.0.0 中,该回调返回的本地用户 uid 和用户在频道内实际的 uid 相同。
默认日志文件
在 v3.7.0 中,有多个日志文件时,旧的文件会以 agorasdk_x.log 格式命名,例如 agorasdk_1.log。v4.0.0 修改命名格式为 agorasdk.x.log(例如 agorasdk.1.log)。此外,v4.1.1 新增了 agoraapi.log 记录 API 调用的日志。
音量提示
当你调用 enableAudioVolumeIndication 方法并将 interval 参数设置为 >0 时,可启用用户音量提示。在 v3.7.0 和 v4.0.0 中,interval 参数的定义存在差异:
- 在 v3.7.2.1 中:建议设置到大于 200 毫秒。最小不得少于 10 毫秒,否则会收不到 onAudioVolumeIndication 回调。
- 在 v4.1.1 中:该参数需要设为 200 的整数倍。如果取值低于 200,SDK 会自动调整为 200。
当启用音量提示回调后,SDK 会上报 onAudioVolumeIndication 回调,如果本地用户将自己静音(调用了 muteLocalAudioStream),在 v3.7.0 和 v4.0.0 中,SDK 的行为不一致:
- 在 v3.7.2.1 中:SDK 立即停止报告本地用户的音量提示回调。
- 在 v4.1.1 中:SDK 会继续报告本地用户的音量提示回调。
设备权限
- 在 v3.7.2.1 中,通过 onLocalAudioStateChanged 中的 LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION 上报没有权限启动音频采集设备;通过 onLocalVideoStateChanged 中的 LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION上报没有权限启动视频采集设备。
在 v4.1.1 中,统一通过 onPermissionError 回调上报音视频采集设备的权限状态。
功能差距
本节介绍在 v3.7.2.1中支持、但在v4.1.1 中不支持或行为不一致的功能,这些功能会在后续版本中支持或改为一致。
已删除 API
vv3.7.2.1 中,删除了已废弃或不推荐使用的 API。已删除 API 的替代方案或删除原因展示如下:
- virtualBackgroundSourceEnabled:使用 enableVirtualBackground 的返回值替代。
- onUserSuperResolutionEnabled:使用 remoteVideoStats 回调的 superResolutionType 成员替代。
- setAudioMixingPlaybackSpeed:使用 IMediaPlayer(AgoraRtcMediaPlayerProtocol)类下的相关 API 替代。
- setExternalAudioSourceVolume:使用 adjustCustomAudioPublishVolume 替代。
- getAudioFileInfo 和 onRequestAudioFileInfo:使用 getDuration 替代。
- onAudioDeviceTestVolumeIndication:由 onAudioVolumeIndication 替代。
- setLocalPublishFallbackOption 和 onLocalPublishFallbackToAudioOnly:在 v3.7.2.1 中很少使用。
- RENDER_MODE_TYPE 中的 RENDER_MODE_FILL(4):该模式可能造成图片过度拉伸,不推荐使用。
- AUDIO_MIXING_REASON_TYPE 中的以下枚举:在 v3.7.0 中应用场景很少。
- onAudioMixingFinished: 使用 onAudioMixingStateChanged 替代。
- enableDeepLearningDenoise:AI 降噪将在后续版本改由 SDK 控制,不通过 API 实现。
- takeSnapshot 和 onSnapshotTaken 中的 channel 参数:冗余参数。
- SetDefaultMuteAllRemoteAudioStreams:由 ChannelMediaOptions 中的 autoSubscribeAudio 替代。
- startAudioMixing 中的 replace 参数:由 ChannelMediaOptions 中的 publishMicrophoneTrack 替代。
命名变更
v4.1.1 的命名和数据类型变更会在你编译项目时引入 IDE 的报错提示,你需要根据提示更新 app 代码。
主要的 API 及参数名变更如下:
- adjustLoopbackRecordingSignalVolume 变更为 adjustLoopbackSignalVolume。
- onFirstLocalAudioFrame 变更为 onFirstLocalAudioFramePublished。
- LogConfig 中的 fileSize 成员变更为 fileSizeInKB。
- joinChannel [2/2] 中的 options 参数变更为 mediaOptions。
- enableAudioVolumeIndication 中的 report_vad 参数变更为 reportVad。
升级过程建议:
第一步:大家可以先升级版本,升级版本成功后,如果出现API变更,自然编译器会检查出来,我们更换成新的API即可.
第二步:中断性变更改完以后,可以跟着我的介绍或者是官网挨个check,我们使用过的api是否有变更,比如构造参数变更,方法实现逻辑变更等.
第三步:当我们使用过的API都check完成后,我就可以在各种模拟器上进行黑盒验证了.
第四步:qa验证完毕后,就可以留个升级经验文档了.此时应用简直流畅到飞起.