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_incoming
或on_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
更多关于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;
}
}
请注意,上述代码中有几个关键点:
- 初始化插件:在
initState
方法中初始化KaleyraVideoFlutterPlugin
实例。 - 选择视频文件:
_selectVideo
方法应该使用文件选择器插件来选择视频文件。由于这不是kaleyra_video_flutter_plugin
的功能,因此示例中返回null
。你需要根据实际需求选择合适的文件选择器插件。 - 视频处理:调用插件提供的
compressVideo
方法(或其他处理方法)来处理视频。这里假设插件有一个compressVideo
方法,你需要根据插件的实际API进行调整。
请务必查阅kaleyra_video_flutter_plugin
(如果存在)的官方文档,了解插件提供的具体API和功能,并根据需要进行调整。如果插件不存在,你可能需要寻找其他合适的Flutter视频处理插件。