You need to enable JavaScript to run this app.
文档中心
实时音视频

实时音视频

复制全文
下载 pdf
SDK 升级指南
Electron 客户端升级指南
复制全文
下载 pdf
Electron 客户端升级指南

如果你希望从此前版本的 Electron 客户端 SDK 升级到最新的客户端 SDK,请在工程文件中替换最新的客户端 SDK 文件,并参考本文完成 API、回调、参数类型等的替换。

升级过程中,你可能需要参考历史版本文档归档。

3.60.1

Electron SDK 3.60.1 对引擎类、房间和单流模型、发布订阅、屏幕共享、WTN 流、转推直播及多种数据类型进行了调整。从 3.58.1 及更早版本升级时,请按本节逐项修改。

API 变更

类名变更

RTCVideo 更名为 RTCEngine,SDK 的核心类及导出名称同步变更。

引擎管理

功能3.58.13.60.1变更说明
创建引擎createRTCVideo(app_id: string, parameters: string)createRTCEngine(engine_config: EngineConfig)接口重命名,app_id 和 parameters 移入 EngineConfig。
销毁引擎destroyRTCVideo()destroyRTCEngine()接口重命名。销毁引擎前,仍需先离开并销毁已创建的房间。
获取错误描述getErrorDescription(code)/接口已删除,无替代接口。

网络管理

功能3.58.13.60.1变更说明
回路测试startEchoTest(echo_test_config, play_delay_time)、stopEchoTest()startEchoTest(echo_test_config, play_delay_time)、stopEchoTest()3.60.1 中固定返回 -1,暂不支持该能力。

音频处理

功能3.58.13.60.1变更说明
设置变声特效setVoiceChangerType(change_type: number)setVoiceChangerType(change_type: VoiceChangerType)参数改为枚举类型。
设置混响特效setVoiceReverbType(voice_reverb_type: number)setVoiceReverbType(voice_reverb_type: VoiceReverbType)参数改为枚举类型。

房间管理

功能3.58.13.60.1变更说明
加入房间joinRoom(token, user_info, config?)joinRoom(token, user_info, user_visibility, config?)新增必填参数 user_visibility,用于设置进房时的用户可见性。
自动发布配置RTCRoomConfig.is_auto_publishis_auto_publish_audio、is_auto_publish_video自动发布配置按音频和视频拆分。
房间配置/RTCRoomConfig.live_mode、RTCRoomConfig.stream_id分别用于设置直播模式和本地发布流 ID。
远端视频订阅配置RTCRoomConfig.remote_video_config/房间配置中不再包含远端视频订阅参数;进房后通过 setRemoteVideoConfig(stream_id, remote_video_config) 按流设置。
创建房间失败回调onCreateRoomStateChanged(room_id, error_code)/回调已删除,无替代回调。
远端可见用户加入回调onUserJoined(user_info, elapsed)onUserJoined(user_info)删除无效参数 elapsed。

发布和订阅 Simulcast 流

功能3.58.13.60.1变更说明
开启或关闭多路视频流enableSimulcastMode(enabled)setLocalSimulcastMode(mode, stream_config?)通过 VideoSimulcastMode 选择只发一路流、按需发布大小流或始终发布大小流。新接口需在进房前调用。
设置编码参数setVideoEncoderConfig(configs: VideoEncoderConfig[])setVideoEncoderConfig(config: VideoEncoderConfig)从配置多路视频参数改为设置一路期望发布的最大分辨率视频流参数。
设置最大编码参数setMaxVideoEncoderConfig(max_solution)/接口已删除;使用 setVideoEncoderConfig(config) 设置期望发布的最大分辨率视频流参数。
设置远端视频订阅参数setRemoteVideoConfig(user_id, remote_video_config)setRemoteVideoConfig(stream_id, remote_video_config)从按用户设置改为按流 ID 设置。
订阅降级回调onSimulcastSubscribeFallback(event)onSimulcastSubscribeFallback(stream_id, stream_info, event)新增 stream_id 和 StreamInfo,用于标识发生降级或恢复的流。

发布和订阅主流

发布和订阅接口按音频、视频拆分,并通过布尔参数合并发布与取消发布、订阅与取消订阅操作。

功能3.58.13.60.1变更说明
发布或取消发布publishStream(type)、unpublishStream(type)publishStreamVideo(publish)、publishStreamAudio(publish)按媒体类型拆分;publish 为 true 时发布,为 false 时取消发布。
远端流发布状态onUserPublishStream、onUserUnpublishStreamonUserPublishStreamVideo(stream_id, stream_info, is_publish)、onUserPublishStreamAudio(stream_id, stream_info, is_publish)按媒体类型拆分;is_publish 表示发布或取消发布,不再提供 StreamRemoveReason。
本地发布状态onStreamStateChanged(...)onVideoPublishStateChanged(stream_id, stream_info, state, reason)、onAudioPublishStateChanged(stream_id, stream_info, state, reason)按媒体类型拆分,并通过 PublishState 和 PublishStateChangeReason 返回状态及原因。
订阅或取消订阅subscribeStream(user_id, type)、unsubscribeStream(user_id, type)subscribeStreamVideo(stream_id, subscribe)、subscribeStreamAudio(stream_id, subscribe)改为按流 ID 操作;subscribe 为 true 时订阅,为 false 时取消订阅。
订阅状态onStreamSubscribed(state_code, user_id, info)onVideoSubscribeStateChanged(stream_id, stream_info, state, reason)、onAudioSubscribeStateChanged(stream_id, stream_info, state, reason)按媒体类型拆分,并通过 SubscribeState 和 SubscribeStateChangeReason 返回状态及原因。
订阅或取消订阅所有流subscribeAllStreams(type)、unsubscribeAllStreams(type)subscribeAllStreamsAudio()、unsubscribeAllStreamsAudio()、subscribeAllStreamsVideo()、unsubscribeAllStreamsVideo()接口按媒体类型拆分。
暂停或恢复接收所有流pauseAllSubscribedStream(type)、resumeAllSubscribedStream(type)pauseAllSubscribedStreamAudio()、resumeAllSubscribedStreamAudio()、pauseAllSubscribedStreamVideo()、resumeAllSubscribedStreamVideo()接口按媒体类型拆分,并移除媒体类型参数。

屏幕分享

