Flutter视频处理插件kaleyra_video_flutter_plugin的使用

Flutter视频处理插件kaleyra_video_flutter_plugin的使用

如何运行示例

执行以下命令从仓库根目录开始:

cd example
# nano .env 使用您自己的密钥
flutter pub get
cd ios
pod install

如何安装插件

在您的Flutter应用文件夹中打开终端并运行以下命令:

flutter pub add kaleyra_video_flutter_plugin

最低要求

  • Android 21+,gradle 8+,kotlin 1.9+
  • iOS 15+,swift 5.x

如何移除插件

flutter pub remove kaleyra_video_flutter_plugin

如何在您的Flutter应用中使用Kaleyra Video插件

您可以在您的Flutter应用中引用Kaleyra Video插件:

KaleyraVideo

插件设置

首先,您需要配置插件,指定您的密钥和选项。

配置参数
var configuration = Configuration(
      appID: "mAppId_xxx", // 您的应用ID
      environment: Environment.sandbox(), // production()
      region: Region.europe(), // india(), us()
      logEnabled: true, // 启用日志记录
      tools: Tools(
          // 默认情况下没有工具被设置
          chat: ChatToolConfiguration(
              audioCallOption: AudioCallOptions(
                  type: AudioCallType.audio, // audio或audioUpgradable
                  recordingType:
                      RecordingType.none), // none, manual或automatic
              videoCallOption: CallOptions(
                  recordingType:
                      RecordingType.none)), // none, manual或automatic
          feedback: true,
          fileShare: true,
          whiteboard: true,
          screenShare: ScreenShareToolConfiguration(
              inApp: true, // 只共享应用程序
              wholeDevice: true)), // 共享整个设备
      // 可选,您可以设置一个或多个以下功能,按默认设置调用套件
      iosConfig: IosConfiguration(
          voipHandlingStrategy: VoipHandlingStrategy.automatic, // 实现以能够接收VoIP
          callkit: CallKitConfiguration(
              enabled: true, // 在iOS 10+上启用CallKit
              appIconName: "logo_transparent", // 可选但推荐
              ringtoneSoundName: "custom_ringtone.mp3")); // 可选

var kaleyraVideo = await KaleyraVideo.configure(configuration);

如果screenShare.wholeDevice设置为true,请查看这里以获取所需的附加设置。

插件监听错误/事件

要监听事件和/或错误,请注册。 检查文档这里以获取完整的列表。

示例:

kaleyraVideo.events.onCallModuleStatusChanged = (status) => {};

iOS - VoIP通知

VoIP通知所需设置

如果您希望在iOS平台上使用VoIP通知,首先要配置kaleyraVideo,传递一个配置对象如下:

var configuration = Configuration(
      [...]
      iosConfig: IosConfiguration(
          voipHandlingStrategy: VoipHandlingStrategy.automatic, 
          [...]

var kaleyraVideo = await KaleyraVideo.configure(configuration);

iOS项目需要进行一些配置以使用VoIP通知。这里提供了如何配置项目的描述。

监听VoIP推送令牌

为了获取您的设备推送令牌,您必须监听KaleyraVideo.events.iOSVoipPushTokenUpdated事件,并注册回调如下:

// 仅在调用kaleyraVideo.connect(_)后才会收到此侦听器中的令牌
kaleyraVideo.events.oniOSVoipPushTokenUpdated = (token) => {
    // 在您的服务器上注册VoIP推送令牌
};

警告: 确保在此监听器附加之前调用kaleyraVideo.connect(_),否则可能会错过报告设备令牌的事件。

在回调中提供的令牌是您的设备令牌的字符串表示形式。 这里是一个设备令牌的例子:dec105f879924349fd2fa9aa8bb8b70431d5f41d57bfa8e31a5d80a629774fd9

VoIP通知有效载荷

这里提供了您的VoIP通知有效载荷应如何结构化的例子。

插件连接

要将插件连接到Kaleyra Video系统,您需要提供一个Session对象。 会话需要一个userID和一个返回Future的函数

重要

  • userID应该已经存在于我们的服务中。您的后端需要通过调用此API 创建用户来创建它。
  • accessToken应该由您的后端通过调用此API 获取凭证生成。请注意,它有有效期。回调会被多次调用,每次需要刷新用户会话时都会生成新的令牌。
kaleyraVideo.connect(Session("usr_xxx", (userId) async {
    // 获取用户_xxx的令牌
    return "jwt_xxx";
}));

开始通话

要发起通话,您需要指定一些参数。

开始通话参数
kaleyraVideo.startCall(CreateCallOptions(
    callees: ["usr_yyy", "usr_zzz"], // 您想要呼叫的用户的用户ID数组
    callType: CallType.audioVideo, // audio, audioUpgradable或audioVideo - 您想要开始的通话类型
    recordingType: RecordingType.none)); // none, manual或automatic

开始聊天

要开始聊天,您需要指定一些参数。

开始聊天参数
kaleyraVideo.startChat("usr_yyy"); // 您想要创建聊天的用户的用户ID

设置用户详情

此方法允许您设置您的用户详细信息数据库,SDK会在需要时从中读取这些信息。

kaleyraVideo.addUsersDetails([
    UserDetails(userID: "usr_yyy", name: "User1Name", imageUrl: "https://www.example.com/user1image.png"),
    UserDetails(userID: "usr_zzz", name: "User2Name", imageUrl: "https://www.example.com/user2image.png"),
]);

确保始终保持更新,否则如果收到来电且用户在该集合中缺失,用户ID将被打印在UI上。

移除所有用户详情

此方法允许您从本地应用数据库中移除所有用户信息。

kaleyraVideo.removeUsersDetails();

清除所有缓存信息

此方法允许您清除所有缓存信息。

kaleyraVideo.clearUserCache();

Android更改显示模式

此方法对于某些场景非常有用,例如当您需要显示提示框且不希望因通话进入画中画而失效时。

kaleyraVideo.setDisplayModeForCurrentCall(CallDisplayMode.background); // .foreground, .foregroundPictureInPicture或.background

iOS广播屏幕共享

要启用整个设备屏幕共享,需要进行额外的设置。 打开您的Flutter应用的iOS Xcode项目并遵循此指南。 完成上述指南中描述的步骤后,您需要在Podfile中添加以下行:

target 'BroadcastExtension' do
  use_frameworks!

  pod 'BandyerBroadcastExtension'
end

此外,为了正确配置SDK,需要创建一个名为"KaleyraVideoConfig.plist"的文件,并将其添加到与应用相同的target中。该文件必须包含以下内容:

<?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>broadcast</key>
 <dict>
  <key>appGroupIdentifier</key>
  <string><!-- 在此处放置您的应用组的bundle ID --></string>
  <key>extensionBundleIdentifier</key>
  <string><!-- 在此处放置您的广播扩展的bundle ID --></string>
 </dict>
</dict>
</plist>

iOS通知

该模块支持on_call_incoming通知。 您需要设置voipHandlingStrategy并订阅iOSVoipPushTokenUpdated事件以接收用于通知插件的VoIP令牌。

Android通知

当接收到on_call_incomingon_message_sent通知时,您只需要配置并连接插件,它将自动显示通知。

ProGuard

# Bandyer现在是Kaleyra专有SDK
-keep class com.bandyer.** { *; }
-keep interface com.bandyer.** { *; }
-keep enum com.bandyer.** { *; }

-keep class com.kaleyra.** { *; }
-keep interface com.kaleyra.** { *; }
-keep enum com.kaleyra.** { *; }

更多关于Flutter视频处理插件kaleyra_video_flutter_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter视频处理插件kaleyra_video_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用kaleyra_video_flutter_plugin插件进行视频处理的一个示例。请注意,由于这是一个假设的插件名称,实际使用时可能需要根据插件的官方文档进行调整。如果kaleyra_video_flutter_plugin不存在,以下代码将作为一个通用的Flutter视频处理插件使用指南。

首先,确保你已经在pubspec.yaml文件中添加了插件依赖:

dependencies:
  flutter:
    sdk: flutter
  kaleyra_video_flutter_plugin: ^x.y.z  # 替换为实际版本号

然后,运行flutter pub get来安装插件。

接下来,你可以在你的Flutter应用中使用该插件。以下是一个简单的示例,展示如何初始化插件并进行一些基本的视频处理操作(假设插件提供了这些功能):

import 'package:flutter/material.dart';
import 'package:kaleyra_video_flutter_plugin/kaleyra_video_flutter_plugin.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Video Processing Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: VideoProcessingScreen(),
    );
  }
}

