alicloud_impinteraction_sdk 1.8.9 icon indicating copy to clipboard operation
alicloud_impinteraction_sdk: ^1.8.9 copied to clipboard

直播基础SDK

alicloud_impinteraction_sdk #

本插件是低代码音视频工厂标准集成(无UI)(以下简称标准集成)的Flutter实现插件。

环境要求 #

Android环境要求: #

  • 系统版本:支持Android 5.0及以上版本。
  • API版本:支持21及以上版本。
  • CPU架构:支持实体设备架构armeabi-v7a、arm64-v8a。
  • 其他:不支持视频采集旋转,不支持USB外接摄像头。

iOS环境要求: #

  • 设备类型:支持iPhone和iPad所有型号。
  • CPU架构:支持iOS真机armv7、arm64架构,不支持模拟器i386、X86_64架构。
  • 系统版本:支持iOS 10.0及以上版本。
  • 其他:不支持bitcode,不支持屏幕旋转。 前提条件 客户端集成前,请确保已经通过控制台创建应用并获取客户端集成需要的信息(应用ID,APP Key,低代码集成服务地址,低代码集成服务密钥)。创建指引请参见创建应用。

开始接入 #

欲使用本插件,需了解直播低代码接入流程

前提条件 #

客户端集成前,请确保已经通过控制台创建应用并获取客户端集成需要的信息(应用ID,APP Key,低代码集成服务地址,低代码集成服务密钥)。创建指引请参见创建应用

工程配置 #

Android工程配置 #

minSdkVersion配置

工程配置中添加minSdkVersion配置项 (> 21)

android {
    defaultConfig {
        minSdkVersion 21
    }
}

覆盖android:label

在应用的AndroidManifest.xml文件的<application>标签中添加'tools:replace="android:label"

add 'tools:replace="android:label"' to

iOS工程配置 #

支持系统版本

iOS 10.0

  • iOS工程 podFile中:

    platform :ios, '10.0'

  • xCode工程配置中: General -> DeploymentInfo -> iOS10.0

关闭bitcode

不支持bitcode——需在工程配置中关闭bitcode

配置设备权限

需要在Xcode工程本身的plist文件中主动配置以下三项:

KeyValue
Privacy - Camera Usage DescriptionUse camera
Privacy - Microphone Usage DescriptionUse microphone
Application uses Wi-FiYES

配置应用与API使用 #

完整的代码实现逻辑请参见开源工程

初始化 #

需要传入应用配置信息

(应用ID,APP Key,低代码集成服务地址,低代码集成服务密钥)。创建指引请参见创建应用 需注意AppKey区分平台,此插件中需同时传入 appKey4Android (Android平台AppKey)、appKey4iOS(iOS平台AppKey)

/assets 目录下创建

app_settings_anchor.json app_settings_audience.json demo_param.json

分别配置: app_settings_anchor.json

{
  "userId": "",
  "role" : "anchor",
  "appId": "",
  "appKey4Android": "",
  "appKey4iOS": "",
  "tokenServerHost": "",
  "serverHost": "",
  "serverSecret": ""
}

app_settings_audience.json

{
  "userId": "",
  "role" : "audience",
  "appId": "",
  "appKey4Android": "",
  "appKey4iOS": "",
  "tokenServerHost": "",
  "serverHost": "",
  "serverSecret": ""
}

demo_param.json

{
  "liveId": "",
  "roomId": ""
}
  Future<void> initPlugin(anchor) async {
    M res = {'result': 'unknown'};
    try {
      String config =
          anchor ? 'app_settings_anchor.json' : 'app_settings_audience.json';
      final String settingJson = await rootBundle.loadString('assets/$config');
      appSettings = await json.decode(settingJson);
      String userId = (appSettings['userId'] as String).isEmpty
          ? Utils.randomName()
          : appSettings['userId'];

      final String paramJson =
          await rootBundle.loadString('assets/demo_param.json');
      demoParam = await json.decode(paramJson);

      String deviceId = await Utils.getId() ?? '';

      var param = {
        'userId': userId,
        'appId': appSettings['appId'],
        'appKey4Android': appSettings['appKey4Android'],
        'appKey4iOS': appSettings['appKey4iOS'],
        'serverHost': appSettings['serverHost'],
        'serverSecret': appSettings['serverSecret'],
        'deviceId': deviceId,
      };

      var appKey = defaultTargetPlatform == TargetPlatform.android
          ? appSettings['appKey4Android']
          : appSettings['appKey4iOS'];
      regEvent(appSettings['tokenServerHost'], userId, appSettings['appId'],
          appKey, deviceId);
      res = await IMPSdkRoomEngine.init(param);
      res = await IMPSdkRoomEngine.login();
      res = await IMPSdkRoomChannel.setRoomId({
        'roomId': 'ceba71c7-145e-436f-8a2b-cf23daf307be',
      });
      res = await IMPSdkRoomChannel.enterRoom({
        'nick': 'nickOf' + userId,
      });

      if (appSettings['role'] == 'anchor') {
        res = await IMPSdkLivePusher.startPreview();
        res = await IMPSdkLivePusher.startLive();
      } else {
        res = await IMPSdkLivePlayer.start();
      }
    } on PlatformException catch (e) {
      res!['result'] =
          'api e: code=${e.code}, msg=${e.message}, details=${e.details}';
      debugPrint('startPreview result:${res['result']}');
    }

    if (!mounted) return;

    debugPrint('init result:${res!['result']}');
    setState(() {
      _initResult = res!['result'];
    });
  }

开启直播或者进入直播间 #

  void setUpAsAnchor() {
    listComment();
    login();
  }

  void setUpAsAudience() {
    String inputId = sceneIdController.text;
    String? sceneId = inputId.isEmpty ? demoParam['liveId'] : inputId;
    if (sceneId?.isEmpty ?? true) {
      debugPrint('empty input');
    } else {
      listComment();
      login();
    }
  }
0
likes
95
pub points
29%
popularity

Publisher

unverified uploader

直播基础SDK

Homepage

Documentation

API reference

License

MIT (LICENSE)

Dependencies

flutter

More

Packages that depend on alicloud_impinteraction_sdk