3.60.1 统一了屏幕流与普通流的发布、订阅、编码和渲染接口。采集接口仍使用 startScreenAudioCapture、startScreenVideoCapture、stopScreenAudioCapture 和 stopScreenVideoCapture。同一用户同一时刻只能发布一路音视频流,不能同时发布摄像头流和屏幕流;切换采集源后,使用统一的发布接口控制当前流。

功能3.58.13.60.1变更说明
屏幕流编码参数setScreenVideoEncoderConfig(config)setVideoEncoderConfig(config)屏幕流和摄像头流共用编码参数接口。
发布屏幕流publishScreen(type)、unpublishScreen(type)publishStreamVideo(publish)、publishStreamAudio(publish)屏幕流和普通流共用发布接口。
订阅屏幕流subscribeScreen(user_id, type)、unsubscribeScreen(user_id, type)subscribeStreamVideo(stream_id, subscribe)、subscribeStreamAudio(stream_id, subscribe)屏幕流和普通流共用订阅接口,并改为按 stream_id 操作。
本地屏幕渲染setupLocalScreen(...)、removeLocalScreen()setupLocalVideo(...)、removeLocalVideo()本地屏幕流和摄像头流共用渲染接口。
远端屏幕渲染setupRemoteScreen(user_id, room_id, ...)、removeRemoteScreen(user_id, room_id)setupRemoteVideo(stream_id, ...)、removeRemoteVideo(stream_id)通过 stream_id 区分并渲染远端屏幕流。
屏幕流发布回调onUserPublishScreen、onUserUnpublishScreenonUserPublishStreamVideo、onUserPublishStreamAudio屏幕流与普通流共用发布状态回调,通过 StreamInfo.is_screen 判断是否为屏幕流。
屏幕首帧回调onScreenVideoFrameSendStateChanged、onScreenVideoFramePlayStateChanged、onScreenAudioFrameSendStateChanged、onScreenAudioFramePlayStateChangedonVideoFrameSendStateChanged、onVideoFramePlayStateChanged、onAudioFrameSendStateChanged、onAudioFramePlayStateChanged屏幕流和普通流共用首帧状态回调,通过 stream_id 和 StreamInfo 区分。
屏幕采集音量setCaptureVolume(stream_index, volume)setCaptureVolume(volume)、setScreenCaptureVolume(volume)麦克风和屏幕音频采集音量分别设置。
屏幕音频流索引setScreenAudioStreamIndex(index)/接口已删除,无替代接口。

WTN 流(原公共流)

公共流能力调整为 WTN 流模块。发布 WTN 流与合流转推 CDN 共用合流任务接口;订阅和播放 WTN 流则迁移到独立的 RTCWTNStream。

功能3.58.13.60.1变更说明
获取 WTN 流实例/getWTNStream()新增接口,返回 RTCWTNStream。
发布或更新 WTN 流startPushPublicStream、updatePublicStreamParamstartPushMixedStream、updatePushMixedStream在 IMixedStreamConfig 中将 push_target_type 设为 kMixedStreamPushTargetTypeToWTN,并通过 push_wtn_stream_id 指定 WTN 流 ID。
停止发布 WTN 流stopPushPublicStream(public_stream_id)stopPushMixedStream(task_id, target_type)target_type 设为 kMixedStreamPushTargetTypeToWTN。
订阅或取消订阅startPlayPublicStream、stopPlayPublicStreamsubscribeWTNVideoStream(stream_id, subscribe)、subscribeWTNAudioStream(stream_id, subscribe)按音频、视频拆分,并通过布尔参数合并订阅和取消订阅。
内部渲染setupPublicStreamVideo、removePublicStreamVideosetupWTNRemoteVideo、removeWTNRemoteVideo迁移到 RTCWTNStream。
自定义渲染setPublicStreamVideoSink、unsetPublicStreamVideoSinksetWTNRemoteVideoSink、unsetWTNRemoteVideoSink迁移到 RTCWTNStream。
播放音量setPublicStreamAudioPlaybackVolumesetWTNRemoteAudioPlaybackVolume迁移到 RTCWTNStream。
发送 SEIsendPublicStreamSEIMessage(stream_index, channel_id, message, repeat_count, mode)sendPublicStreamSEIMessage(channel_id, message, repeat_count, mode)删除 stream_index;接收端通过 RTCWTNStream.onWTNSEIMessageReceived 获取 SEI 消息。
发布结果onPushPublicStreamResultonMixedStreamEventWTN 和 CDN 合流任务共用 MixedStreamTaskInfo、MixedStreamTaskEvent 和 MixedStreamTaskErrorCode。
订阅及媒体回调onPlayPublicStreamResult、onFirstPublicStreamAudioFrame、onFirstPublicStreamVideoFrameDecoded、onPublicStreamSEIMessageReceived、onPublicStreamDataMessageReceived、onPublicStreamVideoFrameonWTNVideoSubscribeStateChanged、onWTNAudioSubscribeStateChanged、onWTNFirstRemoteAudioFrame、onWTNFirstRemoteVideoFrameDecoded、onWTNSEIMessageReceived、onWTNDataMessageReceived、onWTNVideoFrame回调迁移到 RTCWTNStream,订阅结果按音频和视频拆分。

转推直播

功能3.58.13.60.1变更说明
服务端合流转推startPushMixedStreamToCDN、updatePushMixedStreamToCDNstartPushMixedStream、updatePushMixedStreamCDN 和 WTN 共用一套接口,通过 IMixedStreamConfig.push_target_type 区分目标。
旧转码接口startLiveTranscoding、updateLiveTranscoding、stopLiveTranscodingstartPushMixedStream、updatePushMixedStream、stopPushMixedStream旧接口删除,配置统一为 IMixedStreamConfig。
合流任务回调onStreamMixingEvent、onMixingEventonMixedStreamEvent服务端合流转推任务统一使用 MixedStreamTaskEvent 和 MixedStreamTaskErrorCode。
单流转推startPushSingleStreamToCDN、stopPushStreamToCDNstartPushSingleStream、stopPushSingleStream除 CDN 外,还可通过 PushSingleStreamParam.dest_info 和 push_type 转推到 RTC 房间。
单流转推回调onStreamPushEvent(event, task_id, error)onSingleStreamEvent(task_id, event, error_code)事件类型改为 SingleStreamTaskEvent,错误码类型改为 SingleStreamTaskErrorCode。

音视频传输

onFirstRemoteAudioFrame、onFirstRemoteVideoFrameRendered 和 onFirstRemoteVideoFrameDecoded 改为通过 stream_id 和 StreamInfo 标识远端流。

