Flutter视频会议插件jitsi_meet_flutter_sdk_secure的使用
Flutter视频会议插件jitsi_meet_flutter_sdk_secure的使用
Jitsi Meet Flutter SDK
Jitsi Meet Flutter SDK 提供了与 Jitsi Meet 应用相同的用户体验,以 Flutter 插件的形式存在,使你能够在自己的 Flutter 应用中嵌入并自定义 Jitsi Meet。
示例应用
如果你想要了解将 Jitsi Meet Flutter SDK 集成到 Flutter 应用有多么简单,可以查看: 示例应用仓库。
安装
添加依赖
从命令行添加依赖:
$ flutter pub add jitsi_meet_flutter_sdk
上述命令将在你的项目中的 pubspec.yaml
文件中添加以下内容(你可以手动进行此操作):
dependencies:
jitsi_meet_flutter_sdk: ^0.1.8
安装
在终端中安装包:
$ flutter pub get
导入文件
在 Dart 代码中导入以下文件:
import 'package:jitsi_meet_flutter_sdk/jitsi_meet_flutter_sdk.dart';
使用
加入会议
首先,创建一个 JitsiMeet
对象,然后调用它带有 JitsiMeetConferenceOptions
对象的 join
方法。
var jitsiMeet = JitsiMeet();
var options = JitsiMeetConferenceOptions(room: 'jitsiIsAwesome');
jitsiMeet.join(options);
配置
iOS
确保在 ios
目录下的 Podfile
中设置了 iOS 版本为 12.4 或更高版本
:
platform :ios, '12.4'
插件请求相机和麦克风访问权限,请确保在 ios/Runner
目录下的 Info.plist
文件中包含所需的 <key>NSCameraUsageDescription</key>
和 <key>NSMicrophoneUsageDescription</key>
条目。
<key>NSCameraUsageDescription</key>
<string>该应用需要访问您的摄像头进行会议。</string>
<key>NSMicrophoneUsageDescription</key>
<string>该应用需要访问您的麦克风进行会议。</string>
Android
转到 android/app/build.gradle
并确保 minSdkVersion
设置为 至少 24
:
android {
...
defaultConfig {
...
minSdkVersion 24
}
}
application:label
字段会与 Jitsi Meet Android SDK 的应用程序标签发生冲突。转到 android/app/src/main/AndroidManifest.xml
并添加工具库以及 tools:replace="android:label"
到应用程序标签中。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
tools:replace="android:label"
android:label="sample_app"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
...
</application>
</manifest>
使用API
JitsiMeet
JitsiMeet
类是 SDK 的入口点。它用于启动会议屏幕,发送和接收所有事件。
JitsiMeet()
JitsiMeet
类的构造函数。
join(JitsiMeetConferenceOptions options, [JitsiMeetEventListener? listener])
加入带有给定选项的会议,并可选地提供监听器。
options
: 会议选项listener
: 由原生 SDK 触发的事件监听器
hangUp()
本地参与者离开当前会议。
setAudioMuted(bool muted)
根据 muted
参数设置本地参与者的音频静音状态。
setVideoMuted(bool muted)
根据 muted
参数设置本地参与者的视频静音状态。
sendEndpointTextMessage({String? to, required String message})
通过数据通道向特定参与者或所有人发送消息。如果 to
参数为空,则消息将发送给会议中的所有参与者。
toggleScreenShare(bool enabled)
根据 enabled
参数设置本地参与者的屏幕共享状态。
openChat([String? to])
打开聊天对话框。如果 to
包含有效的参与者ID,则将打开与特定参与者的私聊。
sendChatMessage({String? to, required String message})
向特定参与者或所有人发送聊天消息。如果 to
参数为空,则消息将发送给会议中的所有参与者。
closeChat()
关闭聊天对话框。
retrieveParticipantsInfo()
发送一个事件,触发 participantsInfoRetrieved
事件,该事件将包含参与者信息。
JitsiMeetConferenceOptions
此对象封装了在加入会议时可以调整的所有选项。
示例:
var options = JitsiMeetConferenceOptions(
serverURL: "https://meet.jit.si",
room: "jitsiIsAwesomeWithFlutter",
configOverrides: {
"startWithAudioMuted": false,
"startWithVideoMuted": false,
"subject" : "Jitsi with Flutter",
},
featureFlags: {
"unsaferoomwarning.enabled": false
},
userInfo: JitsiMeetUserInfo(
displayName: "Flutter user",
email: "user@example.com"
),
);
JitsiMeetUserInfo({String displayName, String email, String avatar})
JitsiMeetUserInfo
构造函数。
注意:avatar 应该是一个 URL。
JitsiMeetEventListener
此类旨在作为来自原生 SDK 的事件的监听器。它将接收事件处理器作为参数。
conferenceJoined(String url)
当会议加入时被调用。
url
: 会议 URL
conferenceTerminated(String url, Object? error)
当活动会议结束时被调用,无论是由于用户选择还是由于失败。
url
: 会议 URLerror
: 如果会议顺利完成则缺失,否则包含错误消息
conferenceWillJoin(String url)
在会议加入之前被调用。
url
: 会议 URL
participantJoined(String? email, String? name, String? role, String? participantId)
当参与者加入会议时被调用。
email
: 参与者的电子邮件。如果没有设置则可能不包含。name
: 参与者的名称。role
: 参与者的角色。participantId
: 参与者的 ID。
participantLeft(String? participantId)
当参与者离开会议时被调用。
participantId
: 离开的参与者的 ID。
audioMutedChanged(bool muted)
当本地参与者的音频被静音或取消静音时被调用。
muted
: 布尔值,指示音频是否静音。
videoMutedChanged(bool muted)
当本地参与者的视频被静音或取消静音时被调用。
muted
: 布尔值,指示视频是否静音。
endpointTextMessageReceived(String senderId, String message)
当收到端点文本消息时被调用。
senderId
: 发送者的 participantIdmessage
: 内容
screenShareToggled(String participantId, bool sharing)
当参与者开始或停止分享其屏幕时被调用。
participantId
: 参与者的 IDsharing
: 屏幕共享的状态
chatMessageReceived(String senderId, String message, bool isPrivate, String? timestamp)
当收到聊天文本消息时被调用。
senderId
: 发送消息的参与者的 IDmessage
: 消息的内容isPrivate
: 如果消息是私有的,则为真,否则为假timestamp
: 消息的(可选)时间戳
chatToggled(bool isOpen)
当聊天对话框打开或关闭时被调用。
isOpen
: 如果聊天对话框打开,则为真,否则为假
participantsInfoRetrieved(String participantsInfo)
当 retrieveParticipantsInfo
动作被调用时被触发。
participantsInfo
: 参与者信息列表的字符串形式
readyToClose()
当 SDK 准备关闭时被调用。此时没有会议正在进行。
示例监听器
var listener = JitsiMeetEventListener(
conferenceJoined: (url) {
debugPrint("conferenceJoined: url: $url");
},
participantJoined: (email, name, role, participantId) {
debugPrint(
"participantJoined: email: $email, name: $name, role: $role, "
"participantId: $participantId",
);
participants.add(participantId!);
},
chatMessageReceived: (senderId, message, isPrivate) {
debugPrint(
"chatMessageReceived: senderId: $senderId, message: $message, "
"isPrivate: $isPrivate",
);
},
readyToClose: () {
debugPrint("readyToClose");
},
);
更多关于Flutter视频会议插件jitsi_meet_flutter_sdk_secure的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter视频会议插件jitsi_meet_flutter_sdk_secure的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
jitsi_meet_flutter_sdk_secure
是一个用于在 Flutter 应用中集成 Jitsi Meet 视频会议功能的插件。与 jitsi_meet_flutter
插件相比,jitsi_meet_flutter_sdk_secure
提供了更高的安全性,并且支持更多的定制化功能。
1. 安装插件
首先,你需要在 pubspec.yaml
文件中添加 jitsi_meet_flutter_sdk_secure
依赖:
dependencies:
flutter:
sdk: flutter
jitsi_meet_flutter_sdk_secure: ^1.0.0+1
然后运行 flutter pub get
来安装依赖。
2. 配置插件
在 Android 和 iOS 平台上,你可能需要进行一些额外的配置。
Android
在 android/app/src/main/AndroidManifest.xml
文件中,确保添加了以下权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
iOS
在 ios/Runner/Info.plist
文件中,确保添加了以下权限:
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) needs access to the camera for video calls.</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) needs access to the microphone for audio calls.</string>
3. 使用插件
在 Dart 代码中,你可以使用 JitsiMeet
类来启动视频会议。
import 'package:flutter/material.dart';
import 'package:jitsi_meet_flutter_sdk_secure/jitsi_meet_flutter_sdk_secure.dart';
class VideoCallScreen extends StatefulWidget {
[@override](/user/override)
_VideoCallScreenState createState() => _VideoCallScreenState();
}
class _VideoCallScreenState extends State<VideoCallScreen> {
final JitsiMeet _jitsiMeet = JitsiMeet();
[@override](/user/override)
void initState() {
super.initState();
_startMeeting();
}
void _startMeeting() async {
var options = JitsiMeetConferenceOptions(
room: "your-room-name", // 会议房间名称
subject: "Meeting Subject", // 会议主题
userInfo: JitsiMeetUserInfo(
displayName: "Your Name", // 用户显示名称
email: "your-email@example.com", // 用户邮箱
avatar: "https://your-avatar-url.com/avatar.jpg", // 用户头像
),
featureFlags: {
"welcomepage.enabled": false, // 禁用欢迎页面
"invite.enabled": true, // 启用邀请功能
},
);
await _jitsiMeet.join(options);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Jitsi Meet'),
),
body: Center(
child: Text('Starting meeting...'),
),
);
}
}
4. 处理会议事件
你可以监听会议的各种事件,例如会议结束、参与者加入/离开等。
void _startMeeting() async {
var options = JitsiMeetConferenceOptions(
room: "your-room-name",
subject: "Meeting Subject",
userInfo: JitsiMeetUserInfo(
displayName: "Your Name",
email: "your-email@example.com",
avatar: "https://your-avatar-url.com/avatar.jpg",
),
featureFlags: {
"welcomepage.enabled": false,
"invite.enabled": true,
},
);
_jitsiMeet.addListener(JitsiMeetListener(
onConferenceWillJoin: (url) {
print("Conference will join with url: $url");
},
onConferenceJoined: (url) {
print("Conference joined with url: $url");
},
onConferenceTerminated: (url) {
print("Conference terminated with url: $url");
},
onParticipantJoined: (email, name, role, participantId) {
print("Participant joined: $name");
},
onParticipantLeft: (participantId) {
print("Participant left: $participantId");
},
));
await _jitsiMeet.join(options);
}
5. 结束会议
你可以通过调用 leave()
方法来结束会议。
void _endMeeting() async {
await _jitsiMeet.leave();
}
6. 清理资源
在 dispose()
方法中,记得清理监听器。
[@override](/user/override)
void dispose() {
_jitsiMeet.removeAllListeners();
super.dispose();
}