master
小赖 4 years ago
commit cc34f13777

@ -0,0 +1,5 @@
## 0.1.0
- feat: 主体功能已完成
## 0.0.1
- feat: Android端能够推流; iOS端能够推流

@ -0,0 +1,14 @@
Copyright (C) 2020 yohom
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.

@ -0,0 +1,150 @@
![Logo](https://github.com/fluttify-project/fluttify-core-example/blob/develop/other/Logo-Landscape.png?raw=true)
# 腾讯直播 Flutter插件
[![pub package](https://img.shields.io/pub/v/tencent_live_fluttify.svg)](https://pub.Flutter-io.cn/packages/tencent_live_fluttify)
**专业版为付费插件, 如有需要请联系qq 382146139**
**专业版为付费插件, 如有需要请联系qq 382146139**
**专业版为付费插件, 如有需要请联系qq 382146139**
# Fluttify系列插件
| 名称 | 描述 | 仓库 |
|:-----:|:-----:|:-----:|
| [高德地图](https://github.com/fluttify-project/amap_map_fluttify) | 高德地图地图组件, 提供地图控件 | [![pub package](https://img.shields.io/pub/v/amap_map_fluttify.svg)](https://pub.Flutter-io.cn/packages/amap_map_fluttify) |
| [高德定位](https://github.com/fluttify-project/amap_location_fluttify) | 高德地图定位组件, 提供独立的定位功能 | [![pub package](https://img.shields.io/pub/v/amap_location_fluttify.svg)](https://pub.Flutter-io.cn/packages/amap_location_fluttify) |
| [高德搜索](https://github.com/fluttify-project/amap_search_fluttify) | 高德地图搜索组件, 提供poi搜索等功能 | [![pub package](https://img.shields.io/pub/v/amap_search_fluttify.svg)](https://pub.Flutter-io.cn/packages/amap_search_fluttify) |
| [百度地图](https://github.com/fluttify-project/bmap_map_fluttify) | 百度地图, 包含了地图控件, 定位以及搜索poi等功能 | [![pub package](https://img.shields.io/pub/v/bmap_map_fluttify.svg)](https://pub.Flutter-io.cn/packages/bmap_map_fluttify) |
| [百度人脸识别](https://github.com/fluttify-project/baidu_face_flutter) | 百度人脸识别, 提供活体检测等功能 | [![pub package](https://img.shields.io/pub/v/baidu_face_flutter.svg)](https://pub.Flutter-io.cn/packages/baidu_face_flutter) |
| [网易直播](https://github.com/fluttify-project/netease_live_fluttify) | 网易直播推流组件 | [![pub package](https://img.shields.io/pub/v/netease_live_fluttify.svg)](https://pub.Flutter-io.cn/packages/netease_live_fluttify) |
| [网易云信](https://github.com/fluttify-project/nim_fluttify) | 网易云信 IM组件 | [![pub package](https://img.shields.io/pub/v/nim_fluttify.svg)](https://pub.Flutter-io.cn/packages/nim_fluttify) |
| [腾讯直播](https://github.com/fluttify-project/tencent_live_fluttify) | 腾讯直播, 包含推流组件和播放组件 | [![pub package](https://img.shields.io/pub/v/tencent_live_fluttify.svg)](https://pub.Flutter-io.cn/packages/tencent_live_fluttify) |
| [腾讯IM](https://github.com/fluttify-project/tim_fluttify) | 腾讯IM组件 | [![pub package](https://img.shields.io/pub/v/tim_fluttify.svg)](https://pub.Flutter-io.cn/packages/tim_fluttify) |
| [腾讯地图](https://github.com/fluttify-project/tmap_map_fluttify) | 腾讯地图组件 | [![pub package](https://img.shields.io/pub/v/tmap_map_fluttify.svg)](https://pub.Flutter-io.cn/packages/tmap_map_fluttify) |
| [讯飞语音合成](https://github.com/fluttify-project/xftts_fluttify) | 腾讯语言合成组件, 提供文字转语言功能 | [![pub package](https://img.shields.io/pub/v/xftts_fluttify.svg)](https://pub.flutter-io.cn/packages/xftts_fluttify) |
| [极光统计](https://github.com/fluttify-project/janalytics_fluttify) | 极光统计组件, 提供异常上报等功能 | [![pub package](https://img.shields.io/pub/v/janalytics_fluttify.svg)](https://pub.flutter-io.cn/packages/janalytics_fluttify) |
| [阿里云RTC](https://github.com/fluttify-project/ali_rtc_fluttify) | 阿里云实时音视频 | [![pub package](https://img.shields.io/pub/v/ali_rtc_fluttify.svg)](https://pub.flutter-io.cn/packages/ali_rtc_fluttify) |
| [环信](https://github.com/fluttify-project/easemob_im_fluttify) | 环信IM | [![pub package](https://img.shields.io/pub/v/easemob_im_fluttify.svg)](https://pub.flutter-io.cn/packages/easemob_im_fluttify) |
| [未完待续...](https://github.com/fluttify-project) | 如有其它需求, 请联系qq 382146139 | ![fluttify](https://img.shields.io/badge/fluttify-welcom-green) |
## 依赖
```yaml
dependencies:
flutter:
sdk: flutter
tencent_live_fluttify: ^x.x.x
```
## 配置
### Android
1. 如果你的AndroidManifest.xml的application标签配置了`android:label`属性, 那么编译时会出错, 报错信息为:
```text
/Users/xxx/AndroidManifest.xml:10:9-41 Error:
Attribute application@label value=(new_project_test) from AndroidManifest.xml:10:9-41
is also present at [com.tencent.liteavsdk:LiteAVSDK_Smart:7.2.8927] AndroidManifest.xml:30:9-41 value=(@string/app_name).
Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:8:5-46:19 to override.
FAILURE: Build failed with an exception.
```
你需要做的是按照错误提示, 添加`tools:replace="android:label"`到application标签下, 注意`tools:`命名空间需要另外导入.
完整的修改后的AndroidManifest.xml示例:
```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" <!--需要添加的代码-->
package="xxx">
<application
android:name="io.flutter.app.FlutterApplication"
android:label="xxx"
tools:replace="android:label" <!--需要添加的代码-->
android:icon="@mipmap/ic_launcher">
...
</application>
</manifest>
```
### iOS
1. 推流需要摄像头和麦克风权限, 并且需要配置为UiKitView使能, 在Info.plist中添加:
```xml
<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风</string>
<key>NSCameraUsageDescription</key>
<string>需要相机</string>
<key>io.flutter.embedded_views_preview</key>
<string>YES</string>
```
2. 腾讯直播的pod比较大, 有198M, `pod install`时间比较久, 请耐心等待, `pod install --verbose`可以观察下载进度.
## 导入
```dart
import 'package:tencent_live_fluttify/tencent_live_fluttify.dart';
```
## 使用
参考[wiki](https://github.com/fluttify-project/tencent_live_fluttify/wiki).
## 社区
| QQ群 |
| :----------: |
| <img src="https://github.com/fluttify-project/fluttify-project/blob/master/resources/1593774713224_temp_qrcode_share_9993.png?raw=true" height="300"> |
## 社区版与专业版
| 推流 | 社区版 | 专业版 |
|:-----:|:-----:|:-----:|
| 预览 | ✅ | ✅ |
| 推流 | ✅ | ✅ |
| 暂停推流 | ✅ | ✅ |
| 停止推流 | ✅ | ✅ |
| 停止预览 | ✅ | ✅ |
| 切换前后摄像头 | ✅ | ✅ |
| 打开/关闭闪光灯 | ✅ | ✅ |
| 播放背景音乐 | ✅ | ✅ |
| 停止背景音乐 | ✅ | ✅ |
| 暂停背景音乐 | ✅ | ✅ |
| 恢复背景音乐 | ✅ | ✅ |
| 麦克风音量大小 | ✅ | ✅ |
| 背景音乐音量大小 | ✅ | ✅ |
| 背景音乐音调高低 | ✅ | ✅ |
| 事件处理 | ✅ | ✅ |
| 设置观众看到的画面清晰度 | ☑️ | ✅ |
| 美颜 | ☑️ | ✅ |
| 滤镜 | ☑️ | ✅ |
| 调整摄像头的焦距 | ☑️ | ✅ |
| 设置曝光比例 | ☑️ | ✅ |
| 观众端镜像效果 | ☑️ | ✅ |
| 横屏推流 | ☑️ | ✅ |
| 隐私模式(垫片推流) | ☑️ | ✅ |
| 设置混音效果 | ☑️ | ✅ |
| 设置变调效果 | ☑️ | ✅ |
| 设置 Logo 水印 | ☑️ | ✅ |
| 开始本地录制 | ☑️ | ✅ |
| 停止本地录制 | ☑️ | ✅ |
| 发送 SEI 消息 | ☑️ | ✅ |
| 拉流 | 社区版 | 专业版 |
|:-----:|:-----:|:-----:|
| 播放 | ✅ | ✅ |
| 恢复播放 | ✅ | ✅ |
| 恢复直播 | ✅ | ✅ |
| 是否在播放中 | ✅ | ✅ |
| 暂停播放 | ✅ | ✅ |
| 停止播放 | ✅ | ✅ |
| 事件处理 | ✅ | ✅ |
| 清晰度无缝切换 | ☑️ | ✅ |
| 画面调整 | ☑️ | ✅ |
## LICENSE
> Copyright (C) 2020 yohom
>
> This program is free software: you can redistribute it and/or modify
> it under the terms of the GNU General Public License as published by
> the Free Software Foundation, either version 3 of the License, or
> (at your option) any later version.
>
> This program is distributed in the hope that it will be useful,
> but WITHOUT ANY WARRANTY; without even the implied warranty of
> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> GNU General Public License for more details.
>
> You should have received a copy of the GNU General Public License
> along with this program. If not, see <https://www.gnu.org/licenses/>.

@ -0,0 +1,8 @@
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures

@ -0,0 +1,75 @@
group 'com.fluttify.tencent_live_fluttify'
version '1.0-SNAPSHOT'
buildscript {
repositories {
google()
jcenter()
maven { url 'http://download.flutter.io' }
maven { url "https://oss.sonatype.org/content/groups/public" }
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
maven { url "https://dl.bintray.com/aweme-open-sdk-team/public" }
maven { url 'http://developer.huawei.com/repo/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}
rootProject.allprojects {
repositories {
google()
jcenter()
maven { url 'http://download.flutter.io' }
maven { url "https://oss.sonatype.org/content/groups/public" }
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
maven { url "https://dl.bintray.com/aweme-open-sdk-team/public" }
maven { url 'http://developer.huawei.com/repo/' }
}
}
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
main.jniLibs.srcDir 'libs'
}
defaultConfig {
minSdkVersion 16
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
lintOptions {
disable 'InvalidPackage'
}
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
packagingOptions {
merge 'res/values/values.xml'
merge 'AndroidManifest.xml'
merge 'R.txt'
merge 'classes.jar'
merge 'proguard.txt'
}
buildTypes {
release {
consumerProguardFiles "proguard-rules.pro"
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
compileOnly rootProject.findProject(":foundation_fluttify")
// flutter plugin dependency
// sdk dependency
api 'com.tencent.liteav:LiteAVSDK_Professional:7.2.8927'
}

@ -0,0 +1,4 @@
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-all.zip

@ -0,0 +1 @@
-keep class com.tencent.** { *; }

@ -0,0 +1 @@
rootProject.name = 'tencent_live_fluttify'

@ -0,0 +1,3 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.fluttify.tencent_live_fluttify">
</manifest>

@ -0,0 +1,828 @@
//////////////////////////////////////////////////////////
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
//////////////////////////////////////////////////////////
package com.fluttify.tencent_live_fluttify;
import android.content.Context;
import android.view.View;
import android.util.Log;
import android.app.Activity;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import io.flutter.plugin.common.StandardMessageCodec;
import io.flutter.plugin.common.StandardMethodCodec;
import io.flutter.plugin.platform.PlatformView;
import io.flutter.plugin.platform.PlatformViewFactory;
import me.yohom.foundation_fluttify.core.FluttifyMessageCodec;
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getHEAP;
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getEnableLog;
@SuppressWarnings("ALL")
class TXCloudVideoViewFactory extends PlatformViewFactory {
TXCloudVideoViewFactory(BinaryMessenger messenger, Activity activity) {
super(StandardMessageCodec.INSTANCE);
this.messenger = messenger;
this.activity = activity;
new MethodChannel(messenger, "com.fluttify/tencent_live_fluttify/com_tencent_rtmp_ui_TXCloudVideoView", new StandardMethodCodec(new FluttifyMessageCodec())).setMethodCallHandler((methodCall, methodResult) -> {
Map<String, Object> args = (Map<String, Object>) methodCall.arguments;
TencentLiveFluttifyPlugin.Handler handler = handlerMap.get(methodCall.method);
if (handler != null) {
try {
handler.call(args, methodResult);
} catch (Exception e) {
e.printStackTrace();
methodResult.error(e.getMessage(), null, null);
}
} else {
methodResult.notImplemented();
}
});
}
private BinaryMessenger messenger;
private Activity activity;
private final Map<String, TencentLiveFluttifyPlugin.Handler> handlerMap = new HashMap<String, TencentLiveFluttifyPlugin.Handler>() {{
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::onResume", (__args__, __methodResult__) -> {
// args
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::onResume(" + "" + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.onResume();
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::onPause", (__args__, __methodResult__) -> {
// args
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::onPause(" + "" + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.onPause();
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::removeVideoView", (__args__, __methodResult__) -> {
// args
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::removeVideoView(" + "" + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.removeVideoView();
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::removeFocusIndicatorView", (__args__, __methodResult__) -> {
// args
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::removeFocusIndicatorView(" + "" + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.removeFocusIndicatorView();
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::onDestroy", (__args__, __methodResult__) -> {
// args
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::onDestroy(" + "" + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.onDestroy();
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::getSurfaceView", (__args__, __methodResult__) -> {
// args
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::getSurfaceView(" + "" + ")");
}
// invoke native method
android.view.SurfaceView __result__ = null;
try {
__result__ = __this__.getSurfaceView();
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::setRenderMode", (__args__, __methodResult__) -> {
// args
// ref arg
Number var1 = (Number) ((Map<String, Object>) __args__).get("var1");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::setRenderMode(" + var1 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.setRenderMode(var1.intValue());
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::setRenderRotation", (__args__, __methodResult__) -> {
// args
// ref arg
Number var1 = (Number) ((Map<String, Object>) __args__).get("var1");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::setRenderRotation(" + var1 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.setRenderRotation(var1.intValue());
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::clearLastFrame", (__args__, __methodResult__) -> {
// args
// ref arg
boolean var1 = (boolean) ((Map<String, Object>) __args__).get("var1");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::clearLastFrame(" + var1 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.clearLastFrame(var1);
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::onTouchFocus", (__args__, __methodResult__) -> {
// args
// ref arg
Number var1 = (Number) ((Map<String, Object>) __args__).get("var1");
// ref arg
Number var2 = (Number) ((Map<String, Object>) __args__).get("var2");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::onTouchFocus(" + var1 + var2 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.onTouchFocus(var1.intValue(), var2.intValue());
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::setMirror", (__args__, __methodResult__) -> {
// args
// ref arg
boolean var1 = (boolean) ((Map<String, Object>) __args__).get("var1");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::setMirror(" + var1 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.setMirror(var1);
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::disableLog", (__args__, __methodResult__) -> {
// args
// ref arg
boolean var1 = (boolean) ((Map<String, Object>) __args__).get("var1");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::disableLog(" + var1 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.disableLog(var1);
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::showLog", (__args__, __methodResult__) -> {
// args
// ref arg
boolean var1 = (boolean) ((Map<String, Object>) __args__).get("var1");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::showLog(" + var1 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.showLog(var1);
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::clearLog", (__args__, __methodResult__) -> {
// args
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::clearLog(" + "" + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.clearLog();
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::setLogText", (__args__, __methodResult__) -> {
// args
// ref arg
android.os.Bundle var1 = (android.os.Bundle) ((Map<String, Object>) __args__).get("var1");
// ref arg
android.os.Bundle var2 = (android.os.Bundle) ((Map<String, Object>) __args__).get("var2");
// ref arg
Number var3 = (Number) ((Map<String, Object>) __args__).get("var3");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::setLogText(" + var1 + var2 + var3 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.setLogText(var1, var2, var3.intValue());
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::updateVideoViewSize", (__args__, __methodResult__) -> {
// args
// ref arg
Number var1 = (Number) ((Map<String, Object>) __args__).get("var1");
// ref arg
Number var2 = (Number) ((Map<String, Object>) __args__).get("var2");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::updateVideoViewSize(" + var1 + var2 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.updateVideoViewSize(var1.intValue(), var2.intValue());
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::appendEventInfo", (__args__, __methodResult__) -> {
// args
// ref arg
String var1 = (String) ((Map<String, Object>) __args__).get("var1");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::appendEventInfo(" + var1 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.appendEventInfo(var1);
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::showVideoDebugLog", (__args__, __methodResult__) -> {
// args
// ref arg
Number var1 = (Number) ((Map<String, Object>) __args__).get("var1");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::showVideoDebugLog(" + var1 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.showVideoDebugLog(var1.intValue());
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::setLogMargin", (__args__, __methodResult__) -> {
// args
// ref arg
Number var1 = (Number) ((Map<String, Object>) __args__).get("var1");
// ref arg
Number var2 = (Number) ((Map<String, Object>) __args__).get("var2");
// ref arg
Number var3 = (Number) ((Map<String, Object>) __args__).get("var3");
// ref arg
Number var4 = (Number) ((Map<String, Object>) __args__).get("var4");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::setLogMargin(" + var1 + var2 + var3 + var4 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.setLogMargin(var1.floatValue(), var2.floatValue(), var3.floatValue(), var4.floatValue());
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::setLogMarginRatio", (__args__, __methodResult__) -> {
// args
// ref arg
Number var1 = (Number) ((Map<String, Object>) __args__).get("var1");
// ref arg
Number var2 = (Number) ((Map<String, Object>) __args__).get("var2");
// ref arg
Number var3 = (Number) ((Map<String, Object>) __args__).get("var3");
// ref arg
Number var4 = (Number) ((Map<String, Object>) __args__).get("var4");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::setLogMarginRatio(" + var1 + var2 + var3 + var4 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.setLogMarginRatio(var1.floatValue(), var2.floatValue(), var3.floatValue(), var4.floatValue());
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::getUserId", (__args__, __methodResult__) -> {
// args
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::getUserId(" + "" + ")");
}
// invoke native method
String __result__ = null;
try {
__result__ = __this__.getUserId();
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::setUserId", (__args__, __methodResult__) -> {
// args
// ref arg
String var1 = (String) ((Map<String, Object>) __args__).get("var1");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::setUserId(" + var1 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.setUserId(var1);
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::px2dip", (__args__, __methodResult__) -> {
// args
// ref arg
android.content.Context var0 = (android.content.Context) ((Map<String, Object>) __args__).get("var0");
// ref arg
Number var1 = (Number) ((Map<String, Object>) __args__).get("var1");
// ref
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView::px2dip(" + var0 + var1 + ")");
}
// invoke native method
Integer __result__ = null;
try {
__result__ = com.tencent.rtmp.ui.TXCloudVideoView.px2dip(var0, var1.floatValue());
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::stop", (__args__, __methodResult__) -> {
// args
// ref arg
boolean var1 = (boolean) ((Map<String, Object>) __args__).get("var1");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::stop(" + var1 + ")");
}
// invoke native method
Void __result__ = null;
try {
__this__.stop(var1);
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
// method
put("com.tencent.rtmp.ui.TXCloudVideoView::onTouch", (__args__, __methodResult__) -> {
// args
// ref arg
android.view.View var1 = (android.view.View) ((Map<String, Object>) __args__).get("var1");
// ref arg
android.view.MotionEvent var2 = (android.view.MotionEvent) ((Map<String, Object>) __args__).get("var2");
// ref
com.tencent.rtmp.ui.TXCloudVideoView __this__ = (com.tencent.rtmp.ui.TXCloudVideoView) ((Map<String, Object>) __args__).get("__this__");
// print log
if (getEnableLog()) {
Log.d("fluttify-java", "fluttify-java: com.tencent.rtmp.ui.TXCloudVideoView@" + __this__ + "::onTouch(" + var1 + var2 + ")");
}
// invoke native method
Boolean __result__ = null;
try {
__result__ = __this__.onTouch(var1, var2);
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
__methodResult__.error(throwable.getMessage(), null, null);
return;
}
__methodResult__.success(__result__);
});
}};
@Override
public PlatformView create(Context __, int id, Object params) {
Map<String, Object> __args__ = (Map<String, Object>) params;
////////////////////////////////初始化AndroidView////////////////////////////////////////
////////////////////////////////初始化AndroidView////////////////////////////////////////
com.tencent.rtmp.ui.TXCloudVideoView view = new com.tencent.rtmp.ui.TXCloudVideoView(activity);
// 同时存放viewId和refId的对象, 供后续viewId转refId使用
getHEAP().put(String.valueOf(Integer.MAX_VALUE - id), view);
getHEAP().put(String.valueOf(System.identityHashCode(view)), view);
return new PlatformView() {
// add to HEAP
@Override
public View getView() {
return view;
}
@Override
public void dispose() {}
};
}
}

@ -0,0 +1,158 @@
//////////////////////////////////////////////////////////
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
//////////////////////////////////////////////////////////
package com.fluttify.tencent_live_fluttify;
import android.os.Bundle;
import android.util.Log;
import android.app.Activity;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import io.flutter.plugin.common.StandardMethodCodec;
import io.flutter.plugin.platform.PlatformViewRegistry;
import com.fluttify.tencent_live_fluttify.sub_handler.*;
import com.fluttify.tencent_live_fluttify.sub_handler.custom.SubHandlerCustom;
import me.yohom.foundation_fluttify.core.FluttifyMessageCodec;
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getEnableLog;
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getHEAP;
@SuppressWarnings("ALL")
public class TencentLiveFluttifyPlugin implements FlutterPlugin, MethodChannel.MethodCallHandler, ActivityAware {
private static List<Map<String, Handler>> handlerMapList;
// v1 android embedding for compatible
public static void registerWith(Registrar registrar) {
final MethodChannel channel = new MethodChannel(registrar.messenger(), "com.fluttify/tencent_live_fluttify", new StandardMethodCodec(new FluttifyMessageCodec()));
TencentLiveFluttifyPlugin plugin = new TencentLiveFluttifyPlugin();
BinaryMessenger messenger = registrar.messenger();
PlatformViewRegistry platformViewRegistry = registrar.platformViewRegistry();
Activity activity = registrar.activity();
plugin.messenger = messenger;
plugin.platformViewRegistry = platformViewRegistry;
handlerMapList = new ArrayList<>();
handlerMapList.add(SubHandler0.getSubHandler(messenger));
handlerMapList.add(SubHandler1.getSubHandler(messenger));
handlerMapList.add(SubHandler2.getSubHandler(messenger));
handlerMapList.add(SubHandler3.getSubHandler(messenger));
handlerMapList.add(SubHandler4.getSubHandler(messenger));
handlerMapList.add(SubHandlerCustom.getSubHandler(messenger, registrar.activity()));
channel.setMethodCallHandler(plugin);
// register platform view
platformViewRegistry.registerViewFactory("com.fluttify/com.tencent.rtmp.ui.TXCloudVideoView", new TXCloudVideoViewFactory(messenger, activity));
}
private BinaryMessenger messenger;
private PlatformViewRegistry platformViewRegistry;
// v2 android embedding
@Override
public void onAttachedToEngine(FlutterPluginBinding binding) {
if (getEnableLog()) {
Log.d("fluttify-java", "TencentLiveFluttifyPlugin::onAttachedToEngine@" + binding);
}
final MethodChannel channel = new MethodChannel(binding.getBinaryMessenger(), "com.fluttify/tencent_live_fluttify", new StandardMethodCodec(new FluttifyMessageCodec()));
messenger = binding.getBinaryMessenger();
platformViewRegistry = binding.getPlatformViewRegistry();
handlerMapList = new ArrayList<>();
handlerMapList.add(SubHandler0.getSubHandler(messenger));
handlerMapList.add(SubHandler1.getSubHandler(messenger));
handlerMapList.add(SubHandler2.getSubHandler(messenger));
handlerMapList.add(SubHandler3.getSubHandler(messenger));
handlerMapList.add(SubHandler4.getSubHandler(messenger));
channel.setMethodCallHandler(this);
}
@Override
public void onDetachedFromEngine(FlutterPluginBinding binding) {
if (getEnableLog()) {
Log.d("fluttify-java", "TencentLiveFluttifyPlugin::onDetachedFromEngine@" + binding);
}
}
@Override
public void onAttachedToActivity(ActivityPluginBinding binding) {
if (getEnableLog()) {
Log.d("fluttify-java", "TencentLiveFluttifyPlugin::onAttachedToActivity@" + binding);
}
Activity activity = binding.getActivity();
handlerMapList.add(SubHandlerCustom.getSubHandler(messenger, activity));
// register platform view
platformViewRegistry.registerViewFactory("com.fluttify/com.tencent.rtmp.ui.TXCloudVideoView", new TXCloudVideoViewFactory(messenger, activity));
}
@Override
public void onDetachedFromActivity() {
if (getEnableLog()) {
Log.d("fluttify-java", "TencentLiveFluttifyPlugin::onDetachedFromActivity");
}
}
@Override
public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) {
if (getEnableLog()) {
Log.d("fluttify-java", "TencentLiveFluttifyPlugin::onReattachedToActivityForConfigChanges@" + binding);
}
}
@Override
public void onDetachedFromActivityForConfigChanges() {
if (getEnableLog()) {
Log.d("fluttify-java", "TencentLiveFluttifyPlugin::onDetachedFromActivityForConfigChanges");
}
}
@Override
public void onMethodCall(@NonNull MethodCall methodCall, @NonNull MethodChannel.Result methodResult) {
Handler handler = null;
for (Map<String, Handler> handlerMap : handlerMapList) {
if (handlerMap.containsKey(methodCall.method)) {
handler = handlerMap.get(methodCall.method);
break;
}
}
if (handler != null) {
try {
handler.call(methodCall.arguments, methodResult);
} catch (Exception e) {
e.printStackTrace();
methodResult.error(e.getMessage(), null, null);
}
} else {
methodResult.notImplemented();
}
}
@FunctionalInterface
public static interface Handler {
void call(Object args, MethodChannel.Result methodResult) throws Exception;
}
}

@ -0,0 +1,687 @@
//////////////////////////////////////////////////////////
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
//////////////////////////////////////////////////////////
package com.fluttify.tencent_live_fluttify.sub_handler;
import android.os.Bundle;
import android.util.Log;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import io.flutter.plugin.common.StandardMethodCodec;
import io.flutter.plugin.platform.PlatformViewRegistry;
import com.fluttify.tencent_live_fluttify.TencentLiveFluttifyPlugin.Handler;
import me.yohom.foundation_fluttify.core.FluttifyMessageCodec;
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getEnableLog;
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getHEAP;
@SuppressWarnings("ALL")
public class SubHandler4 {
public static Map<String, Handler> getSubHandler(BinaryMessenger messenger) {
return new HashMap<String, Handler>() {{
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_TXLivePushConfig__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.TXLivePushConfig> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.TXLivePushConfig __obj__ = new com.tencent.rtmp.TXLivePushConfig();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_TXBitrateItem__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.TXBitrateItem> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.TXBitrateItem __obj__ = new com.tencent.rtmp.TXBitrateItem();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_TXLivePlayConfig__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.TXLivePlayConfig> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.TXLivePlayConfig __obj__ = new com.tencent.rtmp.TXLivePlayConfig();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_TXVodPlayConfig__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.TXVodPlayConfig> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.TXVodPlayConfig __obj__ = new com.tencent.rtmp.TXVodPlayConfig();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_TXImageSprite__android_content_Context", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.TXImageSprite> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// ref arg
android.content.Context var1 = (android.content.Context) ((Map<String, Object>) __args__).get("var1");
// create target object
com.tencent.rtmp.TXImageSprite __obj__ = new com.tencent.rtmp.TXImageSprite(var1);
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_TraeAudioCodecList__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.TraeAudioCodecList> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.sharp.jni.TraeAudioCodecList __obj__ = new com.tencent.rtmp.sharp.jni.TraeAudioCodecList();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_MediaCodecDecoder__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.MediaCodecDecoder> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.sharp.jni.MediaCodecDecoder __obj__ = new com.tencent.rtmp.sharp.jni.MediaCodecDecoder();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_TraeAudioSessionHost__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.TraeAudioSessionHost> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.sharp.jni.TraeAudioSessionHost __obj__ = new com.tencent.rtmp.sharp.jni.TraeAudioSessionHost();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_AudioDecoder__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.AudioDecoder> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.sharp.jni.AudioDecoder __obj__ = new com.tencent.rtmp.sharp.jni.AudioDecoder();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_RingBuffer__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.RingBuffer> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.sharp.jni.RingBuffer __obj__ = new com.tencent.rtmp.sharp.jni.RingBuffer();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_RingBuffer__int", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.RingBuffer> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// ref arg
Number var1 = (Number) ((Map<String, Object>) __args__).get("var1");
// create target object
com.tencent.rtmp.sharp.jni.RingBuffer __obj__ = new com.tencent.rtmp.sharp.jni.RingBuffer(var1.intValue());
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_QLog__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.QLog> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.sharp.jni.QLog __obj__ = new com.tencent.rtmp.sharp.jni.QLog();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_AudioDeviceInterface__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.AudioDeviceInterface> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.sharp.jni.AudioDeviceInterface __obj__ = new com.tencent.rtmp.sharp.jni.AudioDeviceInterface();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_AudioSessionDuplicate__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.AudioSessionDuplicate> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.sharp.jni.AudioSessionDuplicate __obj__ = new com.tencent.rtmp.sharp.jni.AudioSessionDuplicate();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_MediaCodecEncoder__", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.MediaCodecEncoder> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// create target object
com.tencent.rtmp.sharp.jni.MediaCodecEncoder __obj__ = new com.tencent.rtmp.sharp.jni.MediaCodecEncoder();
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_MediaCodecEncoder__android_content_Context", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.MediaCodecEncoder> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// ref arg
android.content.Context var1 = (android.content.Context) ((Map<String, Object>) __args__).get("var1");
// create target object
com.tencent.rtmp.sharp.jni.MediaCodecEncoder __obj__ = new com.tencent.rtmp.sharp.jni.MediaCodecEncoder(var1);
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
// factory
put("ObjectFactory::create_batchcom_tencent_rtmp_sharp_jni_VivoKTVHelper__android_content_Context", (__argsBatch__, __methodResult__) -> {
List<com.tencent.rtmp.sharp.jni.VivoKTVHelper> __resultList__ = new ArrayList<>();
int __length__ = 0;
// when batch size is 0, dart side will put a map with key 'length' to indicate the length
// of this batch
if (__argsBatch__ instanceof Map) {
__length__ = (Integer) ((Map<String, Object>) __argsBatch__).get("length");
}
// or directly put the arg batch
else if (__argsBatch__ instanceof List) {
__length__ = ((List<Map<String, Object>>) __argsBatch__).size();
}
for (int __i__ = 0; __i__ < __length__; __i__++) {
Map<String, Object> __args__ = new HashMap<>();
// only when arg batch is not empty, java side needs to parse args;
if (__argsBatch__ instanceof List) {
__args__ = ((List<Map<String, Object>>) __argsBatch__).get(__i__);
}
// args
// ref arg
android.content.Context var1 = (android.content.Context) ((Map<String, Object>) __args__).get("var1");
// create target object
com.tencent.rtmp.sharp.jni.VivoKTVHelper __obj__ = new com.tencent.rtmp.sharp.jni.VivoKTVHelper(var1);
// print current HEAP
if (getEnableLog()) {
Log.d("ObjectFactory", "HEAP: " + getHEAP());
}
__resultList__.add(__obj__);
}
__methodResult__.success(__resultList__);
});
}};
}
}

@ -0,0 +1,57 @@
//////////////////////////////////////////////////////////
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
//////////////////////////////////////////////////////////
package com.fluttify.tencent_live_fluttify.sub_handler.custom;
import android.os.Bundle;
import android.util.Log;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import io.flutter.plugin.platform.PlatformViewRegistry;
import com.fluttify.tencent_live_fluttify.TencentLiveFluttifyPlugin.Handler;
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getEnableLog;
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getHEAP;
@SuppressWarnings("ALL")
public class SubHandlerCustom {
public static Map<String, Handler> getSubHandler(BinaryMessenger messenger, android.app.Activity activity) {
return new HashMap<String, Handler>() {{
put("", (args, methodResult) -> {
// args
// ref
// invoke native method
try {
} catch (Throwable throwable) {
throwable.printStackTrace();
if (getEnableLog()) {
Log.d("Current HEAP: ", getHEAP().toString());
}
methodResult.error(throwable.getMessage(), null, null);
return;
}
// convert result to jsonable result
String jsonableResult = "success";
methodResult.success(jsonableResult);
});
}};
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

37
example/.gitignore vendored

@ -0,0 +1,37 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
# Web related
lib/generated_plugin_registrant.dart
# Exceptions to above rules.
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages

@ -0,0 +1,10 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: f139b11009aeb8ed2a3a3aa8b0066e482709dde3
channel: stable
project_type: app

@ -0,0 +1,16 @@
# tencent_live_fluttify_example
Demonstrates how to use the tencent_live_fluttify plugin.
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.

@ -0,0 +1,7 @@
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java

@ -0,0 +1,62 @@
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 28
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
// applicationId "com.fluttify.tencent_live_fluttify_example"
applicationId "cn.tuobaye.live"
minSdkVersion 16
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.fluttify.tencent_live_fluttify_example">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

@ -0,0 +1,32 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.fluttify.tencent_live_fluttify_example">
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name="io.flutter.app.FlutterApplication"
android:label="tencent_live_fluttify_example"
tools:replace="android:label"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>

@ -0,0 +1,13 @@
package com.fluttify.tencent_live_fluttify_example;
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
</resources>

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.fluttify.tencent_live_fluttify_example">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

@ -0,0 +1,29 @@
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}

@ -0,0 +1,4 @@
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true

@ -0,0 +1,6 @@
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-all.zip

@ -0,0 +1,15 @@
include ':app'
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}
plugins.each { name, path ->
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
include ":$name"
project(":$name").projectDir = pluginDirectory
}

@ -0,0 +1,32 @@
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
</dict>
</plist>

@ -0,0 +1,2 @@
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"

@ -0,0 +1,2 @@
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"

@ -0,0 +1,38 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end

@ -0,0 +1,574 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
DB814F840EEBDE490083538A /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 990AA40057059A566D0177C7 /* libPods-Runner.a */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
990AA40057059A566D0177C7 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; };
9B8A09367D461A4ED7576F78 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
F0AE9F663786BAC37620BC23 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
F61A38B405298E6A8C785F73 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
DB814F840EEBDE490083538A /* libPods-Runner.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
B6D81602E22502E98FA6F39E /* Pods */,
AAA4C3DA128F6DBFDB485B70 /* Frameworks */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
97C146F11CF9000F007C117D /* Supporting Files */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
);
path = Runner;
sourceTree = "<group>";
};
97C146F11CF9000F007C117D /* Supporting Files */ = {
isa = PBXGroup;
children = (
97C146F21CF9000F007C117D /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
AAA4C3DA128F6DBFDB485B70 /* Frameworks */ = {
isa = PBXGroup;
children = (
990AA40057059A566D0177C7 /* libPods-Runner.a */,
);
name = Frameworks;
sourceTree = "<group>";
};
B6D81602E22502E98FA6F39E /* Pods */ = {
isa = PBXGroup;
children = (
F0AE9F663786BAC37620BC23 /* Pods-Runner.debug.xcconfig */,
9B8A09367D461A4ED7576F78 /* Pods-Runner.release.xcconfig */,
F61A38B405298E6A8C785F73 /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
A1FF105DB0FBDB708480C8A4 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
80DC8D1C117EBBE56CC16D0D /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1020;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
80DC8D1C117EBBE56CC16D0D /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
A1FF105DB0FBDB708480C8A4 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
97C146F31CF9000F007C117D /* main.m in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = XMYYSUEEKB;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = cn.tuobaye.live;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = XMYYSUEEKB;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = cn.tuobaye.live;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = XMYYSUEEKB;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = cn.tuobaye.live;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1020"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

@ -0,0 +1,6 @@
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : FlutterAppDelegate
@end

@ -0,0 +1,13 @@
#import "AppDelegate.h"
#import "GeneratedPluginRegistrant.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GeneratedPluginRegistrant registerWithRegistry:self];
// Override point for customization after application launch.
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end

@ -0,0 +1,122 @@
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

@ -0,0 +1,5 @@
# Launch Screen Assets
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="168" height="185"/>
</resources>
</document>

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>tencent_live_fluttify_example</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>需要摄像头</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>io.flutter.embedded_views_preview</key>
<string>YES</string>
</dict>
</plist>

@ -0,0 +1,9 @@
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char* argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

@ -0,0 +1,76 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:oktoast/oktoast.dart';
import 'package:tencent_live_fluttify/tencent_live_fluttify.dart';
import 'src/tencent_live.screen.dart';
const _testPushUrl =
'rtmp://live-push.tuobaye.cn/live/123456?txSecret=19b0c51e26a677614f233541f71e36f5&txTime=5EDD0EFF';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await TencentLive.instance.init(
licenseUrl:
'https://license.vod2.myqcloud.com/license/v1/bc8b7690d75d757e9a0fcfa0be01c96f/TXLiveSDK.licence',
licenseKey: '26be8d6e80f07acc9ee8830d809de878',
);
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return OKToast(
child: MaterialApp(
home: TencentLiveScreen(),
),
);
}
}
//
//class MyApp extends StatefulWidget {
// @override
// _MyAppState createState() => _MyAppState();
//}
//
//class _MyAppState extends State<MyApp> {
// @override
// Widget build(BuildContext context) {
// return MaterialApp(home: _HomeScreen());
// }
//}
//
//class _HomeScreen extends StatefulWidget {
// const _HomeScreen({
// Key key,
// }) : super(key: key);
//
// @override
// __HomeScreenState createState() => __HomeScreenState();
//}
//
//class __HomeScreenState extends State<_HomeScreen> {
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// appBar: AppBar(
// title: const Text('Plugin example app'),
// ),
// body: CloudVideo(
// onCloudVideoCreated: (controller) async {
// final player = await LivePlayer.create();
// await player.setPlayerView(controller.playerView);
// await player.setRenderMode(RenderMode.ADJUST_RESOLUTION);
// await player.startPlay('rtmp://58.200.131.2:1935/livetv/cctv1');
// },
// ),
// );
// }
//}

@ -0,0 +1,86 @@
import 'package:decorated_flutter/decorated_flutter.dart';
import 'package:demo_widgets/demo_widgets.dart';
import 'package:flutter/material.dart';
import 'package:tencent_live_fluttify/tencent_live_fluttify.dart';
class PlayerScreen extends StatefulWidget {
@override
_PlayerScreenState createState() => _PlayerScreenState();
}
class _PlayerScreenState extends State<PlayerScreen> {
bool _loading;
LivePlayer _player;
@override
void initState() {
super.initState();
_loading = true;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Player')),
body: DecoratedColumn(
children: [
Flexible(
child: Stack(
children: [
CloudVideo(
onCloudVideoCreated: (controller) async {
_player = await LivePlayer.create();
await _player.setPlayerView(controller);
await _player.setRenderMode(RenderMode.FULL_SCREEN);
await _player.startPlay(
'https://media.w3.org/2010/05/sintel/trailer.mp4',
type: PlayType.HLS,
);
await _player.setOnEventListener(onEventPlayBegin: () {
setState(() {
_loading = false;
});
});
},
),
if (_loading) Center(child: CircularProgressIndicator()),
],
),
),
Flexible(
child: SyntaxView(
code: kCode,
syntax: Syntax.DART,
withLinesCount: true,
),
),
],
),
);
}
@override
void dispose() {
_player.dispose();
super.dispose();
}
}
const kCode = '''
CloudVideo(
onCloudVideoCreated: (controller) async {
final player = await LivePlayer.create();
await player.setPlayerView(controller.playerView);
await player.setRenderMode(RenderMode.FULL_SCREEN);
await player.startPlay(
'https://media.w3.org/2010/05/sintel/trailer.mp4',
type: PlayType.HLS,
);
await player.setOnEventListener(onEventPlayBegin: () {
setState(() {
_loading = false;
});
});
},
)
''';

@ -0,0 +1,161 @@
import 'package:decorated_flutter/decorated_flutter.dart';
import 'package:demo_widgets/demo_widgets.dart';
import 'package:flutter/material.dart';
import 'package:tencent_live_fluttify/tencent_live_fluttify.dart';
class PusherScreen extends StatefulWidget {
@override
_PusherScreenState createState() => _PusherScreenState();
}
class _PusherScreenState extends State<PusherScreen> {
LivePusher _pusher;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('推流')),
floatingActionButton: FloatingActionButton(
onPressed: () {},
child: Text('重置'),
),
body: DecoratedColumn(
children: <Widget>[
Flexible(
child: CloudVideo(
onCloudVideoCreated: (controller) async {
_pusher = await LivePusher.create();
await _pusher.startPreview(controller);
},
),
),
Flexible(
child: DecoratedColumn(
divider: kDividerTiny,
children: <Widget>[
DiscreteSetting(
head: '设定画面清晰度',
options: ['标清', '高清', '超清', '连麦(主)', '连麦(副)'],
onSelected: (value) {
switch (value) {
case '标清':
_pusher.setVideoQuality(Quality.STANDARD);
break;
case '高清':
_pusher.setVideoQuality(Quality.HIGH);
break;
case '超清':
_pusher.setVideoQuality(Quality.SUPER_HIGH);
break;
case '连麦(主)':
_pusher.setVideoQuality(Quality.LINKMIC_MAIN);
break;
case '连麦(副)':
_pusher.setVideoQuality(Quality.LINKMIC_SUB);
break;
}
},
),
DiscreteSetting(
head: '美颜美白和红润特效',
options: ['光滑', '自然', '朦胧'],
onSelected: (value) {
switch (value) {
case '光滑':
_pusher.setBeautyFilter(BeautyFilter.SMOOTH);
break;
case '自然':
_pusher.setBeautyFilter(BeautyFilter.NATURE);
break;
case '朦胧':
_pusher.setBeautyFilter(BeautyFilter.HAZY);
break;
}
},
),
DiscreteSetting(
head: '色彩滤镜效果',
options: [
'白兰',
'标准',
'超脱',
'纯真',
'粉嫩',
'怀旧',
'蓝调',
'浪漫',
'清凉',
'清新',
'日系',
'唯美',
'美白',
'香粉',
'樱红',
'元气',
'云裳',
],
onSelected: (value) {
final config = createLocalImageConfiguration(context);
switch (value) {
case '白兰':
_pusher.setFilter(ColorFilter.BAILAN, config);
break;
case '标准':
_pusher.setFilter(ColorFilter.BIAOZHUN, config);
break;
case '超脱':
_pusher.setFilter(ColorFilter.CHAOTUO, config);
break;
case '纯真':
_pusher.setFilter(ColorFilter.CHUNZHEN, config);
break;
case '粉嫩':
_pusher.setFilter(ColorFilter.FENNEN, config);
break;
case '怀旧':
_pusher.setFilter(ColorFilter.HUAIJIU, config);
break;
case '蓝调':
_pusher.setFilter(ColorFilter.LANDIAO, config);
break;
case '浪漫':
_pusher.setFilter(ColorFilter.LANGMAN, config);
break;
case '清凉':
_pusher.setFilter(ColorFilter.QINGLIANG, config);
break;
case '清新':
_pusher.setFilter(ColorFilter.QINGXIN, config);
break;
case '日系':
_pusher.setFilter(ColorFilter.RIXI, config);
break;
case '唯美':
_pusher.setFilter(ColorFilter.WEIMEI, config);
break;
case '美白':
_pusher.setFilter(ColorFilter.WHITE, config);
break;
case '香粉':
_pusher.setFilter(ColorFilter.XIANGFEN, config);
break;
case '樱红':
_pusher.setFilter(ColorFilter.YINGHONG, config);
break;
case '元气':
_pusher.setFilter(ColorFilter.YUANQI, config);
break;
case '云裳':
_pusher.setFilter(ColorFilter.YUNSHANG, config);
break;
}
},
),
],
),
),
],
),
);
}
}

@ -0,0 +1,45 @@
import 'package:demo_widgets/demo_widgets.dart';
import 'package:flutter/material.dart';
import 'player/player.screen.dart';
import 'pusher/pusher.screen.dart';
class TencentLiveScreen extends StatefulWidget {
@override
_TencentLiveScreenState createState() => _TencentLiveScreenState();
}
class _TencentLiveScreenState extends State<TencentLiveScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('腾讯直播')),
body: ListView(
children: <Widget>[
FunctionGroup(
headLabel: '推流',
opened: true,
children: <Widget>[
FunctionItem(
label: '开始预览',
sublabel: 'PusherScreen',
target: PusherScreen(),
),
],
),
FunctionGroup(
headLabel: '拉流/播放',
opened: true,
children: <Widget>[
FunctionItem(
label: '播放器',
sublabel: 'PlayerScreen',
target: PlayerScreen(),
),
],
),
],
),
);
}
}

@ -0,0 +1,29 @@
name: tencent_live_fluttify_example
description: Demonstrates how to use the tencent_live_fluttify plugin.
publish_to: 'none'
environment:
sdk: ">=2.6.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
permission_handler: ^5.0.0+hotfix.3
oktoast: ^2.3.2
demo_widgets: ^0.2.1
# video_controller:
# path: /Users/yohom/Github/Me/All/packages/video_controller
# git:
# url: git@github.com:yohom/video_controller.git
# ref: develop
dev_dependencies:
flutter_test:
sdk: flutter
tencent_live_fluttify:
path: ../
flutter:
uses-material-design: true

@ -0,0 +1,27 @@
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:tencent_live_fluttify_example/main.dart';
void main() {
testWidgets('Verify Platform version', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());
// Verify that platform version is retrieved.
expect(
find.byWidgetPredicate(
(Widget widget) => widget is Text &&
widget.data.startsWith('Running on:'),
),
findsOneWidget,
);
});
}

37
ios/.gitignore vendored

@ -0,0 +1,37 @@
.idea/
.vagrant/
.sconsign.dblite
.svn/
.DS_Store
*.swp
profile
DerivedData/
build/
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m
.generated/
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3
xcuserdata
*.moved-aside
*.pyc
*sync/
Icon?
.tags*
/Flutter/Generated.xcconfig
/Flutter/flutter_export_environment.sh

@ -0,0 +1,13 @@
//////////////////////////////////////////////////////////
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
//////////////////////////////////////////////////////////
#import "TencentLiveFluttifyPlugin.h"
NS_ASSUME_NONNULL_BEGIN
@interface TencentLiveFluttifyPlugin (SubHandlerCustom)
- (NSDictionary<NSString*, Handler>*) getSubHandlerCustom;
@end
NS_ASSUME_NONNULL_END

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save