Flutter客户端通信插件simli_client的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter客户端通信插件simli_client的使用

Simli Client for Flutter

Simli Client 是一个为与Simli API无缝集成而设计的Flutter包,提供了实时、低延迟的流式虚拟形象。它利用先进的 WebRTC 技术来管理视频渲染、对等连接和数据通道,使其成为虚拟助手、客户服务机器人等应用的理想解决方案。


🚀 功能特性

Simli Client 提供了一系列强大的功能,以简化集成并提高性能:

  • 自定义配置: 使用 SimliClientConfig 可以微调会话设置、超时、重试逻辑等。
  • 实时音频和视频: 支持同步音频流和实时虚拟形象渲染。
  • 稳健的连接管理: 处理WebSocket超时、ICE收集和连接重试。
  • 高级音频处理: 包括静音检测和可自定义的阈值来触发动作。
  • 轻松集成: 提供了一个简单的API来初始化会话和数据流。

🔄 兼容性

SimliClient Flutter 包完全兼容 Simli Client 版本 1.2.1。请确保您使用的是版本 1.2.1 或更高版本,以实现无缝集成和功能支持。


📦 参数

SimliClient 参数

参数名 类型 描述
clientConfig SimliClientConfig 配置对象用于客户端会话。
log Logger 日志记录器实例用于调试和事件日志。

SimliClientConfig 参数

参数名 类型 描述
apiKey String 用于验证API请求的API密钥。
faceId String 用于标识会话中使用的面部形象。
handleSilence bool 启用或禁用静音检测。
maxSessionLength int 允许的最大会话长度(秒)。
maxIdleTime int 允许的最大空闲时间(秒)后终止。
syncAudio bool 启用音频同步。
retryDelay Duration 指定在重试失败操作之前等待的时间。
connectionTimeoutTime Duration 建立连接允许的最大时间。
requestTimeout Duration 请求完成允许的最大时间。
audioCheckInterval Duration 检查音频状态的时间间隔。
silenceThreshold Duration 视为重要动作的静默持续时间。
iceGatheringTimeout Duration ICE收集允许的最大时间。
maxRetryAttempts int 对API请求的最大重试次数。
webSocketTimeout Duration WebSocket操作在超时前允许的最大时间。
answerTimeoutTime Duration 等待答案的最大时间以避免超时。
videoReferenceUrl String 会话期间使用的视频引用URL。
isJPG bool 表示资产文件格式是否为JPG。

SimliClient 成员

成员名 类型 描述
videoRenderer RTCVideoRenderer? 用于显示视频流的视频渲染器。
stateNotifier ValueNotifier<SimliState> 监听客户端状态的变化。
isSpeakingNotifier ValueNotifier<bool> 监听用户是否正在说话的变化。
onConnection VoidCallback? 连接事件的回调。
onFailed void Function(SimliError) 连接失败事件的回调。
onDisconnected VoidCallback? 断开连接事件的回调。
isSpeaking bool 获取用户当前是否正在说话。
isSpeaking bool (setter) 设置用户当前是否正在说话。
state SimliState 获取客户端的当前状态。
isConnected bool 检查连接状态的实用方法。
audioLevelNotifier ValueNotifier<double> 监听者通知虚拟形象的音频水平。

🛠️ 开始使用

安装

  1. 在你的 pubspec.yaml 中添加依赖:
dependencies:
  simli_client: &lt;latest-version&gt;

获取最新版本,请参阅 pub.dev 的安装指南。

  1. 使用以下命令获取包:
flutter pub get
  1. 将库导入到你的项目中:
import 'package:simli_client/simli_client.dart';

🖥️ 实现指南

配置客户端

创建一个包含所需参数的 SimliClientConfig 实例:

final config = SimliClientConfig(
  apiKey: '&lt;YOUR_API_KEY&gt;',
  faceId: '&lt;YOUR_FACE_ID&gt;',
  handleSilence: true,
  maxSessionLength: 3600,
  maxIdleTime: 300,
  syncAudio: true,
);

