Flutter视频会议插件jitsi_meet_flutter_sdk_secure的使用

Flutter视频会议插件jitsi_meet_flutter_sdk_secure的使用

Jitsi Meet Flutter SDK

License pub package

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"
      ),
    );
  • 所有可以添加到 configOverrides 的值可以在 这里 查找。
  • 所有可以添加到 featureFlags 的值可以在 这里 查找。

JitsiMeetUserInfo({String displayName, String email, String avatar})

JitsiMeetUserInfo 构造函数。 注意:avatar 应该是一个 URL。

JitsiMeetEventListener

此类旨在作为来自原生 SDK 的事件的监听器。它将接收事件处理器作为参数。

conferenceJoined(String url)

当会议加入时被调用。

  • url: 会议 URL

conferenceTerminated(String url, Object? error)

当活动会议结束时被调用,无论是由于用户选择还是由于失败。

  • url: 会议 URL
  • error: 如果会议顺利完成则缺失,否则包含错误消息

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: 发送者的 participantId
  • message: 内容

screenShareToggled(String participantId, bool sharing)

当参与者开始或停止分享其屏幕时被调用。

  • participantId: 参与者的 ID
  • sharing: 屏幕共享的状态

chatMessageReceived(String senderId, String message, bool isPrivate, String? timestamp)

当收到聊天文本消息时被调用。

  • senderId: 发送消息的参与者的 ID
  • message: 消息的内容
  • 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

1 回复

更多关于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();
}
回到顶部