音量和音频场景

功能3.58.13.60.1变更说明
远端流播放音量setRemoteAudioPlaybackVolume(room_id, user_id, volume)setRemoteAudioPlaybackVolume(stream_id, volume)改为按流 ID 设置。
麦克风采集音量setCaptureVolume(stream_index, volume)setCaptureVolume(volume)删除 stream_index。屏幕音频改用 setScreenCaptureVolume。
麦克风采集静音muteAudioCapture(stream_index, mute)muteAudioCapture(index, mute)为兼容旧版本保留首个参数,但当前实现会忽略该参数,只控制麦克风采集。屏幕音频改用 muteScreenAudioCapture(mute)。
音频场景setAudioScenario(scenario)、setAudioScene(scene)/两个接口以及 AudioScenarioType、AudioSceneType 已从 Electron 3.60.1 导出中删除。

推送外部视频帧

3.58.13.60.1变更说明
setVideoSourceType(stream_index, type)setVideoSourceType(type)删除 stream_index。
pushExternalVideoFrame(frame)pushExternalVideoFrame(frame)方法签名不变,但 ExternalVideoFrame 删除 color_space,相应的 ColorSpace 枚举不再导出。

StreamId 唯一识别流

3.60.1 使用 stream_id 唯一标识一路流。原来通过 room_id、user_id、StreamIndex 或 RemoteStreamKey 定位流的接口和回调,需要改为传入 stream_id;StreamInfo 提供 stream_id、room_id、user_id、stream_index 和 is_screen。

需要迁移的主要接口如下:

3.58.13.60.1
setupRemoteVideo(user_id, room_id, view, ...)setupRemoteVideo(stream_id, view, ...)
removeRemoteVideo(user_id, room_id)removeRemoteVideo(stream_id)
setRemoteVideoSink(stream_key, required_format)setRemoteVideoSink(stream_id, config?)
unsetRemoteVideoSink(stream_key)unsetRemoteVideoSink(stream_id)
takeRemoteSnapshot(stream_key)takeRemoteSnapshot(stream_id)
setRemoteAudioPlaybackVolume(room_id, user_id, volume)setRemoteAudioPlaybackVolume(stream_id, volume)
setAudioAlignmentProperty(stream_key, mode)setAudioAlignmentProperty(stream_id, mode)
setRemoteVideoSuperResolution(stream_key, mode)setRemoteVideoSuperResolution(stream_id, mode)
sendSEIMessage(stream_index, message, repeat_count, mode)sendSEIMessage(message, repeat_count, mode)
sendStreamSyncInfo(data, config),其中 config.stream_index 用于指定流sendStreamSyncInfo(data, config),config 删除 stream_index
startFileRecording(type, config, recording_type)startFileRecording(config, recording_type)
stopFileRecording(type)stopFileRecording()
setVideoWatermark(stream_index, image_path, config)setVideoWatermark(image_path, config)
clearVideoWatermark(stream_index)clearVideoWatermark()
takeLocalSnapshot(stream_index)takeLocalSnapshot()
setLocalVideoSink(stream_index, required_format)setLocalVideoSink(config)
unsetLocalVideoSink(stream_index)unsetLocalVideoSink()

下列回调也改为通过 stream_id 和 StreamInfo 标识流:

  • onUserStartAudioCapture、onUserStopAudioCapture、onUserStartVideoCapture、onUserStopVideoCapture;
  • onRemoteAudioStateChanged、onRemoteVideoStateChanged;
  • onFirstRemoteAudioFrame、onFirstRemoteVideoFrameRendered、onFirstRemoteVideoFrameDecoded、onRemoteVideoSizeChanged;
  • onAudioFrameSendStateChanged、onAudioFramePlayStateChanged、onVideoFrameSendStateChanged、onVideoFramePlayStateChanged;
  • onSEIMessageReceived、onSEIStreamUpdate、onStreamSyncInfoReceived、onRemoteUserAudioFrame、onTakeRemoteSnapshotResult。
  • onPerformanceAlarms 从通过 room_id 标识受影响房间,改为通过 stream_id 和 StreamInfo 标识受影响流。

本地流回调也移除了 StreamIndex:onFirstLocalAudioFrame()、onFirstLocalVideoFrameCaptured(info)、onLocalVideoSizeChanged(info)、onLocalVideoStateChanged(state, error)、onRecordingStateUpdate(state, error_code, info) 和 onRecordingProgressUpdate(process, info)。onLocalAudioStateChanged(state, error) 的签名不变。

空间音频位置接口

updateSpatialPosition、updateSelfOrientation、updateListenerPosition 和 updateListenerOrientation 已删除。请使用 updateSelfPosition(position_info) 和 updateRemotePosition(uid, position_info),通过 PositionInfo 同时设置位置和朝向。

音频混音

RTCEngine 中旧的音频混音接口及其回调、类型已删除:

  • 短音效使用 RTCAudioEffectPlayer。
  • 音乐文件或 PCM 数据混音使用 RTCMediaPlayer。
  • 原 startAudioMixing、stopAudioMixing、pauseAudioMixing、resumeAudioMixing、preloadAudioMixing、unloadAudioMixing,以及 getAudioMixing*、setAudioMixing*、stopAllAudioMixing、pauseAllAudioMixing、resumeAllAudioMixing 不再由 RTCEngine 提供。
  • onAudioMixingFinished、onAudioMixingStateChanged、onAudioMixingPlayingProgress、AudioMixingConfig、AudioMixingState 和 AudioMixingError 不再导出。
  • RTCMediaPlayer 新增 onMediaPlayerEvent(player_id, event, message),用于接收播放器事件。

类型变更

房间模式

RoomLiveMode 枚举定义为:kRoomLiveModeCoHost = 1 表示连麦直播,kRoomLiveModeSoloHost = 2 表示单人直播。

视频帧与视频 Sink

类型变更说明
ExternalVideoFrame删除 color_space 字段;ColorSpace 枚举不再导出。
IVideoFrame删除 public_stream_id,新增 is_screen 和可选字段 stream_id。
LocalVideoSinkConfig新增本地视频帧回调配置,包含 position 和 pixel_format;position 使用新增的 LocalVideoSinkPosition。
RemoteVideoSinkConfig新增远端视频帧回调配置,包含 pixel_format、apply_rotation 和 mirror_type;后两个字段分别使用新增的 VideoApplyRotation 和 VideoSinkMirrorType。
VideoEncoderConfig新增可选字段 key_frame_interval_ms,单位为毫秒,默认值为 0,表示由编码器自行决定。