初始化Simli客户端

将配置和日志记录器传递给 SimliClient 构造函数:

final SimliClient simliClient = SimliClient(
  clientConfig: config,
  log: Logger(),
);

启动客户端连接

使用 start 方法建立连接:

simliClient.start();

渲染实时虚拟形象

使用 RTCVideoView 渲染实时虚拟形象:

RTCVideoView(
  simliClient.videoRenderer!,
  mirror: false,
  placeholderBuilder: (context) => const Center(child: CircularProgressIndicator()),
);

发送音频数据

将自定义的PCM16音频以 Uint8List 格式流式传输,以触发虚拟形象的响应:

simliClient.sendAudioData(data);

更多关于Flutter客户端通信插件simli_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter客户端通信插件simli_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用simli_client插件进行客户端通信的示例代码。请注意,由于simli_client是一个假设的插件名称(因为实际中并没有这个名字的官方插件),我将基于一般的Flutter插件使用模式来展示代码,你可以根据实际的插件文档进行调整。

1. 添加插件依赖

首先,你需要在你的pubspec.yaml文件中添加simli_client插件的依赖。由于这是一个假设的插件,你需要替换为实际的插件名和版本号。

dependencies:
  flutter:
    sdk: flutter
  simli_client: ^1.0.0  # 假设的版本号,请替换为实际版本号

然后运行flutter pub get来安装依赖。

2. 导入插件并使用

接下来,在你的Flutter项目中导入并使用simli_client插件。以下是一个简单的示例,展示如何初始化插件并进行通信。

import 'package:flutter/material.dart';
import 'package:simli_client/simli_client.dart';  // 假设的导入路径

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SimliClientExample(),
    );
  }
}

class SimliClientExample extends StatefulWidget {
  @override
  _SimliClientExampleState createState() => _SimliClientExampleState();
}

class _SimliClientExampleState extends State<SimliClientExample> {
  String responseData = '';

  @override
  void initState() {
    super.initState();
    // 初始化simli_client并进行通信
    initSimliClient();
  }

  void initSimliClient() async {
    // 假设simli_client有一个名为initialize的方法
    await SimliClient.initialize();

    // 假设有一个名为fetchData的方法用于从服务器获取数据
    try {
      var data = await SimliClient.fetchData(endpoint: 'https://api.example.com/data');
      setState(() {
        responseData = data.toString();
      });
    } catch (error) {
      print('Error fetching data: $error');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SimliClient Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Response Data:'),
            Text(responseData),
          ],
        ),
      ),
    );
  }
}

3. 插件的假设API

由于simli_client是假设的插件,以下是假设的插件API定义,你需要在插件的Dart文件中实现这些功能。

// 文件路径: lib/simli_client.dart

import 'dart:async';

class SimliClient {
  // 初始化方法,可能用于设置一些配置
  static Future<void> initialize() async {
    // 插件初始化逻辑
    print('SimliClient initialized');
  }

  // 假设的fetchData方法,用于从服务器获取数据
  static Future<dynamic> fetchData({required String endpoint}) async {
    // 这里应该是实际的网络请求逻辑,例如使用Dart的HttpClient
    // 为了简化,这里直接返回一个示例数据
    return {
      'message': 'Hello from SimliClient!',
      'status': 'success',
    };
  }
}

注意事项

  1. 实际插件文档:请务必参考实际插件的官方文档,因为每个插件的API和方法可能会有所不同。
  2. 错误处理:在实际应用中,你需要更完善的错误处理机制,而不仅仅是打印错误信息。
  3. 平台特定代码:如果插件包含平台特定的代码(如iOS和Android),你需要确保在相应的原生代码中正确实现。

希望这个示例能帮到你!如果你有具体的插件名称和文档,我可以提供更准确的帮助。

回到顶部