sy_rtc_flutter_sdk 3.2.2
sy_rtc_flutter_sdk: ^3.2.2 copied to clipboard
SY RTC Flutter SDK - real-time audio and video calls for Flutter, on Android and iOS.
3.2.2 #
- 版本对齐:插件、Android(
com.github.carlcy:sy-rtc-android-sdk:v3.2.2)、iOS(SyRtcSDK3.2.2)统一为 3.2.2。3.2.1 的 Android 仍指向 v3.2.0,因此发 3.2.2。代码无其他改动。
3.2.1 #
- iOS 改为依赖 CocoaPods trunk 上的
SyRtcSDK3.2.1,不再内置ios/SyRtcSDK源码。WebRTC-SDK 由 SyRtcSDK 传递(125.6422.07)。 - 随 SyRtcSDK 3.2.1 修复:iOS 收不到数据流 / SEI(DataChannel 代理被立即释放)。
- Android 仍为
com.github.carlcy:sy-rtc-android-sdk:v3.2.0。
3.2.0 #
- 网络质量上下行分开(原生 Android / iOS 同步):tx = RTT + 上行丢包,rx = 本周期下行丢包 + 抖动。
SyRtcStats新增txQuality/rxQuality/txPacketLossRate/rxPacketLossRate/jitterMs。 - 插件、example、文档中的版本统一为 3.2.0。客户写
sy_rtc_flutter_sdk: ^3.2.0。 - Android 坐标为
com.github.carlcy:sy-rtc-android-sdk:v3.2.0。iOS 目标为SyRtcSDK 3.2.0;CocoaPods trunk 还没有该 pod,插件编译内置源码(对齐sy-rtc-ios-sdk分支cursor/versioned-spm-cocoapods-3ccc)。 - 接通原生能力:网络质量(RTT+丢包,无样本为
unknown)、0–255 音量、音频路由、前后摄、屏幕共享、静音查询、流附加信息、数据流、自定义采集开关、重连回调。 - 网络质量:Android 与 iOS 原生阈值和名字统一(excellent <100ms/<1%,good <200ms/<3%,poor <400ms/<8%,bad <800ms/<20%,其余 down)。
- 两端仍不一致的地方写在文档里:路由原始整数(Dart 层已统一为
SyAudioRoute)、iOS 只能切扬声器/听筒。 - 重连两端统一:最多 5 次、1/2/4/8/16 秒退避、ICE 重启;新增
onReconnecting/onReconnected/onReconnectFailed、SyReconnectPolicy、SyConnectionChangedReason.rejoinSuccess,原生 reason 用syConnectionReasonFromNative映射。 - 修复 iOS 原生可选回调不送达(
onJoinChannelSuccess、onNetworkQuality等此前在 iOS 上收不到);iOS 插件补发onFirstRemoteVideoDecoded/onFirstRemoteVideoFrame/onVideoSizeChanged。 - 两端补齐并互通:
useFrontCamera、getStreamExtraInfo、isRemoteAudioMuted/isRemoteVideoMuted、sendSei/onSeiMessage(DataChannelSYSEI前缀,不是码流 SEI)、onUserMuteVideo;AndroidgetNetworkType改为真实值。Android 与 iOS 用同一套静音信令(user-media)和附加信息格式(sy-extra:),跨端进房能互相收到。 - 去掉音量固定 0、空网络质量、以及 iOS 写死的「默认麦克风」列表。iOS 采集设备改为
AVAudioSession.availableInputs。 - example 的 Android 构建升到 Gradle 8.14、AGP 8.11.1、Kotlin 2.2.20,以通过当前 Flutter 的最低版本检查。
- 统一 Dart 类型:
SyNetworkQualityLevel(unknown/excellent/good/poor/bad/down)与onNetworkQualityLevel;Androidmedium/die与 iOSpoor/down在 Dart 层映射到同一档位,旧SyNetworkQuality保留兼容。 SyRtcStats增加uid、rttMs、packetLossRate(统一 0–1)、码率、统一档位、networkType、raw。修复onRtcStats/onLeaveChannel的 Map 强转导致统计被丢弃;iOS 插件补发onRtcStats。- Android 屏幕共享:原生 SDK 内置 mediaProjection 前台服务,Android 10+ 自动启停,宿主无需声明。
SyAudioRoute.fromNative在 Dart 层按平台翻译原生路由整数。- 新增频道属性
POST /api/rtc/channel/meta/set|get|delete(用户 JWT)、switchQualityTier,以及 Token 业务码 4031/4032/4033。 - 新增
SyRtcErrorCode,onError码两端统一(iOS 原生改了码值:音频路由 1004 → 1009、屏幕共享 1008 → 1006、未知画质 / 附加信息过长 → 1000、视频源未就绪 → 1005 / 1007;被踢两端都报 1004;凭证停用报 4031 / 4032 / 4033;信令错误文本改读服务端message字段)。 - 修正
SyTokenBusinessCode:4031 暂停(suspended)、4032 吊销(revoked)、4033 过期(expired),与服务端一致。invalid/privilegeDenied为已弃用别名;expired由 4032 改为 4033。 - Token 过期提醒两端一致:读服务端 Token 的
expireAt,提前 30 秒onTokenPrivilegeWillExpire,到期onRequestToken。此前 Android 从不回调,iOS 只认 JWT 所以也不回调。 - 网络质量两端同一回调方式:每轮先本端 uid(对端最差一档),再逐个对端;
SyNetworkQualityEvent.isLocal、SyRtcEngine.localUid。 - Android 原生开始回调
onFirstRemoteVideoDecoded/onFirstRemoteVideoFrame/onVideoSizeChanged;两端onVideoSizeChanged在每次尺寸变化时回调;新增onFirstLocalVideoFrame(SyFirstLocalVideoFrameEvent)。 - 本地录音:
startAudioRecording改为返回Future<int>(0 / -1);SyAudioRecordingConfiguration新增includeLocal/includeRemote,SyAudioCodecType新增wav,heAac/heAacV2标记废弃(两端未实现,原生报 1000)。两端原生在频道内改为录 WebRTC 管线 PCM 并混入远端,不再另开麦克风;Android 去掉了名不副实的 mp3(实际是 AMR-NB)。 - Token 过期提醒:两端原生对本地定时器与服务端推送(
token-privilege-will-expire/token-expired)按 Token 去重,onTokenPrivilegeWillExpire/onRequestToken每个 Token 各一次。
3.1.2 #
- 客户接入改为在
pubspec.yaml写sy_rtc_flutter_sdk: ^3.1.2(或 gitref: v3.1.2)。example 仍用path: ../做本地联调。 - Android 原生 SDK 固定为 JitPack 坐标
com.github.carlcy:sy-rtc-android-sdk:v3.1.0,去掉本地 AAR 回退。 - iOS:
SyRtcSDK尚未进入 CocoaPods trunk,插件继续编译内置源码;说明见 README。 - 新增
SyQualityTier/SyRtcEngine.setQualityTier,与后端qualityTier=audio|sd|hd|fhd对齐;renewToken在 iOS 上会保存新 Token。 - 补齐 pub.dev 发布元数据(topics、issue_tracker)与中文快速开始。
3.1.1 #
- Example / defaults:去掉公开服务器 IP,改用域名
syrtcapi.shengyuchenyao.cn
3.1.0 #
3.0.1 #
- Production zip pack excludes
ios/.symlinks,.dart_tool,build,**/Pods,**/.git. - Example defaults HTTPS/WSS;
--dart-define=SY_API_BASE=. - No API breaks vs 3.0.0.
3.0.0 #
2.1.1 #
2.1.0 #
新增 SyRoomService — 房间管理服务 #
对标声网 (Agora)、即构 (Zego) 等主流 RTC SDK 设计,新增 SyRoomService 作为核心 RTC 引擎的可选配套组件。
新增功能:
SyRoomService类:房间管理 + Token 获取的便捷封装getRoomList()— 获取活跃房间列表(不需要 RTC Token)createRoom(channelId)— 创建房间closeRoom(channelId)— 关闭房间getRoomDetail(channelId)— 获取房间详情getOnlineCount(channelId)— 查询在线人数fetchToken(channelId, uid)— 获取 RTC Token
SyRoomInfo数据类:channelId、hostUid、status、onlineCount、maxSeats、createTimeSyRtcEngine.setChannelProfile()— 设置频道场景(communication/liveBroadcasting)SyRtcEngine.enableAudioVolumeIndication()— 启用用户音量提示
示例应用更新:
- 新增房间列表页面 (
RoomListPage),展示完整流程:浏览房间 → 选择/创建 → 获取 Token → 加入 - Token 自动续期(
onTokenPrivilegeWillExpire回调)
文档更新:
- SDK 集成指南中所有示例代码更新为含 SyRoomService 的完整流程
- API 文档新增 SyRoomService 部分
- 更新主流 SDK 设计对比说明
2.0.0 (Breaking Change) #
架构调整 #
SDK 重新定位为纯 RTC 传输层,移除所有业务逻辑,对齐声网/即构等主流 RTC SDK 设计。
移除 #
- 房间管理:
updateRoomInfo、setRoomNotice、setRoomManager及相关事件 - 麦位管理:
takeSeat、leaveSeat、requestSeat、handleSeatRequest、inviteToSeat、handleSeatInvitation、kickFromSeat、lockSeat/unlockSeat、muteSeat/unmuteSeat及相关事件 - 用户管理:
kickUser、muteUser、banUser及onUserKicked、onUserMuted、onUserBanned - 房间聊天:
sendRoomMessage、onRoomMessage - 礼物系统:
sendGift、onGiftReceived - 结构化消息解析:
_sy_type: "room-msg"协议
新增 #
- 频道生命周期回调:
onJoinChannelSuccess、onLeaveChannel、onRejoinChannelSuccess - 连接与网络:
onConnectionStateChanged、onNetworkQuality、onRtcStats - Token 管理:
onTokenPrivilegeWillExpire、onRequestToken、renewToken() - 音频状态:
onLocalAudioStateChanged、onRemoteAudioStateChanged、onUserMuteAudio、onAudioRoutingChanged、onAudioPublishStateChanged、onAudioSubscribeStateChanged - 视频状态:
onLocalVideoStateChanged、onRemoteVideoStateChanged、onFirstRemoteVideoDecoded、onFirstRemoteVideoFrame、onVideoSizeChanged - 数据流:
createDataStream、sendStreamMessage、onStreamMessage、onStreamMessageError - 事件处理器:新增
SyRtcEventHandler回调类 +events广播流双模式
迁移指南 #
业务逻辑(礼物、公告、管理员、麦位申请等)请通过 sendChannelMessage 自定义 JSON 协议实现。
1.5.0 #
新功能 #
- 房间管理:新增
updateRoomInfo、setRoomNotice、setRoomManager方法和对应事件回调 - 麦位管理:新增完整麦位流程 —
takeSeat、leaveSeat、requestSeat、handleSeatRequest、inviteToSeat、handleSeatInvitation、kickFromSeat、lockSeat/unlockSeat、muteSeat/unmuteSeat - 用户管理:新增
kickUser、muteUser、banUser方法和onUserKicked、onUserMuted、onUserBanned事件 - 房间聊天:新增
sendRoomMessage(支持 text/emoji/image/system/custom 类型)和onRoomMessage事件 - 礼物系统:新增
sendGift方法和onGiftReceived事件 - 结构化房间消息:SDK 内部自动解析
channel-message中的_sy_type: "room-msg"协议,分发到对应的事件流
升级说明 #
- Flutter:
sy_rtc_flutter_sdk: ^1.5.0 - Android:
com.sy.rtc:sy-rtc-android-sdk:1.5.0 - iOS:
pod 'SyRtcSDK', '~> 1.5.0'或 SPM tagv1.5.0
1.4.1 #
修复 #
- iOS muteLocalAudio:修复 Flutter 内嵌 iOS 端 muteLocalAudio 未实际控制音轨的问题
- 麦位同步:新用户加入房间后主动请求现有用户的麦位状态,确保看到正确的麦位信息
- 类型安全:修复频道消息中 seatIndex 可能因 JSON double/int 类型不匹配导致崩溃的问题
- Demo 地址:所有 demo 和 SDK 默认地址改回 IP 直连(域名备案进行中)
升级说明 #
- Flutter:
sy_rtc_flutter_sdk: ^1.4.1 - Android:
com.sy.rtc:sy-rtc-android-sdk:1.4.1 - iOS:
pod 'SyRtcSDK', '~> 1.4.1'或 SPM tagv1.4.1
1.4.0 #
新功能 #
- 频道消息:新增
sendChannelMessage(message)方法和onChannelMessage事件,支持向频道内所有用户广播自定义消息(JSON 格式),可用于麦位同步、自定义信令等场景 - 在线人数修复:修复后加入房间的用户无法看到已有用户的问题(SDK 收到
user-list时现在会正确触发onUserJoined)
改进 #
- Flutter Example:麦位状态通过频道消息实现跨用户实时同步(上麦/下麦/静音/退出)
- Demo 地址:所有 demo 中的 API/信令地址改为域名(
https://syrtcapi.shengyuchenyao.cn)
升级说明 #
- Flutter:
sy_rtc_flutter_sdk: ^1.4.0 - Android:
com.sy.rtc:sy-rtc-android-sdk:1.4.0 - iOS:
pod 'SyRtcSDK', '~> 1.4.0'或 SPM tagv1.4.0
1.3.1 #
Fixes #
- Fix: Android crash on init due to missing
BLUETOOTH_CONNECTpermission on Android 12+ (asynchronousBluetoothHeadset.getConnectedDevices()ininitializeAudioDevices) - Fix: Android release build crash due to R8/ProGuard stripping
org.webrtc.*JNI classes (added consumer ProGuard rules) - Fix: Improved error handling in Android native plugin with
try-catch(Throwable)to prevent unhandled native crashes - Improvement: iOS native demo now has a complete Xcode project with programmatic UI
- Improvement: Android native demo updated to use local SDK AAR with Bluetooth permissions
1.3.0 #
语音功能修复与三端版本统一 #
- 版本:Flutter / Android / iOS 三端统一为 1.3.0;Flutter 插件内
android/build.gradle、ios/sy_rtc_flutter_sdk.podspec已同步为 1.3.0,Android 依赖为sy-rtc-android-sdk:v1.3.0。 - 语音相关修复与优化:
- Android:
enableLocalAudio/muteLocalAudio仅控制 WebRTClocalAudioTrack,不再误操作AudioRecord;enableAudio/disableAudio改为控制localAudioTrack,与语音推流一致;join()增加 channelId/uid/token 空校验并回调onError。 - iOS:
muteLocalAudio实际生效(localAudioTrack?.isEnabled = !muted);enableLocalAudio同时设置localAudioTrack?.isEnabled;enableAudio/disableAudio同步设置localAudioTrack;join()增加参数空校验并回调onError(1000, ...)。 - Flutter:事件处理
_handleMethodCall增加 try/catch,解析异常时推送SyErrorEvent并回调onError,避免崩溃;补全 default 分支与返回值。
- Android:
- 发布:各 SDK 与 Flutter 示例版本已更新为 1.3.0;建议先提交代码再打 tag 发版。
升级说明 #
- Flutter:
sy_rtc_flutter_sdk: ^1.3.0(或path使用本地)。 - Android:
com.github.carlcy:sy-rtc-android-sdk:v1.3.0。 - iOS:
pod 'SyRtcSDK', '~> 1.3.0'或 SPM 选择 1.3.0。
1.2.0 #
版本统一与示例完善 #
- 版本:Flutter / Android / iOS SDK 及示例统一为 1.2.0。
- Flutter 示例:
- 新增配置页:API 基础 URL、信令 URL、AppId、可选 JWT。
- 新增 Token 拉取:通过
POST /api/rtc/token获取 RTC Token(需配置 JWT)。 - 主流程:保存并初始化 → 拉取 Token / 手动输入 → 加入/离开频道、静音、直播控制。
- 示例版本号:
1.2.0+0;README 补充 Android/iOS 打包与 NDK 问题说明。
- Android 示例构建:AGP 8.3、Gradle 8.7,满足 Flutter 最低要求;若 NDK 报错请按 README 处理。
- iOS 构建:
flutter build ios --no-codesign与flutter run已验证通过(建议先flutter clean)。 - 发布:各 SDK 与 Demo 中引用版本均已更新为 1.2.0,并更新版本说明与发布指南。
升级说明 #
- 更新 Flutter 依赖:
sy_rtc_flutter_sdk: ^1.2.0(或path: ../使用本地)。 - 更新 Android:
com.github.carlcy:sy-rtc-android-sdk:v1.2.0。 - 更新 iOS:
pod 'SyRtcSDK', '~> 1.2.0'或 SPM 选择 1.2.0。
1.0.6 #
重大更新 #
- ✅ RTMP服务器集成:完整的RTMP服务器部署和鉴权机制
- ✅ 自动生成推流地址:SDK支持自动生成RTMP推流地址,无需手动配置
- ✅ 完整鉴权机制:推流和播放双重鉴权,确保不同AppId的流完全隔离
- ✅ 后端集成文档:完整的后端集成指南和API参考文档
更新内容 #
Flutter SDK
- ✅ 支持
startRtmpStreamWithTranscoding传入空字符串,自动使用后端生成的RTMP地址 - ✅ 更新文档说明,明确Token获取流程
Android SDK
- ✅ 支持
startRtmpStreamWithTranscoding传入空字符串,自动使用后端生成的RTMP地址 - ✅ 版本号更新至 1.0.6
iOS SDK
- ✅ 支持
startRtmpStreamWithTranscoding传入空字符串,自动使用后端生成的RTMP地址 - ✅ 版本号更新至 1.0.6
用户端前端
- ✅ 文档更新:添加后端集成指南和API参考文档标签页
- ✅ 导航栏修复:首页和文档不再同时高亮
- ✅ 文档完善:添加完整的SDK API文档,直播和语聊分开
后端服务
- ✅ rtc-service:新增RTMP鉴权服务(RtmpAuthController、RtmpAuthService、RtmpUrlService)
- ✅ rtc-service:新增获取推流和播放地址接口(
GET /api/rtc/live/stream-urls) - ✅ rtc-service:自动生成RTMP地址功能(如果rtmpUrls为空)
- ✅ RTMP服务器:完整的SRS配置,支持HTTP回调鉴权
- ✅ RTMP服务器:流名称格式为
{appId}_{channelId},确保不同AppId的流隔离
重要提示 #
- RTMP服务器:已集成到部署脚本,自动部署SRS RTMP服务器
- 鉴权机制:推流和播放都需要通过鉴权,确保安全性
- Token获取:SDK的Token必须从你的后端服务器获取,不能直接在前端调用SY RTC的API
- 后端集成:请参考
BACKEND_INTEGRATION_GUIDE.md和API_REFERENCE.md完成后端集成
升级说明 #
- SDK升级:更新Flutter/Android/iOS SDK到1.0.6版本
- 后端部署:重新部署
rtc-service模块(包含RTMP鉴权功能) - RTMP服务器:运行
./deploy.sh自动部署RTMP服务器 - 文档更新:查看
BACKEND_INTEGRATION_GUIDE.md了解完整的后端集成流程
1.0.5 #
重大更新 #
- ✅ 统一版本号:Flutter/Android/iOS 三端版本统一为 1.0.5
- ✅ 直播控制UI:Flutter SDK 新增完整的直播控制可视化界面(开播/停播/切换布局/实时调整转码配置)
- ✅ 用户端前端优化:RTC 和直播功能分离为独立模块,新增房间管理和直播任务管理页面
- ✅ 管理端前端优化:RTC 和直播管理分离,新增消耗统计页面(房间数、用户数、时长消耗)
- ✅ 后端API完善:新增 RTC 和直播消耗统计接口,支持详细的消费数据查询
更新内容 #
Flutter SDK
- ✅ 新增
LiveControlPage可视化直播控制页面 - ✅ 修复
SyLiveTranscoding和SyTranscodingUser导入冲突问题 - ✅ 完善直播推流功能,支持动态切换布局和转码配置
Android SDK
- ✅ 版本号更新至 1.0.5
- ✅ 完善示例应用,支持基本 RTC 功能演示
iOS SDK
- ✅ 版本号更新至 1.0.5
- ✅ 完善示例应用,支持基本 RTC 功能演示
- ✅ 与 Flutter SDK 同步更新
用户端前端
- ✅ RTC 房间管理:新增房间列表、人数统计、消耗时长统计页面
- ✅ 直播任务管理:新增直播任务列表、状态查询、停止控制页面
- ✅ 文档完善:更新 Guide 页面,添加 RTC 和直播对比说明、常见问题
- ✅ 修复 TypeScript 编译错误
管理端前端
- ✅ RTC 消耗统计:新增总房间数、活跃房间、总用户数、总消耗时长统计
- ✅ 直播消耗统计:新增总直播任务数、运行中任务、总用户数、总消耗时长统计
- ✅ 直播任务管理:支持强制停流、封禁/解封、布局切换功能
- ✅ 菜单结构优化:RTC 和直播功能分离为独立模块
后端服务
- ✅ 新增
CallLog实体和CallLogMapper(用于 RTC 消耗统计) - ✅ 新增
RtcConsumptionController:提供 RTC 消耗统计和详情列表接口 - ✅ 新增
LiveConsumptionController:提供直播消耗统计和详情列表接口
重要提示 #
- 本次更新统一了三端 SDK 版本号,建议同时更新 Flutter/Android/iOS SDK
- 用户端和管理端前端已重新部署,包含所有新功能
- 后端 API 已更新,支持详细的消耗统计查询
0.1.1 #
更新内容 #
- ✅ iOS:Flutter 插件内置 iOS 端实现并通过 CocoaPods 自动集成(无需手动配置 SPM/Pod 依赖,最低 iOS 13.0)
- ✅ Flutter:
init支持传入signalingUrl(用于配置/ws/signaling) - ✅ 多人语聊:信令协议增强(
user-list+toUid),适配多人 Mesh 连接模型 - ✅ 文档:同步更新安装/发布说明,避免旧文档导致集成失败
0.1.2 #
更新内容 #
- ✅ 事件通道:兼容
sy_rtc_flutter_sdk/events,确保 Android/iOS 原生事件都能被 Dart 端接收 - ✅ 错误回调:Android/iOS 原生错误统一透传到
engine.onError - ✅ RTMP:未集成推流库时改为显式错误回调(避免“看似成功实际失败”)
0.1.3 #
更新内容 #
- ✅ Flutter 插件:补齐 Dart 层大量 MethodChannel 能力在 Android/iOS 原生侧的实现,消除 MissingPlugin
- ✅ iOS:修复内置 SyRtcSDK 编译问题,示例工程可
flutter build ios --no-codesign通过 - ✅ WebRTC 直播旁路:新增服务端 egress 组件(
rtc-egress-service)与后端控制接口(/api/rtc/egress/*)