You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Jitsi Meet遇问题:无法创建会议,需等待主持人或登录

Flutter集成Jitsi Meet创建会议提示“等待主持人”/“登录”问题解决

核心问题原因

当前配置下,meet.jit.si的默认房间规则会要求主持人权限,且未设置让第一个进入的用户自动获取主持人身份;“登录”提示大概率是房间访客权限未放开,或者用户信息传递不完整导致的。

分步解决

1. 生成随机会议ID

固定房间名容易触发权限冲突,直接生成随机8位字母数字组合作为房间ID:

// 生成随机会议ID
String generateRandomRoomId() {
  const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
  return List.generate(8, (index) => chars[Random().nextInt(chars.length)]).join();
}

2. 配置会议权限,自动赋予创建者主持人身份

修改JitsiMeetConferenceOptions的配置,重点添加主持人权限和访客允许规则:

var options = JitsiMeetConferenceOptions(
  serverURL: "https://meet.jit.si",
  room: roomName,
  configOverrides: {
    "startWithAudioMuted": isAudioMuted,
    "startWithVideoMuted": isVideoMuted,
    "subject": "Jitsi With Flutter",
    // 关闭欢迎页和预加入页,直接进入会议
    "disableWelcomePage": true,
    "prejoinPageEnabled": false,
    // 让第一个进入的用户自动成为主持人
    "startHosting": true,
    "requireDisplayName": true,
    // 允许访客直接加入,不需要登录
    "guestPolicy": "ALWAYS_ALLOW",
  },
  featureFlags: {
    "unsaferoomwarning.enabled": false,
    "welcomepage.enabled": false,
    // 开启主持人控制权限
    "enableHostControls": true,
    // 允许访客加入会议
    "guestCanJoin": true,
  },
  userInfo: JitsiMeetUserInfo(
    displayName: name,
    email: _authMethods.user.email,
  ),
);

3. 完善用户信息处理

避免因用户displayName为空导致的权限问题,添加默认值:

String name = username.isNotEmpty ? username : (_authMethods.user.displayName ?? 'Guest');

4. 检查Android端配置

确保AndroidManifest.xml里的权限和meta-data配置完整:

<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" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<meta-data
    android:name="org.jitsi.meet.CONFIG_URL"
    android:value="https://meet.jit.si/config.js" />

完整修改后的代码

import 'dart:math';
import 'package:../resources/auth_methods.dart';
import 'package:../resources/firestore_methods.dart';
import 'package:jitsi_meet_flutter_sdk/jitsi_meet_flutter_sdk.dart';

class JitsiMeetMethods {
  final AuthMethods _authMethods = AuthMethods();
  final FirestoreMethods _firestoreMethods = FirestoreMethods();

  // 生成随机8位会议ID
  String generateRandomRoomId() {
    const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
    return List.generate(8, (index) => chars[Random().nextInt(chars.length)]).join();
  }

  void createMeeting(
      {required bool isAudioMuted,
      required bool isVideoMuted,
      String username = ''}) async {
    try {
      var jitsiMeet = JitsiMeet();

      String name = username.isNotEmpty ? username : (_authMethods.user.displayName ?? 'Guest');
      String roomName = generateRandomRoomId();

      var options = JitsiMeetConferenceOptions(
        serverURL: "https://meet.jit.si",
        room: roomName,
        configOverrides: {
          "startWithAudioMuted": isAudioMuted,
          "startWithVideoMuted": isVideoMuted,
          "subject": "Jitsi With Flutter",
          "disableWelcomePage": true,
          "prejoinPageEnabled": false,
          "startHosting": true,
          "requireDisplayName": true,
          "guestPolicy": "ALWAYS_ALLOW",
        },
        featureFlags: {
          "unsaferoomwarning.enabled": false,
          "welcomepage.enabled": false,
          "enableHostControls": true,
          "guestCanJoin": true,
        },
        userInfo: JitsiMeetUserInfo(
          displayName: name,
          email: _authMethods.user.email,
        ),
      );
      _firestoreMethods.addToMeetingHistory(roomName);
      await jitsiMeet.join(options);
    } catch (err) {
      print("Error:$err");
    }
  }
}

内容的提问来源于stack exchange,提问作者Samarth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:34:51