发版说明
音频模块不兼容 (iOS)
声网 Unreal SDK 的音频模块与 Unreal Engine 5.3、5.4 的 AudioMixer 模块不兼容。如果你使用 Unreal Engine 5.3 或 5.4,需要在项目的 /Config/IOS/IOSEngine.ini
文件中添加以下代码,关闭 Unreal Engine 的 AudioMixer 模块,以避免冲突。
[Audio]
AudioMixerModuleName=
macOS 15 Sequoia Beta 系统问题 (macOS)
当 App 路径(以及 App 名称)中包含中文字符时,编译后的 Metal shader library
中可能不包含任何方法,导致 App 无法正常运行。
v4.5.0
该版本于 2024 年 12 月 10 日发布。
该版本对部分功能的实现方式进行了优化,涉及 SDK 的行为变更、API 的改名或删除,为确保项目的正常运行,你需要在升级到该版本后更新 App 中的代码。
该版本调整了强效视频降噪的实现方式,在 VIDEO_DENOISER_LEVEL
中删除了 VIDEO_DENOISER_LEVEL_STRENGTH
,改为调用 setVideoDenoiserOptions
启用视频降噪后,调用 setBeautyEffectOptions
方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见 setVideoDenoiserOptions
。
此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见 setLowlightEnhanceOptions
。
在之前版本中,当摄像头拔出并重新插入时,onVideoDeviceStateChanged
回调会将设备状态报告为 MEDIA_DEVICE_STATE_ACTIVE(1)
(设备正在使用)。该版本起,摄像头重新插入后,设备状态将改为 MEDIA_DEVICE_STATE_IDLE(0)
(设备就绪)。
为提升用户的视频互动体验,该版本优化了视频编码时的默认偏好:
- 在
COMPRESSION_PREFERENCE
枚举类中新增PREFER_COMPRESSION_AUTO (-1)
枚举,并替代原有的PREFER_QUALITY (1)
作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择PREFER_LOW_LATENCY
或PREFER_QUALITY
,以获得最佳的用户体验。 - 在
DEGRADATION_PREFERENCE
枚举类中新增MAINTAIN_AUTO (-1)
枚举,并替代原有的MAINTAIN_QUALITY (1)
作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择MAINTAIN_FRAMERATE
、MAINTAIN_BALANCED
或MAINTAIN_RESOLUTION
,以获得最优的综合质量体验 (QoE)。
自 Android 15 起,系统新增了对 16 KB 内存页大小的支持,详见 Support 16 KB page sizes。为了保证 App 的稳定性和性能表现,自该版本起,SDK 支持 16 KB 内存页大小,确保可以在使用 4 KB 和 16 KB 内存页大小的设备上无缝运行,提升兼容性并避免崩溃。
该版本新增以下两种高级美颜功能:
- 美型:调用
setFaceShapeBeautyOptions
方法,可对人脸各部位进行修饰,你可以使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,并微调整体的修饰力度。如果预设的美型效果不能满足你的需求,你可以调用setFaceShapeAreaOptions
方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果。 - 美妆:调用
setExtensionProperty
方法,传入指定参数,可实现眼影、美瞳、眼线、美眉、唇彩、腮红等美妆特效。
目前,高级美颜功能为限时免费,详见计费策略。
该版本在 VIDEO_APPLICATION_SCENARIO_TYPE
类下新增枚举 APPLICATION_SCENARIO_LIVESHOW(3)
(秀场直播),你可以调用 setVideoScenario
将视频业务场景设置为秀场直播。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,例如,默认开启音视频加速渲染来提升首帧出图体验,无需再额外调用 enableInstantMediaRendering
,同时增强了在弱网环境和低端设备上的画质和流畅度表现。
该版本新增 setLocalRenderTargetFps
和 setRemoteRenderTargetFps
方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。
在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以通过这一组方法限制视频渲染帧率,从而减小 CPU 消耗、提升系统性能。
该版本新增 setFilterEffectOptions
方法,你可以在 config
参数中传入指定格式的立方体贴图文件 (.cube),从而实现美白、鲜艳、冷色、黑白等自定义滤镜效果。此外,SDK 提供了一个内置的 built_in_whiten_filter.cube
文件,用于快速实现美白滤镜效果。
该版本新增本地音频合流功能,你可以调用 startLocalAudioMixer
方法,将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流等合并为一路音频流,你可以将合并后的音频流发布到频道中。不再需要音频合流时,你可以调用 stopLocalAudioMixer
方法停止本地音频合流;在合流过程中,可以调用 updateLocalAudioMixerConfiguration
方法更新正在合流的音频流配置。
该功能的使用场景示例如下:
- 结合本地合图功能一起使用,可将合图视频流相关的音频流同步采集和发布。
- 在直播场景下,用户接收频道内的音频流,在本地进行多路音频流合流后转发到其他频道。
- 在教育场景下,老师可将跟学生连麦互动的音频在本地进行合流,然后将合并的音频流转发到其他频道。
该版本新增 setExternalMediaProjection
方法,该方法支持你自行设置外部 Medi aProjection
,并取代 SDK 申请的 MediaProjection
。
如果你具备自行申请 MediaProjection
的开发能力,可通过该功能实现更加灵活的屏幕采集。
该版本新增了 setExternalRemoteEglContext
方法,用于设置远端视频流渲染的 EGL 环境上下文。使用 Texture 格式的视频数据进行远端视频自渲染时,你可以通过该方法替换 SDK 默认的远端 EGL 环境上下文,实现统一的 EGL 上下文管理。
该版本在 VideoFrame
和 ExternalVideoFrame
中新增了 colorSpace
,你可以通过该参数设置视频帧的色彩空间属性。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,你可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。
onLocalVideoStateChanged
回调新增LOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTED
枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)MEDIA_DEVICE_STATE_TYPE
新增MEDIA_DEVICE_STATE_PLUGGED_IN
枚举,表示设备已插入。(Windows)
该版本升级了虚拟背景的算法,分割人像主体部分与背景时更加准确,背景无露出,人像身体轮廓无缺块,手指细节辨识显著提高。同时,人像与背景的边缘更加稳定,减少了连续视频帧中人像边缘的跳变和闪烁现象。
该版本在 RecorderStreamInfo
中新增 type
成员。当调用 createMediaRecorder
时,可通过该成员指定录制的视频流类型为本地预览视频流,并在 MediaRecorderConfiguration
中设置录制预览视频的高、宽、帧率、采样率等参数,之后调用 startRecording
即可开始录制本地预览的视频。
该版本新增 takeSnapshot [2/2]
和 takeSnapshotEx [2/2]
方法,你可以在调用该方法时通过 config
参数,在指定的视频观测点进行截图,比如:编码前、编码后或渲染前的数据,以实现更加灵活的截图效果。
该版本在 AudioTrackConfig
中新增了 enableAudioProcessing
成员参数,用于控制是否对 AUDIO_TRACK_DIRECT
类型的自定义音频采集轨道启用 3A 音频处理。该参数默认值为 false,即不启用音频处理,用户可以按需开启,此项改动提升了自定义音频处理的灵活性。
- 通过拼接视频帧和 Alpha 数据实现 Alpha 透明特效的应用场景下,提升了接收端的渲染性能,有效减少卡顿和延迟。(Android, iOS)
- 优化了调用
queryDeviceScore
获取设备评分等级的设计逻辑,提升了等级评分结果的准确性。 - 支持使用 YV 12 格式的虚拟摄像头作为视频采集设备。(Windows)
- 频道内调用
enableLocalAudio
关闭本地采集后,支持通过手机静音侧键把 App 播放的背景音效设置为静音状态。(iOS) - 调用
switchSrc
切换不同分辨率的直播流或点播流时,可以实现平滑且无感知的切换效果,并在切换失败时新增自动重试机制。SDK 会在切换失败后自动重试 3 次,如果依旧失败,会通过onPlayerEvent
回调报告PLAYER_EVENT_SWITCH_ERROR
事件,表示媒体资源切换时发生错误。 - 调用
setPlaybackSpeed
设置音频文件的播放速度时,最低支持 0.3 倍速播放。
该版本修复了以下问题:
- 调用
startScreenCaptureByWindowId
共享屏幕时,通过regionRect
指定的窗口采集区域不准确,导致接收端看到的屏幕共享窗口宽高错误。(Windows) - 当发送端视频源类型为 JPEG 格式时,偶现接收端帧率低于预期。(Android、iOS)
- 在播放音乐内容中心的音乐资源时,偶现杂音和卡顿。(Android)
- 在 App 没有获取麦克风权限时,通过
IMusicPlayer
播放伴奏音乐偶现卡顿。(Android) - 音视频互动过程中被系统来电打断后,通过
onAudioVolumeIndication
回调上报的用户音量错误。(Android) - 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用
muteRemoteVideoStream(uid,false)
恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android) - Windows 7 系统下进行音视频互动,偶现找不到系统文件的报错。(Windows)
- 调用
followSystemRecordingDevice
或followSystemPlaybackDevice
设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调onLocalAudioStateChanged
没有被触发,不符合预期。(Windows) - 音视频互动过程中,偶现接收端听发送端没有声音。(iOS)
- 音视频互动过程中,如果发送端设备的系统版本为 iOS 17,偶现接收端听不到来自发送端的声音。(iOS)
- 直播场景下,观众端因切换网络导致断开连接,重新连接直播间花费的时间长于预期。(iOS)
- App 启动后使用媒体播放器播放在线媒体资源,播放无声。(iOS)
- 音视频互动过程中被系统其他 App 打断后恢复,偶现音频采集无声。(iOS)
- 调用
startAudioMixing [1/2]
后,立即调用pauseAudioMixing
暂停播放音乐文件不生效。
v4.4.0
该版本于 2024 年 8 月 29 日发布。
该版本引擎实例的创建和销毁操作改为使用 Get
和 Release
方法,取代了之前的 createAgoraRtcEngine
和 release
,这一改动简化了实例管理。详情如下:
-
创建引擎实例:调用
Get
创建一个IRtcEngine
实例并返回一个指向AgoraUERtcEngine
的指针,你可以直接通过该指针调用IRtcEngine
下的方法。C++// 以调用 joinChannel 加入频道为例
AgoraUERtcEngine::Get()->joinChannel(TCHAR_TO_UTF8(*Token), TCHAR_TO_UTF8(*ChannelName), 0, ChannelMediaOptions); -
销毁引擎实例:调用
Get
创建实例后,如无需再使用该实例,务必调用Release
以销毁引擎实例并释放相关资源。C++AgoraUERtcEngine::Release();
该版本新增 AI 调音器功能,可以实现类似物理声卡对音质和音色的提升。你可以通过调用 enableVoiceAITuner
方法并传入 VOICE_AI_TUNER_TYPE
枚举中支持的音效类型来启用 AI 调音器功能,实现大叔音、萝莉音、烟嗓歌声等声音效果。
为满足 Apple 对于 App 发布的安全合规要求,SDK 自该版本起新增隐私清单文件 PrivacyInfo.xcprivacy
,其中包含 SDK 中需要访问或使用用户数据的 API 调用说明和 SDK 采集的数据类型说明。
如果你需要将集成该版本之前的 SDK 版本的 App 发布到苹果应用商店,则需要在 Xcode 工程中手动添加 PrivacyInfo.xcprivacy
文件。详见如何在 App 中增加隐私清单?
该版本针对 Android 摄像头采集新增以下功能:
-
支持第三个和第四个摄像头视频流的采集和发布。
VIDEO_SOURCE_TYPE
中的VIDEO_SOURCE_CAMERA_THIRD
(11) 和VIDEO_SOURCE_CAMERA_FOURTH
(12) 枚举新增对 Android 的支持,分别用于指定视频源为第三个和第四个摄像头。此项改动允许你在调用startCameraCapture
开启摄像头采集时,指定最多 4 路摄像头采集的视频流。ChannelMediaOptions
中的publishThirdCameraTrack
和publishFourthCameraTrack
成员新增对 Android 的支持。调用joinChannel
[2/2] 加入频道时,将这两个成员参数设置为true
即可在频道内发布第三个和第四个摄像头采集的视频流。
-
支持通过摄像头 ID 指定摄像头。
在
CameraCapturerConfiguration
中新增cameraId
成员。对于多摄像头的设备,cameraDirection
无法识别或访问全部可用摄像头。这种情况下,你通过系统 API 获取摄像头 ID,再调用startCameraCapture
并传入cameraId
指定摄像头。
该版本新增 selectMultiAudioTrack
方法,支持分别设置本地播放和发送至远端的音轨。在 K 歌等场景下,主播可以根据需求选择在本地播放一路音轨(如原声),然后发送另一路音轨至远端(如伴奏)以提升听众体验。 使用该功能前,需要通过 openWithMediaSource
打开媒体文件,并通过 MediaSource
中新增的 enableMultiAudioTrack
成员来开启音轨控制。
为方便接入声网云市场提供的第三方视频审核服务,该版本有以下改动:
CONTENT_INSPECT_TYPE
中新增CONTENT_INSPECT_IMAGE_MODERATION
枚举值,代表使用声网云市场视频审核插件对视频截图并上传。ContentInspectConfig
中新增的serverConfig
可选参数用于云市场视频审核相关服务端配置,配置后可同时接入多个云市场审核插件并实现灵活控制插件开关等功能,详情请联系技术支持。
此外,该版本还新增了 enableContentInspectEx
方法,支持同时对多条视频流截图并上传。
自该版本起,SDK 支持 ID3D11Texture2D 类型的视频格式,提升了游戏场景中视频帧的渲染效果。你可以在调用 pushVideoFrame
方法将外部原始视频帧推送到 SDK 时,设置 format
为 VIDEO_TEXTURE_ID3D11TEXTURE2D
;并通过设置 textureSliceIndex
属性,来确定要使用的 ID3D11Texture2D 纹理对象。
该版本新增通配 Token。生成 Token 时,在用户 ID 不为 0 的情况下,声网支持你将频道名设为通配符,从而生成可以加入任何频道的通配 Token。在需要频繁切换频道及多频道场景下,使用通配 Token 可以避免 Token 的重复配置,有助于提升开发效率,减少你的 Token 服务端的压力。详见使用通配 Token。
声网 4.x RTC SDK 均支持使用通配 Token。
该版本新增 preloadChannel
和 preloadChannelWithUserAccount
方法,支持角色为观众的用户在加入频道前预先加载一个或多个频道。该方法调用成功后可以减少观众加入频道的时间,从而缩短观众听到主播首帧音频以及看到首帧画面的耗时,提升观众端的音视频体验。
在同时预加载多个频道时,为避免观众在切换不同频道时需多次申请 Token 从而导致切换频道时间增长,因此声网推荐使用通配 Token 来减少你的业务服务端获取 Token 导致的耗时,进一步加快切换频道的速度,详见使用通配 Token。
该版本在 ChannelMediaOptions
中新增下列成员,支持你发布第三个、第四个摄像头和屏幕采集到的视频流:
publishThirdCameraTrack
:发布第三个摄像头采集的视频。publishFourthCameraTrack
:发布第四个摄像头采集的视频。publishThirdScreenTrack
:发布第三个屏幕采集的视频。publishFourthScreenTrack
:发布第四个屏幕采集的视频。
目前 SDK 支持在同一时间、同一 RtcConnection
中发布多路音频流、一路视频流。
如需引用其他头文件,你可以将它们统一添加到 AgoraHeaderBase.h
中,以简化项目中头文件的管理、便于后续维护。
该版本将跨频道连麦时媒体流转发的目标频道增加至 6 个,在调用 startOrUpdateChannelMediaRelay
和 startOrUpdateChannelMediaRelayEx
时,你可以指定最多 6 个目标频道。
在 Unreal Engine 5.3 和 5.4 版本中,当你在项目的 /Source/xxx.Target.cs
文件添加以下代码以解决 iOS 内存分配问题时,可能会导致 iOS 编译符号缺失。为解决这一问题,该版本在 UnrealMemory.cpp
文件中添加了 3 个与标准库相关的函数定义 (StdMalloc
、StdRealloc
和 StdFree
),确保在使用标准内存分配器时能够正确处理内存管理需求。(iOS)
if (Target.Platform == UnrealTargetPlatform.IOS)
{
bOverrideBuildEnvironment = true;
GlobalDefinitions.Add("FORCE_ANSI_ALLOCATOR=1");
}
v4.2.1
该版本于 2023 年 11 月 16 日发布,该版本为声网 RTC Unreal SDK 的首个版本。
该 SDK 由声网为使用 Unreal 的开发者而设计,旨在为 Unreal Engine 用户提供简单且用户友好的实时互动解决方案。
SDK 提供了一套强大的 C++ API,使开发者可以轻松构建具备实时互动功能的游戏或者 App,并可以借助 Unreal Engine 强大的图形引擎功能,为 App 添加各种视觉效果和交互性能,为用户提供更加沉浸式的体验。
你可以参考以下文档集成 SDK,实现相应的实时音视频功能:
声网提供了开源的示例项目,你可以前往下载并体验。
如果你已经集成了 3.x 版本的 SDK、想要升级至该版本,请参考迁移指南了解升级。