合流转推事件

StreamMixingEvent 替换为 MixedStreamTaskEvent,事件值重新整理:

3.60.1 枚举值数值
kMixedStreamTaskEventStartSuccess1
kMixedStreamTaskEventStartFailed2
kMixedStreamTaskEventUpdateSuccess3
kMixedStreamTaskEventUpdateFailed4
kMixedStreamTaskEventStopSuccess5
kMixedStreamTaskEventStopFailed6
kMixedStreamTaskEventWarning7

IMixedStreamConfig 新增 push_target_type、push_wtn_stream_id、layout_mode 和 interpolation_mode。其中,push_target_type 用于选择 CDN 或 WTN;向 WTN 推流时,可通过其余字段设置 WTN 流 ID、布局模式和补帧模式。补帧模式使用新增的 InterpolationMode。

MixedStreamLayoutRegionConfig.region_id 更名为 user_id;布局坐标 location_x、location_y、width、height 从归一化比例改为像素值;新增 source_crop,仅用于 WTN 源视频裁剪。

单流转推事件

SingleStreamPushEvent 替换为 SingleStreamTaskEvent:

3.60.1 枚举值数值
kSingleStreamTaskEventStartSuccess1
kSingleStreamTaskEventStartFailed2
kSingleStreamTaskEventStopSuccess3
kSingleStreamTaskEventStopFailed4
kSingleStreamTaskEventWarning5

PushSingleStreamParam 新增 dest_info、dest_info_size 和 push_type,并新增 DestInfo、SingleStreamPushType 类型,用于配置转推到 RTC 房间或 CDN。

音视频流统计信息

类型新增字段
LocalAudioStatsencode_frame_rate
RemoteAudioStatsdecode_frame_rate、is_muted
RemoteVideoStatscap_to_render_delay、av_sync_diff_ms、is_muted

其他类型

  • SubscribeState 的旧含义迁移到 StreamSubscribeState;新的 SubscribeState 仅表示已订阅或已取消订阅。新增 PublishState、PublishStateChangeReason 和 SubscribeStateChangeReason。
  • 新增 EngineConfig、StreamInfo、VideoSimulcastMode、SnapshotErrorCode、AVSyncEvent、MixedStreamTaskInfo、MixedStreamPushTargetType、WTNSubscribeState 和 WTNSubscribeStateChangeReason。
  • StreamSycnInfoConfig 修正为 StreamSyncInfoConfig,旧拼写不再导出。
  • StreamSyncInfoConfig 删除 stream_index 字段。
  • LocalAudioPropertiesInfo 删除 stream_index 字段;RemoteAudioPropertiesInfo 删除 stream_key,新增 stream_id 和 stream_info。
  • AudioFrameCallbackMethod 新增 kCaptureMixed,对应麦克风采集音频与 MediaPlayer、EffectPlayer 播放音频的混音数据回调 onCaptureMixedAudioFrame。
  • onFaceDetectResult 从传入单个 FaceDetectResult 对象,改为依次传入 detect_result、face_count、rect、image_width、image_height 和 frame_timestamp_us。

错误码变更

回调告警码

变更3.58.13.60.1
拼写修正kWarningCodePublishStreamForbiden = -2009kWarningCodePublishStreamForbidden = -2009
新增/kWarningCodeSubscribeStreamForbidden = -2010

WTN 流错误码

PublicStreamErrorCode 已删除。发布 WTN 流的任务结果通过 onMixedStreamEvent 返回,并使用 MixedStreamTaskErrorCode;订阅 WTN 流的状态和原因分别通过 WTNSubscribeState 和 WTNSubscribeStateChangeReason 返回。旧公共流错误码与新枚举的语义并非一一对应,升级时应按新的发布任务事件和订阅状态回调分别处理。

合流转推错误码

StreamMixingErrorCode 替换为 MixedStreamTaskErrorCode。新枚举的有效错误码如下:

错误码数值
kMixedStreamTaskErrorCodeOK0
kMixedStreamTaskErrorCodeTimeout1091
kMixedStreamTaskErrorCodeInvalidParamByServer1092
kMixedStreamTaskErrorCodeSubTimeoutByServer1093
kMixedStreamTaskErrorCodeInvalidStateByServer1094
kMixedStreamTaskErrorCodeAuthenticationByCDN1095
kMixedStreamTaskErrorCodeUnKnownByServer1096
kMixedStreamTaskErrorCodeSignalRequestTimeout1097
kMixedStreamTaskErrorCodeMixImageFailed1098
kMixedStreamTaskErrorCodePushWTNFailed1195

单流转推错误码

单流转推使用新增的 SingleStreamTaskErrorCode。除 0 和 1090~1097 外,Electron 3.60.1 还增加:

错误码数值说明
kSingleStreamTaskErrorCodePushToCDN1098转推到 CDN 失败。
kSingleStreamTaskErrorCodeCountOverLimit1099超过单流转推任务数限制。

其他错误码

  • ReturnStatus 新增 kReturnStatusAudioDeviceProcessNotExist = -110、kReturnStatusAudioDeviceSpecifyingProcessUnsupport = -111、kReturnStatusAecSceneError = -302 和 kReturnStatusAecTypeWarning = -303。
  • MediaDeviceWarning 新增 kMediaDeviceWarningRecordingAllProcess = 29 和 kMediaDeviceWarningRecordingAllProcessFailed = 30。

新增接口和回调

除前述模块中的替代接口外,3.60.1 还新增以下能力:

类别新增接口或回调说明
房间getCallId、setLiveMode、setStreamExtraInfo、onRoomStreamExtraInfoUpdate获取通话 ID、管理直播模式和流附加信息。
屏幕音频setScreenCaptureVolume、muteScreenAudioCapture单独控制屏幕音频采集音量和静音。
视频requestRemoteVideoKeyFrame在手动订阅场景下请求指定远端视频流的关键帧,主要用于自定义解码失败后的恢复。
音画同步onAVSyncEvent调用 setMultiDeviceAVSync 后发生音画同步错误时,返回房间 ID、用户 ID 和 AVSyncEvent。
截图takeLocalSnapshotToFile、takeRemoteSnapshotToFile、onLocalSnapshotTakenToFile、onRemoteSnapshotTakenToFile将截图保存为本地文件并返回结果。
WTNgetWTNStream 及 RTCWTNStream 的订阅、渲染、音量接口和回调替代旧公共流播放能力。
直播 SEIsendLivePushSEIMessage在单人直播场景发送 Key-Value 格式的 SEI 数据。
音频帧onCaptureMixedAudioFrame获取麦克风与播放器混音后的音频帧。
播放器onMediaPlayerEvent接收 RTCMediaPlayer 事件。
LicenseonLicenseQuotaExceededAI 音视频互动 License 配额用尽时触发。收到回调后应及时续费,并离开房间、销毁 SDK;续费成功后重新加入房间。

