如果你希望从此前版本的 Linux 客户端 SDK 升级到最新的客户端 SDK,请在工程文件中,替换最新的客户端 SDK 文件,并参考本文完成 API,回调,参数类型等的替换。
升级过程中,你可能需要参考历史版本文档归档。
SingleStreamTaskErrorCode 新增以下枚举值:
| 枚举值 | 数值 | 说明 |
|---|---|---|
kSingleStreamTaskErrorCodePushToCDN | 1098 | 推送到 CDN 失败。 |
kSingleStreamTaskErrorCodeCountOverLimit | 1099 | 超过单流转推任务数限制,单个主播同时运行的转推任务不能超过 20 个。 |
| 类型 | 说明 |
|---|---|
RoomLiveMode(新增枚举) | 新增枚举,定义直播模式,包含取值:
|
ProcessorActionDomain(新增枚举) | 新增枚举,定义视频前处理作用范围,包含取值:
|
| RTCRoomConfig | 新增 live_mode 字段(RoomLiveMode 类型),进房时指定直播模式。 |
| VideoPreprocessorConfig | 新增 action_domain 字段(ProcessorActionDomain 类型),指定视频前处理作用范围。 |
| VideoEncoderConfig | 新增 key_frame_interval_ms 字段(int32_t),关键帧间隔,单位毫秒。 |
| VideoSolutionDescription | 新增 key_frame_interval_ms 字段(int32_t),关键帧间隔,单位毫秒。 |
| 接口 | 说明 |
|---|---|
IRTCRoom::setLiveMode(RoomLiveMode live_mode) | 设置房间直播模式,加入房间后调用。返回 0 表示成功。 |
IRTCEngine::sendLivePushSEIMessage(std::string json_string, int count, bool is_key_frame_only, bool allow_overwrite) | 以 Key-Value JSON 格式发送 SEI 数据。需先设为 kRoomLiveModeSoloHost 模式。 |
| 回调 | 说明 |
|---|---|
| onLicenseQuotaExceeded | AIGC 场景下(AI 音视频互动方案)使用 License 计费的场景下,当 License 配额用尽时 SDK 会触发此回调。 收到该回调时,AIGC 服务会中止。为保证服务连续性,收到该回调后请及时续费,并离开房间、销毁 SDK,待续费成功后重新加入。 |
新增插件 libbytertc_license_extension.so。该插件为 CloudRenderLAN 场景合入 ToB 场景下的 License 插件,使用相关功能时需要集成。
| 变更类型 | V3.58 | V3.60 |
|---|---|---|
| 头文件名称变更 | ../bytertc_video.h | ../bytertc_engine.h |
| ../bytertc_video_event_handler.h | ../bytertc_engine_event_handler.h | |
| 基础类名变更(所有模块) | class IRTCVideoclass IRTCVideoEventHandler | class IRTCEngineclass IRTCEngineEventHandler |
新增加头文件 | 无 | ../IRTSRoom.h ../IRTSRoomEventHandler.h |
| 变更类型 | V3.58 | V3.60 | 变更说明 |
|---|---|---|---|
创建引擎对象 | createRTCVideo(const char* app_id, bytertc::IRTCVideoEventHandler event_handler, const char parameters) | createRTCEngine(const EngineConfig& config, IRTCEngineEventHandler* event_handler) |
|
| 销毁引擎 | destroyRTCVideo | destroyRTCEngine | 接口重命名 |
| 音视频引擎事件回调接口 | IRTCVideoEventHandler | IRTCEngineEventHandler | 类型重命名 |
| 变更类型 | V3.58 | V3.60 | 变更说明 |
|---|---|---|---|
加入房间 | joinRoom(const char* token, const UserInfo& user_info, const RTCRoomConfig& config) | int joinRoom(const char* token, const UserInfo& user_info, bool user_visibility, const RTCRoomConfig& config) |
|
创建房间实例 | createRTCRoom(const char* room_id) | createRTCRoom(const char* room_id) | 行为变更: 使用已存在 roomId 创建房间实例时,将返回上次创建的房间实例,不再触发错误码 |
| 创建房间失败回调 | onCreateRoomStateChanged(const char* room_id, int error_code) | onRoomStateChanged( const char* room_id, const char* uid, int state, const char* extra_info) | 创建房间失败由 onRoomStateChanged 进行通知。不再通过 onCreateRoomStateChanged 回调。 |
| 设置房间附加信息结果的回调 | onSetRoomExtraInfoResult(int64_t task_id, SetRoomExtraInfoResult error_code) | onSetRoomExtraInfoResult(int64_t task_id, SetRoomExtraInfoResult result) | 参数变更: error_code 更名为 result。 |
| 远端可见用户加入房间,或房内不可见用户切换为可见的回调 | onUserJoined(const UserInfo &user_info,int elapsed) | onUserJoined(const UserInfo& user_info) | 参数变更:删除无效参数 elapsed。 |
| 变更类型 | V3.58 | V3.60 | 说明 |
|---|---|---|---|
开启/关闭推送多路视频流 | enableSimulcastMode(bool enabled) | setLocalSimulcastMode(VideoSimulcastMode mode) |
|
| 设置期望发布的最大分辨率视频流参数 | setVideoEncoderConfig(const VideoEncoderConfig& max_solution) | setVideoEncoderConfig(const VideoEncoderConfig& encoder_config) | 参数变更:形参 max_solution 变更为 encoder_Config |
| 设置多路视频流参数 | setVideoEncoderConfig(const VideoEncoderConfig* channel_solutions, int solution_num) | setLocalSimulcastMode(VideoSimulcastMode mode, const VideoEncoderConfig* stream_config, int num) | 接口替换 |
设置期望订阅的远端视频流的参数 | setRemoteVideoConfig(const char *user_id,const RemoteVideoConfig &remote_video_config) | setRemoteSimulcastStreamType(const char* stream_id, SimulcastStreamType stream_type) = 0 |
|
| 功能 | V3.58 | V3.60 | 变更说明 |
|---|---|---|---|
采集屏幕视频 | startScreenVideoCapture(const ScreenCaptureSourceInfo &source_info, const ScreenCaptureParameters &capture_params)=0 | startScreenVideoCapture(const ScreenCaptureSourceInfo& source_info, const ScreenCaptureParameters& capture_params) = 0 | 行为变更: 在开始屏幕采集时,会停止视频采集功能 |
设置屏幕流编码参数 | setVideoEncoderConfig(const VideoEncoderConfig &max_solution)=0 | setVideoEncoderConfig(const VideoEncoderConfig& encoder_config) = 0 | 接口替换: 屏幕流和视频流共用同一套编码参数,setVideoEncoderConfig设置的参数会同时作用于屏幕流和一般视频流 |
发布/停止发布本地屏幕音视频流 | publishScreen(MediaStreamType type)=0 unpublishScreen(MediaStreamType type)=0 | publishStreamVideo(bool publish) = 0 publishStreamAudio(bool publish) = 0 | 接口替换: 屏幕流和视频流共用同一套发布/取消发布接口 接口拆分 音频和视频的发布/取消发布接口拆开 |
订阅/取消订阅远端屏幕音视频流 | subscribeScreen(const char* user_id, MediaStreamType type)=0 unsubscribeScreen(const char* user_id, MediaStreamType type)=0 | subscribeStreamVideo(const char *stream_id, bool subscribe) = 0 subscribeStreamAudio(const char *stream_id, bool subscribe) = 0 | 接口替换: 屏幕流和视频流共用同一套订阅/取消订阅接口 接口拆分 音频和视频的订阅/取消订阅接口拆开 参数变更: 通过参数streamId来区分具体是哪路流,是否为屏幕流 |
远端用户发布或者取消发布屏幕流回调 | onUserPublishScreen(const char* uid, MediaStreamType type) onUserUnpublishScreen(const char* uid, MediaStreamType type, StreamRemoveReason reason) | onUserPublishStreamVideo(const char* stream_id, const StreamInfo& stream_info, bool is_publish) onUserPublishStreamAudio(const char* stream_id, const StreamInfo& stream_info, bool is_publish) | 接口替换: 屏幕流和视频流共用同一套发布/取消发布回调接口 接口拆分 音频和视频的发布/取消发布回调接口拆开 参数变更: 通过参数streamId来区分具体是哪路流,是否为屏幕流 |
屏幕共享流的视频首帧发送状态回调 | onScreenVideoFrameSendStateChanged(const char* room_id, const RtcUser &user, FirstFrameSendState state) | onVideoFrameSendStateChanged(const char* stream_id, const StreamInfo& stream_info, const RtcUser& user, FirstFrameSendState state) | 接口替换: 屏幕流和视频流共用同一套视频首帧发送状态回调 参数变更: 通过参数streamId来区分具体是哪路流,是否为屏幕流 |
屏幕共享流视频首帧播放状态回调 | onScreenVideoFramePlayStateChanged(const char* room_id, const RtcUser &user, FirstFramePlayState state) | onVideoFramePlayStateChanged(const char* stream_id, const StreamInfo& stream_info, const RtcUser& user, FirstFramePlayState state) | 接口替换: 屏幕流和视频流共用同一套视频首帧播放状态回调 参数变更: 通过参数streamId来区分具体是哪路流,是否为屏幕流 |
bytertc_engine_event_handler) | 功能 | v3.58 | v3.60 | 变更说明 |
|---|---|---|---|
| 收到房间外用户发来的文本消息时,会收到此回调 | onUserMessageReceivedOutsideRoom(const char* uid, const char* message) | onUserMessageReceivedOutsideRoom(int64_t msgid, const char* uid, const char* message) | 参数变更:回调参数增加msgid参数 |
| 收到房间外用户 发来的二进制消息时,会收到此回调 | onUserBinaryMessageReceivedOutsideRoom(const char* uid, int size, const uint8_t* message) | onUserBinaryMessageReceivedOutsideRoom(int64_t msgid, const char* uid, const uint8_t* message, int size) | 参数变更:回调参数增加msgid参数 |
| 接收到房间内广播消息的回调 | onRoomMessageReceived(const char* uid, const char* message) | onRoomMessageReceived(int64_t msgid, const char* uid, const char* message) | 参数变更:回调参数增加msgid参数 |
| 收到房间内广播二进制消息的回调 | onRoomBinaryMessageReceived(const char* uid, int size, const uint8_t* message) | onRoomBinaryMessageReceived(int64_t msgid, const char* uid, const uint8_t* message, int size) | 参数变更:回调参数增加msgid参数 |
| 收到来自房间中其他用户发来的点对点文本消息时,会收到此回调 | onUserMessageReceived(const char* uid, const char* message) | onUserMessageReceived(int64_t msgid, const char* uid, const char* message) | 参数变更:回调参数增加msgid参数 |
| 收到来自房间中其他用户发来的点对点二进制消息时,会收到此回调 | onUserBinaryMessageReceived(const char* uid, int size, const uint8_t* message) | onUserBinaryMessageReceived(int64_t msgid, const char* uid, const uint8_t* message, int size) | 参数变更:回调参数增加msgid参数 |
| 功能 | V3.58 | V3.60 | 变更说明 |
|---|---|---|---|
| 1. 发布/取消音视频流 | |||
|
|
|
|
|
|
|
|
音视频流发布状态触发警告或错误时回调 | onStreamStateChanged( const char* room_id, const char* uid, int state, const char* extra_info) |
|
|
| 2. 订阅/取消订阅音视频流 | |||
|
|
|
|
音视频流订阅状态改变回调 | onStreamSubscribed(SubscribeState state_code, const char* user_id, const SubscribeConfig& info) |
|
|
音视频流订阅状态触发警告或错误时回调 | onStreamStateChanged( const char* room_id, const char* uid, int state, const char* extra_info) |
|
|
| 3. 订阅/取消订阅所有媒体流 | |||
|
|
|
|
暂停接收来自远端的媒体流 | pauseAllSubscribedStream(PauseResumeControlMediaType media_type) |
|
|
恢复接收来自远端的媒体流 | resumeAllSubscribedStream(PauseResumeControlMediaType media_type) |
|
|
IWTNStream 类中。IWTNStreamEventHandler 回调类中。你需要先调用 setWTNStreamEventHandler 设置回调手柄。| 功能 | V3.58 | V3.60 | 详情 |
|---|---|---|---|
发布 WTN 流 支持指定房间内多个用户发布的媒体流合成一路 WTN 流 | startPushPublicStream(const char* public_stream_id, IPublicStreamParam* param) | startPushMixedStream(const char* task_id, MixedStreamPushTargetConfig push_target_config, IMixedStreamConfig* config) |
|
更新 WTN 流 | updatePublicStreamParam(const char* public_stream_id, IPublicStreamParam* param) | updatePushMixedStream(const char* task_id, MixedStreamPushTargetConfig push_target_config, IMixedStreamConfig* config) |
|
停止发布 WTN 流 | stopPushPublicStream(const char* public_stream_id) | stopPushMixedStream(const char* task_id, MixedStreamPushTargetType target_type) |
|
订阅/取消订阅 WTN 流 |
|
|
|
绑定 WTN 流画布 | setPublicStreamVideoCanvas(const char* public_stream_id, const VideoCanvas& canvas) | setWTNRemoteVideoCanvas(const char* stream_id, const VideoCanvas& canvas) |
|
为 WTN 流指定外部渲染器 | setPublicStreamVideoSink(const char* public_stream_id, IVideoSink* video_sink, IVideoSink::PixelFormat format) | setWTNRemoteVideoSink(const char* stream_id, IVideoSink* video_sink, RemoteVideoSinkConfig& config) |
|
设置 WTN 流播放音量。 | setPublicStreamAudioPlaybackVolume(const char* public_stream_id, int volume) | setWTNRemoteAudioPlaybackVolume(const char* stream_id, int volume) |
|
播放 WTN 流任务回调 | onPlayPublicStreamResult(const char* public_stream_id, PublicStreamErrorCode error_code) |
|
|
接收 WTN 流中的 SEI 回调 | onPublicStreamSEIMessageReceived(const char* public_stream_id, const uint8_t* message, int message_length, DataMessageSourceType source_type) | onWTNSEIMessageReceived(const char* stream_id, int channel_id, const uint8_t* message, int length) |
|
接收 WTN 流中的 Data Message 回调 | onPublicStreamDataMessageReceived(const char* public_stream_id, const uint8_t* message, int message_length, DataMessageSourceType source_type) | onWTNDataMessageReceived(const char* stream_id, onst uint8_t* message, int message_length, DataMessageSourceType source_type) |
|
WTN 视频流首帧解码成功回调 | onFirstPublicStreamVideoFrameDecoded(const char* public_stream_id, const VideoFrameInfo& info) | onWTNFirstRemoteVideoFrameDecoded(const char* stream_id, const VideoFrameInfo& info) | ,重命名和移动到 IWTNStream 类中
|
WTN 音频流首帧解码成功回调 | onFirstPublicStreamAudioFrame(const char* public_stream_id) | onWTNFirstRemoteAudioFrame(const char* stream_id) |
|
WTN 流发布结果回调 | onPushPublicStreamResult( const char* room_id, const char* public_streamid, PublicStreamErrorCode error_code ) | onMixedStreamEvent(MixedStreamTaskInfo info, MixedStreamTaskEvent event, MixedStreamTaskErrorCode error_code) |
|
优化了转推直播接口的易用性。与 WTN 接口共用 IMixedStreamConfig,提升易用性。如果你已经实现了转推直播功能,参考以下表格对接口进行替换。
| 功能 | V3.58 | V3.60 | 详情 |
|---|---|---|---|
合流转推 | startPushMixedStreamToCDN(const char* task_id, IMixedStreamConfig* config, IMixedStreamObserver* observer) | startPushMixedStream(const char* task_id, MixedStreamPushTargetConfig push_target_config, IMixedStreamConfig* config) |
|
更新合流转推任务 | updatePushMixedStreamToCDN(const char* task_id, IMixedStreamConfig* config) | pdatePushMixedStream(const char* task_id, MixedStreamPushTargetConfig push_target_config, IMixedStreamConfig* config) |
|
合流转推回调 |
| onMixedStreamEvent(MixedStreamTaskInfo info, MixedStreamTaskEvent event, MixedStreamTaskErrorCode error_code) |
|
单流转推 | startPushSingleStreamToCDN(const char* task_id, PushSingleStreamParam& param, IPushSingleStreamToCDNObserver* observer) | startPushSingleStream(const char* task_id, PushSingleStreamParam& param) |
|
停止转推任务 | stopPushStreamToCDN(const char* task_id) |
|
|
单流转推回调 | onStreamPushEvent( SingleStreamPushEvent event, const char* task_id, int error ) | onSingleStreamEvent(const char *task_id, SingleStreamTaskEvent event, SingleStreamTaskErrorCode error_code) |
|
| 功能 | 接口名 | 变更说明 |
|---|---|---|
| 接收到来自远端某音频流的第一帧时回调 | onFirstRemoteAudioFrame(const char* stream_id, const StreamInfo& stream_info) | 新增适用场景,远端用户取消发布音频再发布音频后,也会收到该回调。取消发布包括发布端主动取消、主动退房、掉线以及停止采集。 |
|
| 新增适用场景:远端用户取消发布视频并再发布视频后,也会收到该这两个回调。 取消发布包括发布端主动取消、主动退房、掉线以及停止采集。 |
| 功能 | V3.58 | V3.60 | 变更说明 |
|---|---|---|---|
音视频同步状态发生改变时 | onAVSyncStateChange(AVSyncState state) | onAVSyncEvent(const char* room_id, const char* uid, AVSyncEvent event) |
|
setAudioRoute:Windows 和 Linux 端不支持。
| 功能 | V3.58 | V3.60 | 变更说明 |
|---|---|---|---|
调节指定远端用户的音频流在本地设备上的播放音量 | setRemoteAudioPlaybackVolume(const char* room_id,const char* user_id, int volume) | setRemoteAudioPlaybackVolume(const RemoteStreamKey& stream_key, int volume) |
|
| V3.58 | V3.60 | 变更说明 |
|---|---|---|
pushExternalVideoFrame(StreamIndex stream_index, IVideoFrame* frame) | pushExternalVideoFrame(const VideoFrameData & frame) | 参数变更: 参数 |
| 3.58 | V3.60 | 变更说明 |
|---|---|---|
getHotMusic(int hot_types, int filters) | getHotMusic(const char** custom_hotlist_id, int id_num, int filters) | 参数变更:
|
当前版本使用 StreamId 唯一标识一路流,因此各个API中以前版本的 StreamIndex / RemoteStreamKey 参数被 StreamId 或相关信息替换,涉及到API如下:
| 所属类 | v3.58 | v3.60 | 变更说明 |
|---|---|---|---|
| IRTCEngine | setAudioSourceType (AudioSourceType type) | setAudioSourceType (AudioSourceType type) | |
| IRTCEngine | muteAudioCapture(StreamIndex index, bool mute) | muteAudioCapture(bool mute) | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | setCaptureVolume(StreamIndex index, int volume) | setCaptureVolume(int volume) | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | setLocalVideoCanvas(StreamIndex index, const VideoCanvas& canvas) | setLocalVideoCanvas(const VideoCanvas& canvas) | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | updateLocalVideoCanvas(StreamIndex index, const enum RenderMode render_mode, const uint32_t background_color) | updateLocalVideoCanvas(const enum RenderMode render_mode, const uint32_t background_color) | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | setRemoteVideoCanvas(RemoteStreamKey stream_key, const VideoCanvas& canvas) | setRemoteVideoCanvas(const char* stream_id, const VideoCanvas& canvas) | 参数变化: 将RemoteStreamKey变为stream_id |
| IRTCEngine | updateRemoteStreamVideoCanvas(RemoteStreamKey stream_key, const RemoteVideoRenderConfig& remote_video_render_config) | updateRemoteStreamVideoCanvas(const char* stream_id, const RemoteVideoRenderConfig& remote_video_render_config) | 参数变化: 将RemoteStreamKey变为stream_id |
| IRTCEngine | setLocalVideoSink(StreamIndex index, IVideoSink* video_sink, LocalVideoSinkConfig& config) | setLocalVideoSink(IVideoSink* video_sink, LocalVideoSinkConfig& config) | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | setRemoteVideoSink(RemoteStreamKey stream_key, IVideoSink* video_sink, RemoteVideoSinkConfig& config) | setRemoteVideoSink(const char* stream_id, IVideoSink* video_sink, RemoteVideoSinkConfig& config) | 参数变化: 将RemoteStreamKey变为stream_id |
| IRTCEngine | setVideoSourceType(StreamIndex stream_index, VideoSourceType type) | setVideoSourceType(VideoSourceType type) | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | setRemoteVideoMirrorType(RemoteStreamKey stream_key, RemoteMirrorType mirror_type) | setRemoteVideoMirrorType(const char* stream_id, RemoteMirrorType mirror_type) | 参数变化: 将RemoteStreamKey变为stream_id |
| IRTCEngine | sendSEIMessage(StreamIndex stream_index, const uint8_t* message, int length, int repeat_count, SEICountPerFrame mode) | sendSEIMessage(const uint8_t* message, int length, int repeat_count, SEICountPerFrame mode) | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | startFileRecording(StreamIndex type, RecordingConfig config, RecordingType recording_type) | startFileRecording(RecordingConfig config, RecordingType recording_type) | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | stopFileRecording(StreamIndex type) | stopFileRecording() | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | setRemoteAudioPlaybackVolume(const RemoteStreamKey& stream_key, int volume) | setRemoteAudioPlaybackVolume(const char* stream_id, int volume) | 参数变化: 将RemoteStreamKey变为stream_id |
| IRTCEngine | pushExternalEncodedVideoFrame(StreamIndex index, int video_index, IEncodedVideoFrame* video_stream) | pushExternalEncodedVideoFrame(int video_index, IEncodedVideoFrame* video_stream) | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | setVideoDecoderConfig(RemoteStreamKey key, VideoDecoderConfig config) | setVideoDecoderConfig(const char* stream_id, VideoDecoderConfig config) | 参数变化: 将RemoteStreamKey变为stream_id |
| IRTCEngine | requestRemoteVideoKeyFrame(const RemoteStreamKey& stream_info) | requestRemoteVideoKeyFrame(const char* stream_id) | 参数变化: 将RemoteStreamKey变为stream_id |
| IRTCEngine | setVideoWatermark(StreamIndex stream_index, const char* image_path, RTCWatermarkConfig config) | setVideoWatermark(const char* image_path, RTCWatermarkConfig config) | 参数变化: 删除StreamIndex参数 |
| IRTCEngine | clearVideoWatermark(StreamIndex stream_index) | clearVideoWatermark() | 参数变化: 删除StreamIndex参数 |
| IRTCEngineEventHandler | onUserStartVideoCapture(const char* room_id, const char* user_id) | onUserStartVideoCapture(const char* stream_id, const StreamInfo& stream_info) | 参数变化: 将roomId和userId改为streamId和streamInfo |
| IRTCEngineEventHandler | onUserStopVideoCapture(const char* room_id, const char* user_id) | onUserStopVideoCapture(const char* stream_id, const StreamInfo& stream_info) | 参数变化: 将roomId和userId改为streamId和streamInfo |
| IRTCEngineEventHandler | onUserStartAudioCapture(const char* room_id, const char* user_id) | onUserStartAudioCapture(const char* stream_id, const StreamInfo& stream_info) | 参数变化: 将roomId和userId改为streamId和streamInfo |
| IRTCEngineEventHandler | onUserStopAudioCapture(const char* room_id, const char* user_id) | onUserStopAudioCapture(const char* stream_id, const StreamInfo& stream_info) | 参数变化: 将roomId和userId改为streamId和streamInfo |
| IRTCEngineEventHandler | onLocalAudioStateChanged(LocalAudioStreamState state, LocalAudioStreamError error) | onLocalAudioStateChanged(const char* stream_id, const StreamInfo& stream_info, LocalAudioStreamState state, LocalAudioStreamError error) | 参数变化: 添加streamId和streamInfo参数 |
| IRTCEngineEventHandler | onLocalVideoStateChanged(StreamIndex index, LocalVideoStreamState state, LocalVideoStreamError error) | onLocalVideoStateChanged(const char* stream_id, const StreamInfo& stream_info, LocalVideoStreamState state, LocalVideoStreamError error) | 参数变化: 将streamIndex变为streamId和streamInfo |
| IRTCEngineEventHandler | onRemoteAudioStateChanged(const RemoteStreamKey& key, RemoteAudioState state, RemoteAudioStateChangeReason reason) | onRemoteAudioStateChanged(const char* stream_id, const StreamInfo& stream_info, RemoteAudioState state, RemoteAudioStateChangeReason reason) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IRTCEngineEventHandler | onRemoteVideoStateChanged(RemoteStreamKey key, RemoteVideoState state, RemoteVideoStateChangeReason reason) | onRemoteVideoStateChanged(const char* stream_id, const StreamInfo& stream_info, RemoteVideoState state, RemoteVideoStateChangeReason reason) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IRTCEngineEventHandler | onFirstRemoteVideoFrameRendered(const RemoteStreamKey key, const VideoFrameInfo& info) | onFirstRemoteVideoFrameRendered(const char* stream_id, const StreamInfo& stream_info, const VideoFrameInfo& info) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IRTCEngineEventHandler | onFirstRemoteVideoFrameDecoded(const RemoteStreamKey key, const VideoFrameInfo& info) | onFirstRemoteVideoFrameDecoded(const char* stream_id, const StreamInfo& stream_info, const VideoFrameInfo& info) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IRTCEngineEventHandler | onFirstLocalVideoFrameCaptured(StreamIndex index, VideoFrameInfo info) | onFirstLocalVideoFrameCaptured(IVideoSource* video_source, VideoFrameInfo info) | 参数变化: 将streamIndex变为VideoSource |
| IRTCEngineEventHandler | onLocalVideoSizeChanged(StreamIndex index, const VideoFrameInfo& info) | onLocalVideoSizeChanged(IVideoSource* video_source, const VideoFrameInfo& info) | 参数变化: 将streamIndex变为VideoSource |
| IRTCEngineEventHandler | onRemoteVideoSizeChanged(RemoteStreamKey key, const VideoFrameInfo& info) | onRemoteVideoSizeChanged(const char* stream_id, const StreamInfo& stream_info, const VideoFrameInfo& info) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IRTCEngineEventHandler | onFirstLocalAudioFrame(StreamIndex index) | onFirstLocalAudioFrame(IAudioSource* audio_source) | 参数变化: 将streamIndex变为AudioSource |
| IRTCEngineEventHandler | onFirstRemoteAudioFrame(const RemoteStreamKey& key) | onFirstRemoteAudioFrame(const char* stream_id, const StreamInfo& stream_info) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IRTCEngineEventHandler | onSEIMessageReceived(RemoteStreamKey stream_key, const uint8_t* message, int length) | onSEIMessageReceived(const char* stream_id, const StreamInfo& stream_info, const uint8_t* message, int length) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IRTCEngineEventHandler | onSEIStreamUpdate(const RemoteStreamKey& key, SEIStreamEventType type) | onSEIStreamUpdate(const char* stream_id, const StreamInfo& stream_info, SEIStreamEventType type) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IRTCEngineEventHandler | onRecordingStateUpdate(StreamIndex type, RecordingState state, RecordingErrorCode error_code, RecordingInfo info) | onRecordingStateUpdate(IVideoSource* video_source, RecordingState state, RecordingErrorCode error_code, RecordingInfo info) | 参数变化: 将streamIndex变为VideoSource |
| IRTCEngineEventHandler | onRecordingProgressUpdate(StreamIndex type, RecordingProgress process, RecordingInfo info) | onRecordingProgressUpdate(IVideoSource* video_source, RecordingProgress process, RecordingInfo info) | 参数变化: 将streamIndex变为VideoSource |
| IRTCEngineEventHandler | onStreamSyncInfoReceived(RemoteStreamKey stream_key, SyncInfoStreamType stream_type, const uint8_t* data, int32_t length) | onStreamSyncInfoReceived(const char* stream_id, const StreamInfo& stream_info, SyncInfoStreamType stream_type, const uint8_t* data, int32_t length) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IRTCEngineEventHandler | onAudioFrameSendStateChanged(const char* room_id, const RtcUser& user, FirstFrameSendState state) | onAudioFrameSendStateChanged(const char* stream_id, const StreamInfo& stream_info, const RtcUser& user, FirstFrameSendState state) | 参数变化: 将roomId改为streamId和streamInfo |
| IRTCEngineEventHandler | onVideoFrameSendStateChanged(const char* room_id, const RtcUser& user, FirstFrameSendState state) | onVideoFrameSendStateChanged(const char* stream_id, const StreamInfo& stream_info, const RtcUser& user, FirstFrameSendState state) | 参数变化: 将roomId改为streamId和streamInfo |
| IRTCEngineEventHandler | onAudioFramePlayStateChanged(const char* room_id, const RtcUser& user, FirstFramePlayState state) | onAudioFramePlayStateChanged(const char* stream_id, const StreamInfo& stream_info, const RtcUser& user, FirstFramePlayState state) | 参数变化: 将roomId改为streamId和streamInfo |
| IRTCEngineEventHandler | onVideoFramePlayStateChanged(const char* room_id, const RtcUser& user, FirstFramePlayState state) | onVideoFramePlayStateChanged(const char* stream_id, const StreamInfo& stream_info, const RtcUser& user, FirstFramePlayState state) | 参数变化: 将roomId改为streamId和streamInfo |
| IRTCEngineEventHandler | onSimulcastSubscribeFallback(const RemoteStreamSwitch& event) | onSimulcastSubscribeFallback(const char* stream_id, const StreamInfo& stream_info, const bytertc::RemoteStreamSwitch& event) | 参数变化: 添加参数streamId和streamInfo |
| IRTCEngineEventHandler | onPerformanceAlarms(bytertc::PerformanceAlarmMode mode, const char* room_id, bytertc::PerformanceAlarmReason reason, const bytertc::SourceWantedData& data) | onPerformanceAlarms(const char* stream_id, const StreamInfo& stream_info, bytertc::PerformanceAlarmMode mode, bytertc::PerformanceAlarmReason reason, const bytertc::SourceWantedData& data) | 参数变化: 添加参数streamId和streamInfo |
| IRTCRoomEventHandler | onRemoteStreamStats(const char* stream_id, const bytertc::StreamInfo& stream_info, const RemoteStreamStats& stats) | onRemoteStreamStats(const RemoteStreamStats& stats) | 参数变化: 添加参数streamId和streamInfo |
| ILocalEncodedVideoFrameObserver | onLocalEncodedVideoFrame(StreamIndex type, const IEncodedVideoFrame& video_stream)) | onLocalEncodedVideoFrame(IVideoSource *video_source, const IEncodedVideoFrame& video_stream) | 参数变化: 将streamIndex变为VideoSource |
| IRemoteEncodedVideoFrameObserver | onRemoteEncodedVideoFrame(const RemoteStreamKey& stream_info, const IEncodedVideoFrame& video_stream) | onRemoteEncodedVideoFrame(const char* stream_id, const StreamInfo& stream_info, const IEncodedVideoFrame& video_stream) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| ISnapshotResultCallback | onTakeLocalSnapshotResult(long task_id, StreamIndex stream_index, IVideoFrame* image, int error_code) | onTakeLocalSnapshotResult(long task_id, IVideoSource* video_source, IVideoFrame* image, int error_code) | 参数变化: 将streamIndex变为VideoSource |
| ISnapshotResultCallback | onTakeRemoteSnapshotResult(long task_id, RemoteStreamKey stream_key, IVideoFrame* image, int error_code) | onTakeRemoteSnapshotResult(long task_id, const char* stream_id, const StreamInfo& stream_info, IVideoFrame* image, int error_code) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IAudioFrameObserver | onRemoteUserAudioFrame(const RemoteStreamKey& stream_info, const IAudioFrame& audio_frame) | onRemoteUserAudioFrame(const char* stream_id, const StreamInfo& stream_info, const IAudioFrame& audio_frame) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IAudioFrameProcessor | onProcessRemoteUserAudioFrame(const RemoteStreamKey& stream_info, IAudioFrame& audio_frame) | onProcessRemoteUserAudioFrame(const char* stream_id, const StreamInfo& stream_info, IAudioFrame& audio_frame) | 参数变化: 将RemoteStreamKey变为streamId和streamInfo |
| IExternalVideoEncoderEventHandler | onStart(StreamIndex index) | onStart(const char* stream_id, const StreamInfo& stream_info) | 参数变化: 将streamIndex变为streamId和streamInfo |
| IExternalVideoEncoderEventHandler | onStop(StreamIndex index) | onStop(const char* stream_id, const StreamInfo& stream_info) | 参数变化: 将streamIndex变为streamId和streamInfo |
| IExternalVideoEncoderEventHandler | onRateUpdate(StreamIndex index, int32_t video_index, VideoRateInfo info) | onRateUpdate(const char* stream_id, const StreamInfo& stream_info, int32_t video_index, VideoRateInfo info) | 参数变化: 将streamIndex变为streamId和streamInfo |
| IExternalVideoEncoderEventHandler | onRequestKeyFrame(StreamIndex index, int32_t video_index) | onRequestKeyFrame(const char* stream_id, const StreamInfo& stream_info, int32_t video_index) | 参数变化: 将streamIndex变为streamId和streamInfo |
| IExternalVideoEncoderEventHandler | onActiveVideoLayer(StreamIndex index, int32_t video_index, bool active) | onActiveVideoLayer(const char* stream_id, const StreamInfo& stream_info, int32_t video_index, bool active) | 参数变化: 将streamIndex变为streamId和streamInfo |
| ILocalEncodedAudioFrameObserver | onLocalEncodedAudioFrame(StreamIndex type, const EncodedAudioFrameData& audio_stream) | onLocalEncodedAudioFrame(IAudioSource* audio_source, const EncodedAudioFrameData& audio_stream) | 参数变化: 将streamIndex变为AudioSource |
| 类型名 | V3.58 | V3.60 | 详情 |
|---|---|---|---|
RoomProfileType | kRoomProfileTypeChat = 5 kRoomProfileTypeLwTogether = 7 | kRoomProfileTypeCall = 19 | 注重流畅性,视频缺省码率相对低,对音质要求低,流畅性要求高。 |
kRoomProfileTypeGameHD = 8 kRoomProfileTypeCoHost = 9 kRoomProfileTypeKTV = 11 kRoomProfileTypeVRChat = 13 kRoomProfileTypeLanLiveStreaming = 15 kRoomProfileTypeLiveBroadcasting = 1 | kRoomProfileTypeLive = 20 | 更注重画质,视频缺省码率相对高,对音质要求高。 |
| 变更类型 | V3.58 | V3.60 |
|---|---|---|
| 名称变更、默认值变更 | LocalVideoRenderPosition | 名称变更为: LocalVideoSinkPosition默认值变更:由 kLocalVideoRenderPositionAfterCapture(前处理前) 变更为 kLocalVideoSinkPositionAfterPreProcess(前处理后)。 |
| 名称变更 | RemoteVideoRenderPosition | RemoteVideoSinkPosition |
| 名称变更 | VideoRenderMirrorType | VideoSinkMirrorType |
| 变更类型 | V3.58 | V3.60 | 变更说明 |
|---|---|---|---|
参数变更 | IVideoFrame | VideoFrameData | 具体变更如下:
|
StreamMixingEvent 变更为 MixedStreamTaskEvent,和 WTN 流任务共用同一个事件枚举类。| 描述 | V3.58 | V3.60 |
|---|---|---|
请求发起任务 推流成功 | kStreamMixingEventStart = 1 kStreamMixingEventStartSuccess = 2 | kMixedStreamTaskEventStartSuccess = 1 |
任务发起失败 | kStreamMixingEventStartFailed= 3 | kMixedStreamTaskEventStartFailed = 2 具体失败原因参看 MixedStreamTaskErrorCode |
请求更新 任务更新成功 | kStreamMixingEventUpdate = 4 kStreamMixingEventUpdateSuccess = 5 | kMixedStreamTaskEventUpdateSuccess = 3 |
任务更新失败 | kStreamMixingEventUpdateFailed = 6 | kMixedStreamTaskEventUpdateFailed = 4 具体失败原因参看 MixedStreamTaskErrorCode |
请求结束任务 任务结束成功 | kStreamMixingEventStop = 7 kStreamMixingEventStopSuccess = 8 | kMixedStreamTaskEventStopSuccess = 5 |
任务结束失败 | kStreamMixingEventStopFailed = 9 | kMixedStreamTaskEventStopFailed = 6 具体失败原因参看 MixedStreamTaskErrorCode |
| 参数错误 | kStreamMixingEventRequestParamError = 15 | 调用 startPushMixedStream 或 updatePushMixedStream 返回 kReturnStatusParameterErr = -2 |
任务处理超时,请检查网络状态并重试 | kStreamMixingEventUpdateTimeout = 13 kStreamMixingEventStartTimeout = 14 | 调用 startPushMixedStream 或 updatePushMixedStream 时返回 kMixedStreamTaskErrorCodeTimeout = 1091 |
合流加图片 | kStreamMixingEventMixImageEvent = 16 | kMixedStreamTaskEventWarning = 7 具体失败原因参看 MixedStreamTaskErrorCode |
| Warning 事件 | 无 | kMixedStreamTaskEventWarning = 7 |
其他 | kStreamMixingEventFirstAudioFrameByClientMix = 11 kStreamMixingEventFirstVideoFrameByClientMix = 12 kStreamMixingEventChangeMixType = 10 | 移除 |
SingleStreamPushEvent 变更为 SingleStreamTaskEvent。| 描述 | V3.58 | V3.60 |
|---|---|---|
| 开始推流 | kSingleStreamPushEventStart = 1 | kSingleStreamTaskEventStartSuccess = 1 |
| 推流成功 | kSingleStreamPushEventStartSuccess = 2 | kSingleStreamTaskEventStartSuccess = 1 |
| 推流失败 | kSingleStreamPushEventStartFailed = 3 | kSingleStreamTaskEventStartFailed = 2 |
| 停止推流 | kSingleStreamPushEventStop = 4 | kSingleStreamTaskEventStopSuccess = 3 |
| 单流转推直播任务处理超时,请检查网络状态并重试 | kSingleStreamPushEventTimeout = 5 | kSingleStreamTaskEventWarning = 5,具体错误信息参看 SingleStreamTaskErrorCode。 |
| 参数错误 | kSingleStreamPushEventParamError = 6 | 调用 startPushSingleStream 时返回 kReturnStatusParameterErr = -2。 |
| 停止推流失败 | 无 | kSingleStreamTaskEventStopFailed = 4 |
| 功能 | 改动的数据类型 | 变更说明 |
|---|---|---|
| 本地音频流统计信息 | LocalAudioStats | 增加字段 audio_device_loop_delay(音频采集播放延时)、encode_frame_rate(音频编码帧率) |
| 远端音频流统计信息 | RemoteAudioStats | 增加字段 decode_frame_rate(音频解码帧率) |
| 远端视频流统计信息 | RemoteVideoStats | 增加字段 cap_to_render_delay(从发送端开始采集到接收端渲染完成的延时)、av_sync_diff_ms(音画同步差异)、codec_elapse_per_frame(视频解码平均耗时) |
| 功能 | 改动的数据类型 | 变更说明 |
|---|---|---|
| 参数变更 | EncryptType | kEncryptTypeCustomize = 0 改为 kEncryptTypeNone = 0,实现关闭内置加密如果已调用了 setCustomizeEncryptHandler 设置自定义加密,再调用 setEncryptInfo 传入 0,会关闭自定义加密,如果你需要开启自定义加密,需要调用 setCustomizeEncryptHandler 重新设置。(更改之前,不会关闭自定义加密) |
| 功能 | 名称 | 变更说明 |
|---|---|---|
| 发布状态变化原因 | PublishStateChangeReason | 新增类 |
截图错误码 | SnapshotErrorCode | 新增枚举 截图成功(0、kSnapshotErrorCodeOk) 截图错误。生成图片数据失败或 RGBA 编码失败(-1、kSnapshotErrorCodeCreateFail) 截图错误。流无效(-2、kSnapshotErrorCodeStreamInvalid) 截图错误。截图超时,超时时间 1 秒(-3、kSnapshotErrorCodeTimeout) 截图错误。图片保存失败(-4、kSnapshotErrorCodeFileSaveError) |
音频场景类型 | AudioScenarioType | 枚举值增加 教育场景。适用于以人声教学内容为主的高音质场景(4、kAudioScenarioTypeEducation) AI 对话场景(5、kAudioScenarioTypeAiClient) |
耳返功能的 Audio Filter 类型 | EarMonitorAudioFilter | 新增枚举 没有 Audio Filter(默认设置)(0x0001、kEarMonitorAudioFilterNone) 耳返复用 3A 处理(0x8000、kEarMonitorAudioFilterReuseAudioProcessing) |
登录错误码 | LoginErrorCode | 错误码增加: 增加登录错误码增加-1004,代表当前为受限模式 在受限模式下使用RTS的能力具有以下限制: 支持房间内广播和点对点; 发送消息速率不超过30KB/秒; 发送消息频率不超过60包/秒; 发送消息包长度不超过1KB; 受限/非受限模式的切换,需要在火山控制台设置。 |
单流转推直播错误码 | SingleStreamTaskErrorCode | 枚举值增加 服务端检测任务参数不合法(1093、kSingleStreamTaskErrorCodeInvalidParamByServer) 转推任务在目标房间的用户ID被踢出目标房间(1094、kSingleStreamTaskErrorRemoteKicked) 转推任务加入目标房间失败(1095、kSingleStreamTaskErrorCodeJoinDestRoomFailed) 转推任务在源房间拉流超时(1096、kSingleStreamTaskErrorCodeReceiveSrcStreamTimeout) 音视频编码转推任务不支持(1097、kSingleStreamTaskErrorCodeNotSurportCodec) |
| 单流转推配置目标房间信息 | DestInfo | 新增类 |
单流转推类型 | SingleStreamPushType | 枚举增加 单流转推到CDN(1、kPushToCDN) 单流转推到RTC房间(2、kPushToRTC) |
单流转推直播配置参数 | PushSingleStreamParam | 成员增加 单流转推直播配置参数中增加:单流转推配置目标房间信息列表(dest_info)、转推目标房间数量, |
镜像类型 | MirrorType | 枚举值增加 本地预览时无镜像效果,仅编码传输时有镜像效果(2、ByteRTCMirrorTypeEncoder) |
| V3.58 | V3.60 |
|---|---|
kWarningCodeOldRoomBeenReplaced = -2016 | 移除: 使用相同 roomId 再次创建房间时,将返回上次创建的房间实例,不再触发此错误码。 |
PublicStreamErrorCode 变更为 MixedStreamTaskErrorCode,和合流转推任务共用同一个枚举类。| 描述 | V3.58 | V3.60 |
|---|---|---|
| 成功 | kPublicStreamErrorCodeOK = 0 | kMixedStreamTaskErrorCodeOK = 0 |
| 服务端参数检验失败 | kPublicStreamErrorCodePushInvalidParam = 1191 | 删除,不会回调此类错误。 |
| 服务端内部错误 | kPublicStreamErrorCodePushInvalidStatus = 1192 | 删除,不会回调此类错误。 |
| 服务端未知错误 | kPublicStreamErrorCodePushInternalError = 1193 | 删除,不会回调此类错误。 |
| 任务失败 | kPublicStreamErrorCodePushFailed = 1195 | kMixedStreamTaskErrorCodePushWTNFailed = 1195 |
| 任务超时 | kPublicStreamErrorCodePushTimeout = 1196 | kMixedStreamTaskErrorCodeTimeout = 1091 |
| 流订阅超时 | kPublicStreamErrorCodePullNoPushStream = 1300 | WTNSubscribeStateChangeReason.kWTNSubscribeStateChangeReasonUnsubscribe = 1300,通过 onWTNVideoSubscribeStateChanged 或onWTNAudioSubscribeStateChanged 返回。 |
StreamMixingErrorCode 变更为 MixedStreamTaskErrorCode,和 WTN 流任务共用同一个枚举类。| 描述 | V3.58 | V3.60 |
|---|---|---|
| 推流成功 | kStreamMixingErrorCodeCodeOK = 0 | kMixedStreamTaskErrorCodeOK = 0 |
| 未定义的合流错误 | kStreamMixingErrorCodeCodeBase = 1090 | 无,该错误码未启用。 |
| 客户端 SDK 检测到无效推流参数 | kStreamMixingErrorCodeCodeInvalidParam = 1091 | 调用 startPushMixedStream 或 updatePushMixedStream 时返回 kReturnStatusParameterErr = -2。 |
| 状态错误,需要在状态机正常状态下发起操作 | kStreamMixingErrorCodeCodeInvalidState = 1092 | kMixedStreamTaskErrorCodeInvalidStateByServer = 1094 |
| 无效操作 | kStreamMixingErrorCodeCodeInvalidOperator = 1093 | kMixedStreamTaskErrorCodeInvalidStateByServer = 1094 |
| 转推直播任务处理超时,请检查网络状态并重试 | kStreamMixingErrorCodeCodeTimeOut = 1094 | kMixedStreamTaskErrorCodeTimeOut = 1091 |
| 服务端检测到错误的推流参数 | kStreamMixingErrorCodeCodeInvalidParamByServer = 1095 | kMixedStreamTaskErrorCodeInvalidParamByServer = 1092 |
| 对流的订阅超时 | kStreamMixingErrorCodeCodeSubTimeoutByServer = 1096 | kMixedStreamTaskErrorCodeSubTimeoutByServer = 1093 |
| 合流服务端内部错误 | kStreamMixingErrorCodeCodeInvalidStateByServer = 1097 | kMixedStreamTaskErrorCodeInvalidStateByServer = 1094 |
| 合流服务端推 CDN 失败 | kStreamMixingErrorCodeCodeAuthenticationByCDN = 1098 | kMixedStreamTaskErrorCodeAuthenticationByCDN = 1095 |
| 服务端接收信令超时,请检查网络状态并重试。 | kStreamMixingErrorCodeCodeTimeoutBySignaling = 1099 | kMixedStreamTaskErrorCodeSignalRequestTimeout = 1097 |
| 图片合流失败 | kStreamMixingErrorCodeCodeMixImageFail = 1100 | kMixedStreamTaskErrorCodeMixImageFailed = 1098 |
| 服务端未知错误 | kStreamMixingErrorCodeCodeUnKnownErrorByServer = 1101 | kMixedStreamTaskErrorCodeUnKnownErrorByServer = 1096 |
StreamMixingErrorCode 替换为 SingleStreamTaskErrorCode。| 描述 | V3.58 | V3.60 |
|---|---|---|
| 推流成功 | TRANSCODER_ERROR_OK = 0 | kSingleStreamTaskErrorCodeOK = 0 |
| 未定义的合流错误 | TRANSCODER_ERROR_BASE = 1090 | 无,该错误码未启用。 |
| 客户端 SDK 检测到无效推流参数 | TRANSCODER_ERROR_INVALID_PARAM = 1091 | 调用 startPushSingleStream 时返回 kReturnStatusParameterErr = -2。 |
| 状态错误,需要在状态机正常状态下发起操作 | TRANSCODER_ERROR_INVALID_STATE = 1092 | 无,单流任务不会触发该错误码。 |
| 无效操作 | TRANSCODER_ERROR_INVALID_OPERATOR = 1093 | 无,单流任务不会触发该错误码。 |
| 转推直播任务处理超时,请检查网络状态并重试 | TRANSCODER_ERROR_TIMEOUT = 1094 | 无,单流任务不会触发该错误码。 |
| 服务端检测到错误的推流参数 | TRANSCODER_ERROR_INVALID_PARAM_BY_SERVER = 1095 | 无,单流任务不会触发该错误码。 |
| 对流的订阅超时 | TRANSCODER_ERROR_SUB_TIMEOUT_BY_SERVER = 1096 | 无,单流任务不会触发该错误码。 |
| 合流服务端内部错误 | TRANSCODER_ERROR_INVALID_STATE_BY_SERVER = 1097 | 无,单流任务不会触发该错误码。 |
| 合流服务端推 CDN 失败 | TRANSCODER_ERROR_AUTHENTICATION_BY_CDN = 1098 | 无,单流任务不会触发该错误码。 |
| 服务端接收信令超时,请检查网络状态并重试 | TRANSCODER_ERROR_TIMEOUT_BY_SIGNALING = 1099 | kSingleStreamTaskErrorCodeSignalRequestTimeout = 1092 |
| 图片合流失败 | TRANSCODER_ERROR_MIX_IMAGE_FAIL = 1100 | 无,单流任务不会触发该错误码。 |
| 服务端未知错误 | TRANSCODER_ERROR_UNKNOW_ERROR_BY_SERVER = 1101 | kSingleStreamTaskErrorCodeUnKnownByServer = 1091 |
删除了部分已废弃多个版本的错误码:
| 描述 | 错误码 |
|---|---|
| 调用 createRTCRoom 时使用的 roomid 非法,会返回 null,并抛出该 error。 | kRoomErrorCodeRoomIdIllegal = -1007 |
| 通话回路检测已经存在同样 roomId 的房间了。 | kErrorCodeRoomAlreadyExist = -1013 |
| 获取房间信息失败警告。 | kWarningCodeGetRoomFailed = -2000 |
| 自动订阅模式未关闭时,尝试开启手动订阅模式会触发此警告。 | kWarningCodeSubscribeStreamForbiden = -2010 |
| 发布流总数超过上限。 | kErrorCodeOverScreenPublishLimit = -1081 |
| 公共流的参数异常,请修改参数后重试。 | kPublicStreamErrorCodePushInvalidParam = 1191 |
| 服务端状态异常,将自动重试。 | kPublicStreamErrorCodePushInvalidStatus = 1192 |
| 内部错误,不可恢复,请重试。 | kPublicStreamErrorCodePushInternalError = 1193 |
| 发布失败,将自动重试,请关注重试结果。 | kPublicStreamErrorCodePushFailed = 1195 |
| 发布失败,10 s 后会重试,重试 3 次后自动停止。 | kPublicStreamErrorCodePushTimeout = 1196 |
| 接口 | 功能说明 |
|---|---|
| IRTCEngine::createRTSRoom | 创建RTS房间 |
| IRTCEngine::pushReferenceAudioPCMData | 将外部音频参考帧推到sdk内 |
| IRTCRoom::getCallId | 获取通话 ID。该方法需要在加入房间后调用 |
| IRemoteEncodedAudioFrameObserver::onRemoteEncodedAudioFrame | 调用 RegisterRemoteEncodedAudioFrameObserver 后,SDK 收到远端音频帧信息时,回调该事件 |
| IRTCEngine::muteScreenAudioCapture | 设置是否将屏幕音频源的录音信号静音(不改变本端硬件)。 |
| IRTCRoom::setStreamExtraInfo | 设置当前推流的流附加信息。 |
| IRTCRoomEventHandler::onRoomStreamExtraInfoUpdate | 接收同一房间内,其他用户调用 setStreamExtraInfo设置的流附加信息的回调。 |
| IRTCEngine::takeLocalSnapshotToFile | 截取本地视频流画面,生成 JPG 文件,并保存到本地指定路径。 |
| IRTCEngine::takeRemoteSnapshotToFile | 截取远端的视频流画面,生成 JPG 文件,并保存到本地指定路径。 |
| IRTCEngineEventHandler::onLocalSnapshotTakenToFile | 用 takeSnapshotToFile:filePath:{@link #ByteRTCVideo#takeSnapshotToFile:filePath:} 截取视频画面时,会收到此回调报告截图是否成功,以及截取的图片信息。 |
| IRTCEngineEventHandler::onRemoteSnapshotTakenToFile | 用 takeSnapshotToFile:filePath:{@link #ByteRTCVideo#takeSnapshotToFile:filePath:} 截取视频画面时,会收到此回调报告截图是否成功,以及截取的图片信息。 |
删除了已废弃或不推荐使用的方法,具体如下:
| 变更类型 | 已删除/废弃接口 | 替代接口 |
|---|---|---|
| 废弃 | setLocalVideoSink(IVideoSink* video_sink, IVideoSink::PixelFormat required_format) | setLocalVideoSink(IVideoSink* video_sink, LocalVideoSinkConfig& config) = 0 |
| 废弃 | setRemoteVideoSink(RemoteStreamKey stream_key, IVideoSink* video_sink, IVideoSink::PixelFormat required_format) | setRemoteVideoSink(const char* stream_id, IVideoSink* video_sink, RemoteVideoSinkConfig& config) |
| 删除 | createRTCVideo(const char* app_id, bytertc::IRTCVideoEventHandler event_handler, const char parameters) | createRTCEngine(const EngineConfig& config, IRTCEngineEventHandler* event_handler) |
| 删除 | IAudioDeviceManager::enableFilterSilentDevice(bool enable) | 如果你需要使用过滤无声设备功能,请联系技术支持。 |
| 删除 | IVideoFrame.buildVideoFrame | 使用 VideoFrameData 替代。 |
| 删除 | getErrorDescription | 无替代接口 |
删除 |
| 无替代接口 如果需要使用 ASR 功能,可以通过实时字幕功能相关接口实现:startSubtitle、stopSubtitle |
| 删除 | * onError(int err) | 如果需要使用 ASR 功能,可以通过实时字幕功能相关接口实现。onSubtitleStateChanged、onSubtitleMessageReceived |
删除 | subscribeUserStream(const char* user_id, StreamIndex stream_type, SubscribeMediaType media_type, const SubscribeVideoConfig& video_config) |
|
| 删除 | onRoomError(int err) | onRoomStateChanged(const char* room_id, const char* uid, int state, const char* extra_info) |
删除 | IAudioMixingManager | IMediaPlayer IAudioEffectPlayer |
删除 | onAudioMixingStateChanged(int mix_id, bytertc::AudioMixingState state, bytertc::AudioMixingError error) | onMediaPlayerStateChanged( int player_id, PlayerState state, PlayerError error) onAudioEffectPlayerStateChanged(int effect_id, PlayerState state, PlayerError error) |
删除 |
|
|
| 删除 | muteAudioPlayback(MuteState mute_state) | setPlaybackVolume(const int volume) |
删除 |
|
|
删除 |
|
|
删除 |
|
|
删除 |
|
|
删除 |
|
|
删除 | RTCEngine(原RTCVideo)类定义的以下方法:
| 无替代接口 |
| 变更详情 | 功能模块 | 改动的数据类型 | 说明 |
|---|---|---|---|
| 新增枚举值 | 音效 | PlayerState |
| 变更对象 | 变更详情 | 旧版示例 | 新版示例 |
|---|---|---|---|
枚举值 | 改为以 “k” 开头,“k+类名+值名”,大小写混合 | 以
| 以
|
结构体成员 | 改用下划线命名法 | 以
| 以
|
| 变更详情 | 功能模块 | 废弃的类/接口 | 替代的类/接口 | 说明 |
|---|---|---|---|---|
| 删除 | 主调类 | IRTCEngine | IRTCVideo | |
| 使用范围拓展 | 视频处理 | setVideoDecoderConfig | setVideoDecoderConfig | 旧版接口仅支持在手动订阅时使用,新增支持在自动订阅时使用。 |
| 变更详情 | 功能模块 | 废弃的类/接口 | 替代的类/接口 | 说明 |
|---|---|---|---|---|
| 删除 | 主回调类 | IRTCEngineEventHandler | IRTCVideoEventHandler | |
| 参数变更 | 消息 | virtual void onLogout() | virtual void onLogout(LogoutReason reason) | 在 onLogout 回调上新增 reason 参数,区分用户主动/被动登出。 |
| 变更详情 | 功能模块 | 改动的数据类型 | 说明 |
|---|---|---|---|
枚举值名称变更 | 视频管理 |
|
|
| 成员变量新增 | 字幕翻译服务 | SubtitleMessage | 在字幕内容回调 onSubtitleMessageReceived 的参数 SubtitleMessage 中新增成员变量 language 和 mode,可用于同时收到字幕原文和字幕译文。 |
| 类型名称变更 | 消息 | USER_ONLINE_STATUS | 名称变更为 UserOnlineStatus。 |
| 变更详情 | 错误码 | 说明 |
|---|---|---|
枚举值增删 | 新增客户端向业务服务器发送消息失败错误码:
|
| 变更详情 | 功能模块 | 变动前方法 | 变动后方法 | 说明 |
|---|---|---|---|---|
将混音相关的类和接口按音效和音乐进行拆分,具体变动情况请参看混音相关的新旧接口对应表 | 混音 |
|
| 一般来说,对于短时间的音效(比如小于 20s),可以使用音效类;对于较长的音频或 PCM 数据,可以使用音乐类。 |
附:混音相关的新旧接口对应表
| 接口分类 | 接口用途 | 废弃类/接口 | 新类/接口(音效) | 新类/接口(音乐) | 备注 |
|---|---|---|---|---|---|
| 获取实例 | 获取播放器实例 | getAudioMixingManager | getAudioEffectPlayer | getMediaPlayer | |
| 混音类 | IAudioMixingManager | IAudioEffectPlayer | IMediaPlayer | ||
混音主调接口 | 将音效文件加载至内存 |
|
|
| |
播放/停止/暂停/恢复 |
|
|
| ||
获取/指定位置/时长 |
|
|
| ||
获取/指定音量 |
|
|
| ||
| 调整音调 | setAudioMixingPitch | NA | setAudioPitch | ||
| 设置声道模式 | setAudioMixingDualMonoMode | NA | setAudioDualMonoMode | ||
获取/设置音轨数 |
| NA |
|
| |
| 设置播放速度 | setAudioMixingPlaybackSpeed | NA | setPlaybackSpeed | ||
| 设置播放进度回调间隔 | setAudioMixingProgressInterval | NA | setProgressInterval | ||
| 设置响度 | setAudioMixingLoudness | NA | setLoudness | ||
播放外部音频源 |
| NA |
| ||
混音回调接口 | 播放状态回调 |
|
|
| |
音频数据回调 |
| NA |
| ||
| 变更详情 | 方法 | 说明 |
|---|---|---|
| 参数变更 | feedback | 参数数据类型变更 |
| 变更详情 | 方法 | 说明 |
|---|---|---|
参数变更 |
| 参数 拆分为:
|
| 变更详情 | 错误码 | 说明 |
|---|---|---|
枚举值变更 |
| 新增枚举值:
名称变更:
|
新增枚举值 当服务端在指定房间封禁指定用户,而此用户加入房间失败,或从房间中被踢出时收到。 | ||
废弃枚举值 kErrorCodeOverScreenPublishLimit=-1081,用 kErrorCodeOverStreamPublishLimit=-1080 代替。 |
原 bytertc_common_defines.h 文件拆分为 bytertc_media_defines.h 及 bytertc_rts_defines.h
| 变更详情 | 功能模块 | 变动前方法 | 变动后方法 | 备注 |
|---|---|---|---|---|
返回值变更 | 房间管理 |
|
| 返回值为 |
引擎管理 |
|
| ||
拆分 | 视频管理 |
|
| 解除人脸识别与视频特效之间的耦合,提升接口易用性。 |
| 参数类型变更 | 屏幕共享 | virtual int setScreenVideoEncoderConfig(const VideoEncoderConfig& screen_solution) = 0; | virtual int setScreenVideoEncoderConfig(const ScreenVideoEncoderConfig& screen_solution) = 0; | 参数类型变更为新增的 ScreenVideoEncoderConfig |
行为变更 | 屏幕共享 |
|
| 优化屏幕共享接口的行为 |
| 废弃 | 自定义流处理 | registerVideoFrameObserver | 用 setLocalVideoSink 和 setRemoteVideoSink 代替 | |
名称和参数变更 | 音视频处理 |
|
| 统一返回值 |
|
| |||
virtual int updateNode(const char* nodePath, const char* nodeKey, float nodeValue) = 0; | virtual int updateEffectNode(const char* effectNodePath, const char* nodeKey, float nodeValue) = 0; | |||
| 屏幕分享 | virtual bool pushScreenFrame(IVideoFrame* frame) | virtual int pushScreenVideoFrame(IVideoFrame* frame) | ||
| 参数变更 | 消息 | virtual int sendSEIMessage(StreamIndex stream_index, const uint8_t* message, int length, int repeat_count) = 0; | virtual int sendSEIMessage(StreamIndex stream_index, const uint8_t* message, int length, int repeat_count, SEICountPerFrame mode) = 0; | 支持 SEI 多发模式,即在 1 帧间隔内多次发送 SEI 数据时,多个 SEI 随下个视频帧同时发送。 |
多个模块 | 返回值类型变化,例如:
该版本中含此变更的方法包括: updateToken (返回值 void—>int) setRemoteVideoConfig (返回值 void—>int) subscribeStream (返回值 void—>int) unsubscribeStream (返回值 void—>int) subscribeScreen (返回值 void—>int) unsubscribeScreen (返回值 void—>int) pushExternalAudioFrame (返回值 bool—>int) pullExternalAudioFrame (返回值 bool—>int) pushExternalVideoFrame (返回值 bool—>int) setRemoteAudioPlaybackVolume (返回值 void—>int) pushExternalEncodedVideoFrame (返回值 bool—>int) setPublicStreamVideoSink (返回值 void—>int) enableSimulcastMode (返回值 int—>void) setPublishFallbackOption (返回值 int—>void) setSubscribeFallbackOption (返回值 int—>void) | |||
| 名称变更 | 视频管理 | setRemoteStreamVideoCanvas | setRemoteVideoCanvas | |
| CDN 推流 | onStreamMixingVideoFrame | onMixingVideoFrame | ||
onStreamMixingAudioFrame | onMixingAudioFrame | |||
onStreamMixingDataFrame | onMixingDataFrame | |||
| 变更详情 | 功能模块 | 变动前方法 | 变动后方法 | 备注 |
|---|---|---|---|---|
| 参数变更 | 消息 | virtual void onPublicStreamSEIMessageReceived(const char* public_stream_id, const uint8_t* message, int message_length) { (void)public_stream_id; (void)message; (void)message_length; } | virtual void onPublicStreamSEIMessageReceived(const char* public_stream_id, const uint8_t* message, int message_length, SEIMessageSourceType source_type) { (void)public_stream_id; (void)message; (void)message_length; (void)source_type; } |
| 变更详情 | 数据类型 | 备注 |
|---|---|---|
| 取值范围拓展 | TranscoderLayoutRegion中,width 和 height | 取值范围由 (0.0, 1.0] 拓展为 [0.0, 1.0]。 |
| 枚举值增删 | UserMessageSendResult | 新增枚举值:kUserMessageSendResultExceedQPS = 5 |
RoomMessageSendResult | 新增枚举值:kRoomMessageSendResultExceedQPS = 5 | |
AudioProcessorMethod | 新增枚举值:kAudioFrameProcessorEarMonitor = 3 | |
| 成员变量变更 | FaceDetectResult | 新增成员变量:frame_timestamp_us |
ContentHint | 废弃屏幕共享内部采集的变量content_hint。可通过 VideoEncodePreference设置视频流编码偏好,通过ScreenVideoEncodePreference设置屏幕流编码偏好。 | |
AudioDeviceInfo | 增加成员变量 device_short_name[MAX_DEVICE_ID_LENGTH] | |
ITranscoderParam | 新增成员变量:TranscoderClientMixParam | |
| 变量类型变更 | 空间音频功能中表示空间坐标的 position 的 变量 x, y, z 类型由 int 更改为 float。 | 提升球面立体声渲染效果。 |
枚举值名称变更 |
| 枚举值名称增加前缀 k,更改后的枚举值如下: enum VideoSourceType { kVideoSourceTypeExternal = 0, kVideoSourceTypeInternal = 1, kVideoSourceTypeEncodedWithAutoSimulcast = 2, kVideoSourceTypeEncodedWithoutAutoSimulcast = 3, }; |
| 配置变更 | RoomProfileType | 房间属性的默认值 kRoomProfileTypeCommunication = 0,对应的由 kRoomProfileTypeChatRoom = 6 变更为 kRoomProfileTypeMeeting = 16。 |
| 新增 | PublicStreamErrorCode | onPlayPublicStreamResult 和 onPushPublicStreamResult 中的 errorCode 参数类型由 int 改为 PublicStreamErrorCode |
| 变更详情 | 错误码 | 备注 |
|---|---|---|
| 枚举值增删 | ErrorCode | 新增枚举值:kErrorCodeUserIDDifferent = -1014 |
以下表格中的方法发生了变化。你需要在工程文件中找到该方法,并进行相关修改:
| 变更详情 | 功能模块 | 方法 | 备注 |
|---|---|---|---|
参数数据结构改动 | 音频管理 |
| 数据结构中,新增参数: |
以下表格中的方法发生了变化。你需要在工程文件中找到该方法,并进行相关修改:
| 变更详情 | 功能模块 | 变动前方法 | 变动后方法 | 备注 |
|---|---|---|---|---|
| 废弃原方法 | 音频处理 | virtual void muteAudioPlayback(MuteState mute_state) = 0; | virtual void setPlaybackVolume(const int volume) = 0; | 设置远端用户音量为 0 即可停止播放本地收到的音频流 |