# zego_express_flutter_plugin
**Repository Path**: ahyang_1/zego_express_flutter_plugin
## Basic Information
- **Project Name**: zego_express_flutter_plugin
- **Description**: zego2.13改进版
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-09-17
- **Last Updated**: 2022-09-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# zego_express_engine [](https://pub.dartlang.org/packages/zego_express_engine)
[English](https://github.com/zegoim/zego-express-flutter-sdk/blob/main/README.md) | [中文](https://github.com/zegoim/zego-express-flutter-sdk/blob/main/README_zh.md)
即构科技 (ZEGO) 极速音视频 Flutter SDK 是一个基于 [ZegoExpressEngine](https://doc-zh.zego.im/zh/693.html) 原生 Android/iOS SDK 的 Flutter Plugin Wrapper,提供视频直播以及实时音视频服务。🚀 仅需 4 行代码,30 分钟即可轻松接入。
了解更多解决方案:[https://www.zego.im](https://www.zego.im)
> 🔥 示例 Demo
1. **[https://github.com/zegoim/zego-express-example-topics-flutter](https://github.com/zegoim/zego-express-example-topics-flutter)**
🧬 一个展示 SDK 推拉流以及各种丰富功能的示例专题 Demo(包括 `快速开始` Demo 在内),持续更新中。
2. **[https://github.com/zegoim/zego-express-flutter-sdk/tree/main/example](https://github.com/zegoim/zego-express-flutter-sdk/tree/main/example)**
🧪 一个简易的推拉流示例 Demo,内置于此仓库的 `example` 目录下,展示了 SDK 最基础的推拉流功能。
3. **[https://github.com/zegoim/zego-express-example-screen-capture-flutter](https://github.com/zegoim/zego-express-example-screen-capture-flutter)**
📲 一个实现了 Android/iOS 屏幕采集并推流直播的示例 Demo。
## 1️⃣ 下载并安装 Flutter
### **[Flutter Get Started](https://flutter.dev/docs/get-started/install)**
## 2️⃣ 配置 Flutter 开发环境
- Android Studio: `Preferences` -> `Plugins`,搜索 `Flutter` 插件进行下载,在插件中配置第一步下载好的 Flutter SDK 路径。
- VS Code: 在应用商店中搜索 `Flutter` 扩展并下载。
以上任一开发环境配置好 Flutter 环境之后,命令行执行 `flutter doctor`,根据提示内容补全相关未下载的依赖项。
## 3️⃣ 申请 ZEGO AppID
登录 [ZEGO 官网](https://www.zego.im) 注册账号,根据自身实际业务需求选择场景,获取 AppID 与 AppSign,用于初始化 SDK。
## 4️⃣ 导入 `zego_express_engine`
打开工程中的 `pubspec.yaml`,添加 `zego_express_engine` 依赖:
- ### 以 `pub` 形式依赖(推荐)
```yaml
dependencies:
flutter:
sdk: flutter
zego_express_engine: ^2.7.1
```
- ### 以 git 形式依赖
```yaml
dependencies:
flutter:
sdk: flutter
zego_express_engine:
git:
url: git://github.com/zegoim/zego-express-flutter-sdk.git
ref: main
```
保存文件后,执行 `flutter pub get`
## 5️⃣ 添加设备权限
### Android
打开 `app/src/main/AndroidManifest.xml` 文件,添加如下内容:
```xml
```
> 如果打包 release apk 时 (`flutter build apk`) 开启了混淆功能 (Flutter 新版本默认开启),需要为 ZEGO 相关的类配置防止混淆,参考 [常见问题-4](#4-android-flutter-升级至-v110-或以上时android-release-下出现-noclassdeffounderror-导致-crash)
### iOS
选择项目 `TARGETS` -> `Info` -> `Custom iOS Target Properties`

点击 `+` 添加按钮,添加摄像头和麦克风权限。
1. `Privacy - Camera Usage Description`
2. `Privacy - Microphone Usage Description`
添加权限完成后如图所示:

> 如果需要使用 Platform View,并且 Flutter 版本小于 1.22,iOS 端还需额外添加一行描述,参考 [常见问题-1](#1-ios-使用-platform-view-时报错verbose-2platform_view_layercc28-trying-to-embed-a-platform-view-but-the-paintcontext-does-not-support-embedding)
## 6️⃣ 初始化 SDK
```Dart
import 'package:flutter/material.dart';
import 'package:zego_express_engine/zego_express_engine.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State {
String version = 'Unknown';
// Apply appID and appSign from ZEGO
final int appID = 1234567890;
final String appSign = 'abcdefghijklmnopqrstuvwzyv123456789abcdefghijklmnopqrstuvwzyz123';
// Specify test environment and app scenario
final bool isTestEnv = true;
final ZegoScenario scenario = ZegoScenario.General;
@override
void initState() {
super.initState();
// Get SDK Version
ZegoExpressEngine.getVersion().then((value) {
setState(() => version = value);
});
// Create ZegoExpressEngine (Init SDK)
ZegoExpressEngine.createEngine(appID, appSign, isTestEnv, scenario);
ZegoEngineProfile profile = ZegoEngineProfile(appID, appSign, scenario, enablePlatformView);
ZegoExpressEngine.createEngineWithProfile(profile);
}
@override
Widget build(BuildContext context) {
return MaterialApp(home: Scaffold(
appBar: AppBar(title: const Text('ZegoExpressEngine')),
body: Center(child: Text('Version: $version')),
));
}
}
```
🔮 更多功能和使用方法请参考 **[示例专题 Demo](https://github.com/zegoim/zego-express-example-topics-flutter)** 和 API 文档。
## 7️⃣ API 文档
[ZegoExpressEngine API Reference](https://pub.dev/documentation/zego_express_engine/latest/zego_express_engine/ZegoExpressEngine-class.html)
## 8️⃣ 常见问题
### 1. iOS: 使用 Platform View 时报错:`[VERBOSE-2:platform_view_layer.cc(28)] Trying to embed a platform view but the PaintContext does not support embedding`
> Flutter 1.22 及以后的版本不再需要此设置。
打开需要使用 Platform View 的 iOS 原生工程 (Runner.xcworkspace) ,在 `Info.plist` 中添加字段 `io.flutter.embedded_views_preview`,其值为 `YES`。

### 2. iOS: `fatal error: lipo: -extract armv7 specified but fat file: [...] does not contain that architecture`
通常在切换 iOS 设备时出现,可通过删除 `flutter-project-path/build/` 和 `flutter-project-path/ios/DerivedData/` 目录解决。(找不到 `DerivedData` 文件夹的话,请查找 `/Users/your-user-name/Library/Developer/Xcode/DerivedData/`)
### 3. iOS: 编译时报错 `CDN: trunk URL couldn't be downloaded` 或者 `CDN: trunk Repo update failed`
打开 Terminal 终端 `cd` 进项目根目录下的 `ios` 文件夹(`Podfile` 文件所在的目录),执行 `pod repo update`。
通常是国内网络不畅导致,建议开启代理。请参考 [iOS CocoaPods 常见问题](https://doc-zh.zego.im/zh/1253.html)
### 4. Android: Flutter 升级至 v1.10 或以上时,Android release 下出现 `NoClassDefFoundError` 导致 Crash
Flutter 在 1.10 或以上版本默认开启了混淆,请在项目中 `app/proguard-rules.pro` 为 SDK 添加 -keep 类的配置防止混淆。
```java
-keep class **.zego.**{*;}
```
### 5. Android: 频繁创建销毁 `TextureRenderer` 时,可能出现以下 Crash
```text
OpenGLRenderer E [SurfaceTexture-0-4944-46] updateTexImage: SurfaceTexture is abandoned!
flutter E [ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(39)] java.lang.RuntimeException: Error during updateTexImage (see logcat for details)
```
此问题是 Flutter Engine 内部在调用 SurfaceTexture 的 updateTexImage() 与 release() 时线程不安全引起的,并已经在 Flutter `1.24-candidate.2` 版本修复,具体详见:[https://github.com/flutter/engine/pull/21777](https://github.com/flutter/engine/pull/21777)
### 6. 运行 pub get 命令失败,提示 Dart 版本过低
```text
Running "flutter pub get" in zego-express-flutter-sdk...
The current Dart SDK version is 2.10.4.
Because zego_express_engine requires SDK version >=2.12.0 <3.0.0, version solving failed.
pub get failed (1; Because zego_express_engine requires SDK version >=2.12.0 <3.0.0, version solving failed.)
```
此问题是由于 Zego Flutter SDK 从 2.5.0 开始,新增了空安全支持的特性。因此开发者在使用 2.5.0 以上版本的 Flutter RTC SDK 时,必须将 Flutter 版本升级至 2.0 (对应的 Dart 版本为 2.12.0) 或以上。
## 9️⃣ How to contribute
🎉 We welcome contributions, information on how to get started can be found at our [contributor guide](CONTRIBUTING.md).