删除或替换的接口、回调和类型

类别已删除接口或回调替代方式
引擎createRTCVideo、destroyRTCVideocreateRTCEngine、destroyRTCEngine
错误描述getErrorDescription无替代接口。
视频编码setMaxVideoEncoderConfig使用 setVideoEncoderConfig。
屏幕流publishScreen、unpublishScreen、subscribeScreen、unsubscribeScreen、setupLocalScreen、removeLocalScreen、setupRemoteScreen、removeRemoteScreen、setScreenVideoEncoderConfig使用普通流的发布、订阅、渲染和编码接口。
公共流startPushPublicStream、updatePublicStreamParam、stopPushPublicStream、startPlayPublicStream、stopPlayPublicStream、setupPublicStreamVideo、removePublicStreamVideo、setPublicStreamVideoSink、unsetPublicStreamVideoSink、setPublicStreamAudioPlaybackVolume使用合流转推接口和 RTCWTNStream。
转推startLiveTranscoding、updateLiveTranscoding、stopLiveTranscoding、startPushMixedStreamToCDN、updatePushMixedStreamToCDN、startPushSingleStreamToCDN、stopPushStreamToCDN使用 start/update/stopPushMixedStream 或 start/stopPushSingleStream。
音频混音RTCEngine 中的 *AudioMixing* 系列接口与回调使用 RTCMediaPlayer 或 RTCAudioEffectPlayer。
空间音频updateSpatialPosition、updateSelfOrientation、updateListenerPosition、updateListenerOrientation使用 updateSelfPosition 和 updateRemotePosition。
音频场景setAudioScenario、setAudioScene无直接替代接口。
设备列表enableFilterSilentDevice如需过滤无声设备,请联系技术支持。
代理回调onHttpProxyState、onHttpsProxyState、onSocks5ProxyState使用 onLocalProxyStateChanged。
原始视频帧回调onLocalScreenFrame、onRemoteScreenFrame、onPublicStreamVideoFrame屏幕流使用统一的视频 Sink;WTN 视频帧使用 onWTNVideoFrame。
旧流和批量控制类型RemoteStreamKey、PauseResumeControlMediaType使用 stream_id、StreamInfo 以及按音频和视频拆分的批量控制接口。
屏幕编码类型ScreenVideoEncoderConfig、ScreenVideoEncodePreference使用 VideoEncoderConfig 和 VideoEncodePreference。
公共流类型IPublicStreamParam、PublicStreamAudioParam、PublicStreamVideoParam、PublicStreamLayoutRegion、PublicStreamErrorCode、PublicStreamRenderMode发布改用 IMixedStreamConfig 及合流任务类型;订阅和渲染改用 WTN 类型。
旧转码类型ITranscoderParam、TranscoderAudioParam、TranscoderVideoParam、TranscoderLayoutRegion、TranscoderLayoutRegionDataParam、TranscoderLayoutRegionType、TranscoderAudioCodecProfile、TranscoderAudioCodecType、TranscoderVideoCodecType、StreamMixingType使用 IMixedStreamConfig 及 MixedStream* 系列配置和枚举。

升级后,请重点检查所有依赖 user_id、room_id、StreamIndex 或 RemoteStreamKey 定位流的代码,并改为保存发布回调返回的 stream_id。同时检查 WTN、转推、混音和屏幕共享代码是否仍调用已删除接口。

3.57

回调变更

序号变更详情功能模块变更前回调变更后回调说明
1参数变更消息onLogout() => voidonLogout(reason: LogoutReason) => void在 onLogout 回调上新增 reason 参数,区分用户主动/被动登出。具体参数类型参看 LogoutReason。

类型变更

序号变更详情功能模块改动的数据类型说明
1成员变量新增字幕翻译服务SubtitleMessage在字幕内容回调 onSubtitleMessageReceived 的参数 SubtitleMessage 中新增成员变量 language 和 mode,可用于同时收到字幕原文和字幕译文。
2成员变量变更CDN 推流MixedStreamLayoutRegionConfig转推直播单个用户画面由设置相对于整体画面的归一化比例变更为可设置像素绝对值。
3成员变量新增音频管理AudioPropertiesInfo新增变量 voicePitch 返回本地用户的人声基频。
4成员变量新增引擎管理LogConfig新增变量 log_filename_prefix 用于自定义日志文件前缀。

规范代码风格