class VideoProcessingScreen extends StatefulWidget {
  @override
  _VideoProcessingScreenState createState() => _VideoProcessingScreenState();
}

class _VideoProcessingScreenState extends State<VideoProcessingScreen> {
  late KaleyraVideoFlutterPlugin _videoPlugin;

  @override
  void initState() {
    super.initState();
    // 初始化插件
    _videoPlugin = KaleyraVideoFlutterPlugin();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video Processing Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                // 选择视频文件
                String? videoPath = await _selectVideo();
                if (videoPath != null) {
                  // 进行视频处理,例如压缩
                  try {
                    File compressedVideo = await _videoPlugin.compressVideo(videoPath);
                    print('Compressed video saved at: ${compressedVideo.path}');
                  } catch (e) {
                    print('Error compressing video: $e');
                  }
                }
              },
              child: Text('Select and Compress Video'),
            ),
          ],
        ),
      ),
    );
  }

  // 假设的方法来选择视频文件(实际实现可能依赖于平台插件)
  Future<String?> _selectVideo() async {
    // 这里应该使用文件选择器插件来选择视频文件
    // 例如:image_picker_for_flutter 或者其他视频选择器插件
    // 由于这不是kaleyra_video_flutter_plugin的功能,所以这里仅返回null作为示例
    return null;
  }
}

请注意,上述代码中有几个关键点:

  1. 初始化插件:在initState方法中初始化KaleyraVideoFlutterPlugin实例。
  2. 选择视频文件_selectVideo方法应该使用文件选择器插件来选择视频文件。由于这不是kaleyra_video_flutter_plugin的功能,因此示例中返回null。你需要根据实际需求选择合适的文件选择器插件。
  3. 视频处理:调用插件提供的compressVideo方法(或其他处理方法)来处理视频。这里假设插件有一个compressVideo方法,你需要根据插件的实际API进行调整。

请务必查阅kaleyra_video_flutter_plugin(如果存在)的官方文档,了解插件提供的具体API和功能,并根据需要进行调整。如果插件不存在,你可能需要寻找其他合适的Flutter视频处理插件。

回到顶部