AndroidManifest.xml
文件中添加 android.permission.BLUETOOTH_CONNECT
权限,以开启 Android 系统的蓝牙功能。该版本于 2022 年 8 月 3 日发布。
1. 兼容性变更
v4.0.0 SDK 对部分功能的实现方式进行了优化,从而导致与 v3.7.0 不兼容。升级 SDK 后,你需要结合实际业务场景更新 app 代码,详见迁移指南。
2. 回调异常处理
自该版本起,为了方便开发者排查自身的集成问题,SDK 不再捕获开发者在 IRtcEngineEventHandler
类回调中自行实现的代码逻辑中的异常。你需要自行处理该异常,否则异常出现时可能引起 app 崩溃。
1. 多路媒体流
该版本支持通过设置 ChannelMediaOptions
,实现一个 RtcEngine
实例同时采集多路音视频源并发布到远端,适应各种业务场景。例如:
该版本支持通过 createCustomVideoTrack
方法实现自定义视频采集。你可以参考如下步骤,体验同时发布多路自定义采集视频流:
创建自采集视频轨道:调用 createCustomVideoTrack
方法创建一个自定义视频轨道,并获得视频轨道 ID。
设置频道中待发布的自采集视频轨道:在每个频道的 ChannelMediaOptions
中,将 customVideoTrackId
参数设置为你想要发布的视频轨道 ID,并将 publishCustomVideoTrack
设置为 true
。
推送外部视频源:调用 pushExternalVideoFrameEx
,并将 customVideoTrackId
指定为你想要发布的自定义视频轨道 ID,即可根据步骤 2 的设置,实现在多个频道中发布对应的自定义视频源。
结合多频道能力,你还可以体验如下功能:
uid
)发布到远端。uid
)发布到远端。uid
)发布到远端。uid
)发布到远端。2. 超高清分辨率 (Beta)
为提升视频互动体验,SDK 对视频采集、编码、解码、渲染全流程做出了优化,自该版本起支持 4K 分辨率。优化了 FEC(Forward Error Correction)算法,可根据视频帧包数与帧率进行自适应切换,降低 4K 场景下的视频卡顿率。
你可以在调用 setVideoEncoderConfiguration
时,设置编码分辨率为 4K (3840 × 2160)、帧率为 60 fps。当你的设备不支持 4K 时,SDK 支持自动回退到适合的分辨率和帧率。
3. 内置媒体播放器
为减少 SDK 包体积、集成时间,以及简化 API 的调用步骤,该版本支持内置媒体播放器。调用 createMediaPlayer
创建媒体播放器后,你可以通过 IMediaPlayer
类的一系列方法体验内置媒体播放器的各类功能:
4. 新版 AI 降噪
自该版本起,SDK 支持新版 AI 降噪(相对于 v3.7.0 中的基础 AI 降噪)功能。相比原版 AI 降噪,新版 AI 降噪具有更好的人声保真度、更干净的噪声抑制,并新增了去混响(Dereverberation)能力。
5. 超高音质
为还原音频的细节、提升音频的清晰度,该版本新增 ULTRA_HIGH_QUALITY_VOICE
。在语聊、歌唱等以人声为主的场景中,你可以调用 setVoiceBeautifierPreset
并使用该枚举体验超高音质。
6. 空间音效
该版本提供如下方案实现空间音效,你可以任选一种方案使用:
本地直角坐标系计算方案: 该方案使用 ILocalSpatialAudioEngine
类实现空间音效,通过 SDK 计算远端用户的空间坐标。你需要分别调用 updateSelfPosition
和 updateRemotePosition
更新本地和远端用户的空间坐标,本地用户才能听到远端用户的空间音效。
本地球坐标系计算方案: 该方案使用 RtcEngine
类的 enableSpatialAudio
和 setRemoteUserSpatialAudioParams
实现空间音效。你需要向 SDK 传入本地用户与远端用户的相对水平角、俯仰角、距离与朝向,本地用户才能听到远端用户的空间音效。如果你的 app 基于空间坐标来确定用户位置,在使用空间音效时,你还需要通过用户的空间坐标自行计算出用户间的相对水平角、俯仰角、距离与朝向。
该版本还支持对媒体播放器设置空间音效,你可以任选一种方案使用:
本地直角坐标系计算方案: 该方案通过 SDK 计算媒体播放器的空间坐标。你需要在 ILocalSpatialAudioEngine
类中分别调用 updateSelfPosition
和 updatePlayerPositionInfo
更新本地用户和媒体播放器的空间坐标,本地用户才能听到媒体播放器的空间音效。
本地球坐标系计算方案: 该方案使用 IMediaPlayer
类的 setSpatialAudioParams
实现空间音效。你需要向 SDK 传入本地用户与媒体播放器的相对水平角、俯仰角、距离与朝向,本地用户才能听到媒体播放器的空间音效。如果你的 app 基于空间坐标来确定本地用户和媒体播放器的位置,在使用空间音效时,你还需要通过本地用户与媒体播放器的空间坐标自行计算出两者间的相对水平角、俯仰角、距离与朝向。
7. 实时合唱
该版本为实时合唱赋予了如下能力:
该版本新增 AUDIO_SCENARIO_CHORUS
枚举来设置极低延时。使用该枚举后,在网络条件良好的情况下,用户可以体验到极低延时的实时合唱。
8. 云市场插件
为在 Agora SDK 的基础上增强实时音视频互动性,该版本支持声网云市场插件的一站式解决方案:
9. 增强的频道管理
为满足各类业务场景对频道管理的需求,该版本在 ChannelMediaOptions
结构体中新增了如下功能:
在调用 joinChannel
或 joinChannelEx
时设置 ChannelMediaOptions
,明确媒体流发布和订阅行为,例如,是否发布摄像头采集或者屏幕共享的视频流,是否要主动订阅远端用户的音视频流。加入频道后,调用 updateChannelMediaOptions
随时更新 ChannelMediaOptions
中的设置,例如,切换发布的音视频源。
10. 屏幕共享
该版本优化了开启屏幕共享的逻辑,你可以根据实际场景选择不同的方式开启屏幕共享:
startScreenCapture
,然后调用 joinChannel
[2/2] 加入频道并设置 publishScreenCaptureVideo
为 true
,即可开始屏幕共享。startScreenCapture
,然后调用 updateChannelMediaOptions
设置 publishScreenCaptureVideo
为 true
,即可开始屏幕共享。11. 设置音视频流订阅黑/白名单
该版本新增音视频流订阅黑/白名单功能,支持灵活订阅频道内发流用户的音视频流。你可以通过以下 API 来将指定用户的用户 ID 加入到相应的音视频黑白名单中,从而实现订阅/不订阅指定用户的音频或视频流。在多频道场景下,你可以通 RtcEngineEx
类下的同名方法来实现该功能。
setSubscribeAudioBlacklist
:设置音频订阅黑名单。setSubscribeAudioWhitelist
:设置音频订阅白名单。setSubscribeVideoBlacklist
:设置视频订阅黑名单。setSubscribeVideoWhitelist
:设置视频订阅白名单。如果某个用户同时在音频或视频订阅的黑、白名单中,只有黑名单会生效。
12. 设置音频场景
为方便用户灵活修改音频场景,该版本新增 setAudioScenario
方法,支持你根据业务需求设置音频场景。例如,如果你在频道内想将音频场景从自动场景 (AUDIO_SCENARIO_DEFAULT
)切换为高音质场景 (AUDIO_SCENARIO_GAME_STREAMING
),你可以调用该方法。
13. 设置本地代理
该本版新增 setLocalAccessPoint
方法,用于在成功部署声网混合云、私有化平台后,指定 Local Access Point 来设置本地代理。你可以联系 sales@agora.io 了解和部署声网混合云或声网私有化平台。
14. 垫片推流
该版本新增垫片推流功能,支持你在发流时使用本地 png 格式的图片来替代当前发布的视频流画面进行推流。你可以通过 enableVideoImageSource
来开启该功能,并通过 options
参数自定义垫片图片;在你关闭垫片功能之后,远端用户看到的依旧是当前你发布的视频流画面。
1. 快速切换频道
该版本通过 leaveChannel
和 joinChannel
切换频道即可实现和 v3.7.0 中 switchChannel
一样的切换速度,无需额外调用 switchChannel
方法。
2. 推送外部视频帧
该版本新增支持推送 I422 格式的外部视频帧,你可以通过 pushExternalVideoFrame
[1/2] 方法将 I422 格式的外部视频帧推送至 SDK。
3. 本地人声音调
该版本在 onAudioVolumeIndication
的 AudioVolumeInfo
中新增 voicePitch
参数。你可以通过 voicePitch
获取本地用户的人声音调,从而实现唱歌评分等业务功能。
4. 设备权限管理
该版本新增 onPermissionError
方法,当获取音频采集设备或摄像头权限开启失败时自动上报,用户可根据该回调的提示开启相应的设备权限。
5. 本地视频预览
该版本优化了 startPreview
方法的调用逻辑。如果你需要开启本地视频预览,你可以直接通过 startPreview
方法来开启视频预览,无调用时序要求。
6. 订阅视频流
你可以通过 setRemoteDefaultVideoStreamType
方法,根据你想要订阅的视频流分辨率和码率来灵活设置默认订阅视频流类型。