该版本对所有不规范的枚举值和成员变量名进行了统一修复,对齐 Native 端名称,提升代码规范度和易用性。

  1. 枚举值
    变更对象3.54 及之前版本3.57

    StreamLayoutMode

    • kLayoutAutoMode
    • kLayoutCustomerMode
    • kStreamLayoutModeAuto
    • kStreamLayoutModeCustom

    SEICountPerFrame

    • kSingleSEIPerFrame
    • kMultiSEIPerFrame
    • kSEICountPerFrameSingle
    • kSEICountPerFrameMulti

    CapturePreference

    • KAuto
    • KManual
    • KAutoPerformance
    • kAuto
    • kManual
    • kAutoPerformance

    RecordingType

    • kRecordAudioOnly
    • kRecordVideoOnly
    • kRecordVideoAndAudio
    • kRecordingTypeAudioOnly
    • kRecordingTypeVideoOnly
    • kRecordingTypeVideoAndAudio

    VirtualBackgroundSourceType

    • kVirtualBackgroundSourceColor
    • kVirtualBackgroundSourceImage
    • kVirtualBackgroundSourceTypeColor
    • kVirtualBackgroundSourceTypeImage

    ZoomConfigType

    • kZoomFocusOffset
    • kZoomMoveOffset
    • kZoomConfigTypeFocusOffset
    • kZoomConfigTypeMoveOffset

    ZoomDirectionType

    • kCameraMoveLeft
    • kCameraMoveRight
    • kCameraMoveUp
    • kCameraMoveDown
    • kCameraZoomOut
    • kCameraZoomIn
    • kCameraReset
    • kZoomDirectionTypeMoveLeft
    • kZoomDirectionTypeMoveRight
    • kZoomDirectionTypeMoveUp
    • kZoomDirectionTypeMoveDown
    • kZoomDirectionTypeZoomOut
    • kZoomDirectionTypeZoomIn
    • kZoomDirectionTypeReset

    AudioFrameCallbackMethod

    • kAudioFrameCallbackRecord
    • kAudioFrameCallbackPlayback
    • kAudioFrameCallbackMixed
    • kAudioFrameCallbackRemoteUser
    • kAudioFrameCallbackRecordScreen
    • kRecord
    • kPlayback
    • kMixed
    • kRemoteUser
    • kRecordScreen

    AudioAlignmentMode

    • kAudioAlighmentModeOff
    • kAudioAlighmentModeAudioMixing
    • kAudioAlignmentModeOff
    • kAudioAlignmentModeAudioMixing

    SetRoomExtraInfoResult

    • kSetRoomExtraInfoErrorNotJoinRoom
    • kSetRoomExtraInfoErrorKeyIsNull
    • kSetRoomExtraInfoErrorValueIsNull
    • kSetRoomExtraInfoResultUnknow
    • kSetRoomExtraInfoErrorKeyIsEmpty
    • kSetRoomExtraInfoErrorTooOften
    • kSetRoomExtraInfoErrorSilentUser
    • kSetRoomExtraInfoErrorKeyTooLong
    • kSetRoomExtraInfoErrorValueTooLong
    • kSetRoomExtraInfoErrorServer
    • kSetRoomExtraInfoResultSuccess
    • kSetRoomExtraInfoResultErrorNotJoinRoom
    • kSetRoomExtraInfoResultErrorKeyIsNull
    • kSetRoomExtraInfoResultErrorValueIsNull
    • kSetRoomExtraInfoResultResultUnknow
    • kSetRoomExtraInfoResultErrorKeyIsEmpty
    • kSetRoomExtraInfoResultErrorTooOften
    • kSetRoomExtraInfoResultErrorSilentUser
    • kSetRoomExtraInfoResultErrorKeyTooLong
    • kSetRoomExtraInfoResultErrorValueTooLong
    • kSetRoomExtraInfoResultErrorServer
    • kSetRoomExtraInfoSuccess

    HardwareEchoDetectionResult

    • kHardwareEchoDetectionCanceled
    • kHardwareEchoDetectionUnknown
    • kHardwareEchoDetectionNormal
    • kHardwareEchoDetectionPoor
    • kHardwareEchoDetectionResultCanceled
    • kHardwareEchoDetectionResultUnknown
    • kHardwareEchoDetectionResultNormal
    • kHardwareEchoDetectionResultPoor

    StreamMixingEvent

    • kStreamMixingStart
    • kStreamMixingStartSuccess
    • kStreamMixingStartFailed
    • kStreamMixingUpdate
    • kStreamMixingUpdateSuccess
    • kStreamMixingUpdateFailed
    • kStreamMixingStop
    • kStreamMixingStopSuccess
    • kStreamMixingStopFailed
    • kStreamMixingChangeMixType
    • kStreamMixingFirstAudioFrameByClientMix
    • kStreamMixingFirstVideoFrameByClientMix
    • kStreamMixingUpdateTimeout
    • kStreamMixingStartTimeout
    • kStreamMixingRequestParamError
    • kStreamMixingMixImageEvent
    • kStreamMixingEventStart
    • kStreamMixingEventStartSuccess
    • kStreamMixingEventStartFailed
    • kStreamMixingEventUpdate
    • kStreamMixingEventUpdateSuccess
    • kStreamMixingEventUpdateFailed
    • kStreamMixingEventStop
    • kStreamMixingEventStopSuccess
    • kStreamMixingEventStopFailed
    • kStreamMixingEventChangeMixType
    • kStreamMixingEventFirstAudioFrameByClientMix
    • kStreamMixingEventFirstVideoFrameByClientMix
    • kStreamMixingEventUpdateTimeout
    • kStreamMixingEventStartTimeout
    • kStreamMixingEventRequestParamError
    • kStreamMixingEventMixImageEvent

    SingleStreamPushEvent

    • kSingleStreamPushStart
    • kSingleStreamPushSuccess
    • kSingleStreamPushFailed
    • kSingleStreamPushStop
    • kSingleStreamPushTimeout
    • kSingleStreamPushParamError
    • kSingleStreamPushEventStart
    • kSingleStreamPushEventSuccess
    • kSingleStreamPushEventFailed
    • kSingleStreamPushEventStop
    • kSingleStreamPushEventTimeout
    • kSingleStreamPushEventParamError
  2. 成员变量
    变更对象3.54 及之前版本3.57

    SourceCrop

    • LocationX
    • LocationY
    • WidthProportion
    • HeightProportion
    • location_x
    • location_y
    • width_proportion
    • height_proportion

    EchoTestConfig

    • audioPropertiesReportInterval
    • roomId
    • audio_properties_report_interval
    • room_id
    • enable_audio
    • enable_video

    VideoEncoderConfig

    • frameRate
    • maxBitrate
    • minBitrate
    • encoderPreference
    • frame_rate
    • max_bitrate
    • min_bitrate
    • encoder_preference
    ScreenCaptureSourceInfo* primaryMonitor* primary_monitor

    ScreenVideoEncoderConfig

    • frameRate
    • maxBitrate
    • minBitrate
    • encoderPreference
    • frame_rate
    • max_bitrate
    • min_bitrate
    • encoder_preference

    VideoCaptureConfig

    • capturePreference
    • frameRate
    • capture_preference
    • frame_rate

    RTCWatermarkConfig

    • visibleInPreview
    • positionInLandscapeMode
    • positionInPortraitMode
    • visible_in_preview
    • position_in_landscape_mode
    • position_in_portrait_mode
    MixedStreamVideoConfigenable_Bframeenable_bframe

    RtcRoomStats

    • txLostrate
    • rxLostrate
    • tx_lostrate
    • rx_lostrate

错误码变更

以下表格中的错误码发生了变化,你需要进行相应的处理:

变更详情错误码备注

名称变更

