SY RTC Flutter SDK

pub package

当前版本: 3.2.1

Flutter 实时音视频插件。Android / iOS 原生能力分别来自 sy-rtc-android-sdk 与 sy-rtc-ios-sdk。

客户工程只在 pubspec.yaml 里写包名和版本,然后 flutter pub get。不要下载 zip、不要把 AAR / framework 拷进工程。

客户依赖(直接复制)

dependencies:
  sy_rtc_flutter_sdk: ^3.2.1

包还没出现在 pub.dev 时,用已经打好的 tag(不要写 ref: main):

dependencies:
  sy_rtc_flutter_sdk:
    git:
      url: https://github.com/carlcy/sy-rtc-flutter-sdk.git
      ref: v3.2.1

本仓库 example/pubspec.yaml 里的 path: ../ 只给插件作者本地联调,不是客户接入方式。

然后执行:

flutter pub get

快速开始

流程与即构 Flutter 快速开始相同:加依赖 → 配权限 → 初始化 → 向你的服务器要 Token → 进频道 → 渲染画面。

1. 添加依赖

见上一节。最低要求:Flutter >= 3.3.0,Dart >= 3.6.2,Android minSdk 21,iOS 13.0。

2. 平台配置

Android

插件用 api 传递这份坐标(须先在 JitPack 发布 tag v3.2.0):

implementation 'com.github.carlcy:sy-rtc-android-sdk:v3.2.0'

业务模块不用再写一遍,但必须能解析 JitPack。在 android/build.gradle:

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

如果工程把仓库收进了 android/settings.gradle 的 dependencyResolutionManagement,把同一条 maven { url 'https://jitpack.io' } 加到那里。

权限(插件 Manifest 会合并进宿主;麦克风和摄像头仍要在运行时申请):

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

运行时申请可以用 permission_handler:

await Permission.microphone.request();
await Permission.camera.request();

iOS

在 ios/Runner/Info.plist 增加用途说明,否则系统不会弹出授权:

<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风权限进行语音通话</string>
<key>NSCameraUsageDescription</key>
<string>需要摄像头权限进行视频通话</string>

pod install 由 Flutter 在构建时执行,最低 iOS 13.0。

iOS 原生 SDK: 插件依赖 CocoaPods trunk 上的 SyRtcSDK 3.2.1(源码仓库 https://github.com/carlcy/sy-rtc-ios-sdk,tag v3.2.1,也有 SPM 的 Package.swift),WebRTC 由 SyRtcSDK 传递(WebRTC-SDK 125.6422.07)。插件不再内置 iOS 源码,客户无需自己写 pod 'SyRtcSDK'。

Android 已经能按坐标拉取,所以 example 里的本地 AAR / flatDir 已去掉。

客户要写的那一行是:

sy_rtc_flutter_sdk: ^3.2.1

发布前:

  1. 先发布原生 Android tag,确认 JitPack 能解析 com.github.carlcy:sy-rtc-android-sdk:v3.2.0(插件当前用这个坐标),再发 Flutter 包。
  2. 先把 iOS SDK 推上 trunk(sy-rtc-ios-sdk 的发布说明:pod lib lint SyRtcSDK.podspec → pod trunk push SyRtcSDK.podspec --allow-warnings),等 CDN 能解析后再改 podspec 里的 s.dependency 'SyRtcSDK', 'x.y.z'。
  3. 对齐版本号:pubspec.yaml、CHANGELOG.md、android/build.gradle 的 version、ios/sy_rtc_flutter_sdk.podspec 的 s.version。CHANGELOG 最上一项必须是这个版本。
  4. 在仓库根目录检查:
dart pub publish --dry-run

没有 error 再发布。首次需要:

dart pub login
dart pub publish
  1. 发布成功后打 tag,供 git 依赖使用(tag 与 pubspec 版本一致,带 v 前缀):
git tag v3.2.1
git push origin v3.2.1

dart pub publish 会带上 example/。example 继续使用 path: ../,这是 pub.dev 对插件示例的常规写法。

常见问题

初始化或进房失败。 核对 AppId、Token 是否过期、麦克风/摄像头是否已授权。Token 必须来自业务服务器。

Android 构建找不到 com.github.carlcy:sy-rtc-android-sdk。 宿主仓库列表里没有 https://jitpack.io。不要改回本地 AAR。

iOS 模拟器黑屏。 模拟器通常没有摄像头。用真机看 SyRtcVideoView。

没有声音。 依次 enableLocalAudio(true)、muteLocalAudio(false)、setClientRole('host')。

许可证

MIT License