AudioRecordingErrorCode

  • kAudioRecordingErrorNotInRoom
  • kAudioRecordingAlreadyStarted
  • kAudioRecordingNotStarted

变更为:

  • kAudioRecordingErrorCodeNotInRoom
  • kAudioRecordingErrorCodeAlreadyStarted
  • kAudioRecordingErrorCodeNotStarted

名称变更

StreamMixingErrorCode

  • kStreamMixingErrorOK
  • kStreamMixingErrorBase
  • kStreamMixingErrorInvalidParam
  • kStreamMixingErrorInvalidState
  • kStreamMixingErrorInvalidOperator
  • kStreamMixingErrorTimeout
  • kStreamMixingErrorInvalidParamByServer
  • kStreamMixingErrorSubTimeoutByServer
  • kStreamMixingErrorInvalidStateByServer
  • kStreamMixingErrorAuthenticationByCDN
  • kStreamMixingErrorTimeoutBySignaling
  • kStreamMixingErrorMixImageFail
  • kStreamMixingErrorUnKnownByServer

变更为:

  • kStreamMixingErrorCodeOK
  • kStreamMixingErrorCodeBase
  • kStreamMixingErrorCodeInvalidParam
  • kStreamMixingErrorCodeInvalidState
  • kStreamMixingErrorCodeInvalidOperator
  • kStreamMixingErrorCodeTimeout
  • kStreamMixingErrorCodeInvalidParamByServer
  • kStreamMixingErrorCodeSubTimeoutByServer
  • kStreamMixingErrorCodeInvalidStateByServer
  • kStreamMixingErrorCodeAuthenticationByCDN
  • kStreamMixingErrorCodeTimeoutBySignaling
  • kStreamMixingErrorCodeMixImageFail
  • kStreamMixingErrorCodeUnKnownByServer

3.54

该版本为全部 API 增加返回值,通过返回值可以明确发现失败的 API 调用,定位失败原因。具体返回值的含义参看各 API 注释。

方法变更

变更详情功能模块变动前方法变动后方法说明

拆分

音视频传输

setPublicStreamVideoSink

拆分为两个方法

绑定:setPublicStreamVideoSink

解绑:unsetPublicStreamVideoSink

行为变更

音频管理

  • enumerateAudioCaptureDevices
  • enumerateAudioPlaybackDevices

等待超时后返回空列表,超时时间默认为 10 s

行为变更视频管理enumerateVideoCaptureDevices等待超时后返回空列表,超时时间默认为 10 s

参数变更

引擎管理

createRTCVideo删除了入参 document_path。

使用 setLogConfig 指定日志相关配置。

混音相关的方法从 RTCVideo 中剥离出来,具体变动情况请参看混音相关的新旧接口对应表

混音

RTCVideo

  • RTCMediaPlayer
  • RTCAudioEffectPlayer

一般来说,对于短时间的音效(比如小于 20s),可以使用音效类;对于较长的音频或 PCM 数据,可以使用音乐类。

类型变更

变更详情数据类型说明
参数变更IAudioFrame变量 type 名称变更为 frame_type
类型变更format类型由 number 变更为枚举类 VideoPixelFormat
参数增删IDataFrame删除无意义字段 u32_data_size
参数增删IPublicStreamParam增加参数 bg_color

错误码变更

变更详情错误码备注
枚举值增删ErrorCode删除枚举值:kErrorCodeOverScreenPublishLimit = -1081、kErrorCodeOverVideoPublishLimit = -1082

附:混音相关的新旧接口对应表

接口分类接口用途废弃类/接口新类/接口(音效 RTCAudioEffectPlayer)新类/接口(音乐 RTCMediaPlayer)备注

混音主调接口

将音效文件加载至内存

  • preloadAudioMixing
  • unloadAudioMixing
  • preload
  • unload
  • unloadAll
  • open

播放/停止/暂停/恢复

  • startAudioMixing
  • stopAudioMixing
  • stopAllAudioMixing
  • pauseAudioMixing
  • pauseAllAudioMixing
  • resumeAudioMixing
  • resumeAllAudioMixing
  • start
  • stop
  • stopAll
  • pause
  • pauseAll
  • resume
  • resumeAll
  • start
  • stop
  • pause
  • resume

获取/指定位置/时长

  • setAudioMixingPosition
  • getAudioMixingCurrentPosition
  • getAudioMixingDuration
  • setPosition
  • getPosition
  • getDuration
  • setPosition
  • getPosition
  • getTotalDuration
  • getPlaybackDuration

获取/指定音量

  • setAudioMixingVolume
  • NA
  • setVolume
  • setVolumeAll
  • getVolume
  • setVolume
  • getVolume
调整音调setAudioMixingPitchNAsetAudioPitch
设置声道模式setAudioMixingDualMonoModeNAsetAudioDualMonoMode

获取/设置音轨数

  • getAudioTrackCount
  • selectAudioTrack

NA

  • getAudioTrackCount
  • selectAudioTrack

Index 取值修改为从 0 开始

设置播放速度setAudioMixingPlaybackSpeedNAsetPlaybackSpeed
设置播放进度回调间隔setAudioMixingProgressIntervalNAsetProgressInterval
设置响度setAudioMixingLoudnessNAsetLoudness

混音回调接口

播放状态回调

onAudioMixingStateChanged

  • setEventHandler
  • onAudioEffectPlayerStateChanged
  • setEventHandler
  • onMediaPlayerStateChanged
  • onMediaPlayerPlayingProgress

3.52

方法变更

变更详情功能模块方法说明
参数变更引擎管理feedback参数数据类型变更
接口名称变更CDN 推流startLiveTranscoding用 startPushMixedStreamToCDN 替代
stopLiveTranscoding用 stopPushStreamToCDN 替代
updateLiveTranscoding用 updatePushMixedStreamToCDN 替代

接口废弃

高级功能

updatePosition

updateSelfOrientation

用 updateSelfPosition() 替代,新接口支持本地用户同时设置自己的发声位置和发声朝向。

updateListenerPosition

updateListenerOrientation

用 updateRemotePosition()替代,新接口支持本地用户设置远端用户的发声位置和发声朝向。

回调变更

变更详情方法说明

参数变更

onPublicStreamSEIMessageReceived

参数 sourceType 的类型由 SEIMessageSourceType 变更为 DataMessageSourceType

拆分为:

  • onPublicStreamSEIMessageReceived:接收客户端插入的 SEI 消息。
  • onPublicStreamDataMessageReceived:接收服务端插入的 SEI 消息和其他数据信息,例如音量信息。

错误码变更

变更详情错误码说明

枚举值变更

PublicStreamErrorCode\\| 新增枚举值: \\| \|*kPublicStreamErrorCodePullNoPushStream = 1300\| \|名称变更:\| | * kPublicStreamOK = 0更新为kPublicStreamErrorCodeOK = 0` |

  • kPublicStreamPushInvalidParam = 1191 更新为 kPublicStreamErrorCodePushInvalidParam = 119
  • kPublicStreamPushInvalidStatus = 1192 更新为 kPublicStreamErrorCodePushInvalidStatus = 1192
  • kPublicStreamPushInternalError = 1193 更新为 kPublicStreamErrorCodePushInternalError = 1193
  • kPublicStreamPushFailed = 1195 更新为 kPublicStreamErrorCodePushFailed = 1195
  • kPublicStreamPushTimeout = 1196 更新为 kPublicStreamErrorCodePushTimeout = 1196
ErrorCode新增错误码枚举值:kErrorCodeJoinRoomRoomForbidden=-1025 和 kErrorCodeJoinRoomUserForbidden=-1026。当服务端在指定房间封禁指定用户,而此用户加入房间失败,或从房间中被踢出时收到。
废弃枚举值:kErrorCodeOverScreenPublishLimit=-1081,用 kErrorCodeOverStreamPublishLimit=-1080 代替。

3.50

接口类名称由 veRTCVideo 变更为 RTCVideo,veRTCRoom 变更为 RTCRoom。

方法变更

变更详情功能模块变动前方法变动后方法备注

返回值变更

房间管理

joinRoom 返回值含义如下:

  • -1:无效的参数。
  • -2:已经在房间内。

joinRoom 返回值含义如下:

  • -1:调用失败。
  • -2:无效的参数。
  • -4:已经在房间内。

返回值为 0 代表成功,不变。

网络管理stopEchoTest 返回 -1 代表失败,未开启回路检测。stopEchoTest 返回 -3 代表失败,未开启回路检测

引擎管理

setBusinessId 返回值含义如下:

  • < 0: 失败,具体原因参照 BusinessCheckCode。
  • -6001: 用户已经在房间中。
  • -6002: 输入非法。

setBusinessId 返回值含义如下:

  • < 0: 失败,具体原因参照 ReturnStatus
  • -2: 输入非法。

拆分

视频管理

registerFaceDetectionObserver

  • enableFaceDetection

  • disableFaceDetection

解除人脸识别与视频特效之间的耦合,提升接口易用性。

废弃

范围语音

registerRangeAudioObserver

onRangeAudioInfor

None

此前,在手动订阅的场景下,如果你希望使用范围语音功能,你必须注册相关回调获取的衰减系数,设定音量。

自此版本起,无论是手动订阅还是自动订阅,衰减效果都由 SDK 实现,无需使用此接口。

替代音频管理muteAudioPlaybacksetPlaybackVolume将本地音量设置为 0 可静音本地音频播放
参数类型变更屏幕共享public setVideoEncoderConfig(solutions: VideoEncoderConfig[]): numbersetScreenVideoEncoderConfig(screenSolution: VideoEncoderConfig): any;参数类型变更为新增的 VideoEncoderConfig

拆分

音视频处理

  • checkLicense

  • setAlgoModelPath

initCVResource

enableEffect

  • enableVideoEffect

  • disableVideoEffect

updateNodeupdateEffectNode

setBackgroundSticker

  • enableVirtualBackground

  • disableVirtualBackground

参数变更消息public sendSEIMessage(stream_index: number, message: Uint8Array, repeat_count: number) => numberpublic sendSEIMessage(stream_index: number,message: Uint8Array,repeat_count: number,mode: SEICountPerFrame): number支持 SEI 多发模式,即在 1 帧间隔内多次发送 SEI 数据时,多个 SEI 随下个视频帧同时发送。

回调变更

以下表格中的回调发生了变化。你需要在工程文件中找到该回调,并进行相关修改:

变更详情功能模块变动前方法变动后方法备注
参数变更消息onPublicStreamSEIMessageReceived(public_stream_id: string, message: string) => voidonPublicStreamSEIMessageReceived(public_stream_id: string, source_type: SEIMessageSourceType) => void新增参数 source_type
接口废弃音频管理onRemoteAudioStateChanged 和 onRemoteVideoStateChanged/

替代

CDN 推流

  • onStreamMixingVideoFrame

  • onStreamMixingAudioFrame

  • onStreamMixingDataFrame

  • onMixingVideoFrame

  • onMixingAudioFrame

  • onMixingDataFrame

类型变更

变更详情数据类型备注
成员变量变更FaceDetectResult新增成员变量:frame_timestamp_us
成员变量变更TranscoderAudioParam新增成员变量:audio_codec_type

成员变量变更

TranscoderVideoParam

新增成员变量:bFrame

删除了:lowLatency

名称变更:video_codec_profile 变更为 video_codec_type,类型由 TranscoderVideoCodecProfile 改为 TranscoderVideoCodecType

成员变量变更

TranscoderLayoutRegion

新增成员变量:

corner_radius

type

data

data_param

spatial_position

成员变量变更,名称变更

ITranscoderParam

类型名称由 TranscoderParam 改为 ITranscoderParam

新增成员变量:expected_mix_type: StreamMixingType

枚举值变更

TranscoderAudioCodecProfile

删除了 kByteAACProfileMain

kByteAACProfileHEv1 对应的数值由 2 变更为 1

kByteAACProfileHEv2 对应的数值由 3 变更为 2

配置变更RoomProfileType房间属性的默认值 kRoomProfileTypeCommunication = 0,对应的由 kRoomProfileTypeChatRoom = 6 变更为 kRoomProfileTypeMeeting = 16。
新增PublicStreamErrorCodeonPlayPublicStreamResult 和 onPushPublicStreamResult 中的 errorCode 参数类型由 int 改为 PublicStreamErrorCode
参数数据结构改动AudioPropertiesConfig数据结构中,新增参数 smooth
取值范围拓展TranscoderLayoutRegion 中,width 和 height取值范围由 (0.0, 1.0] 拓展为 [0.0, 1.0]。
最近更新时间:2026.10.12 10:56:37
这个页面对您有帮助吗?
有用
有用
无用
无用