在我的 flutter 应用程序中使用 Agora rtc 引擎时出现问题

2023-12-07

我在使用 agora rtc 引擎时遇到问题。每次启动项目时我都会收到此错误消息

https://pastebin.com/DuniUQYd

我不知道问题是什么,因为错误消息对我来说不是很清楚。在代码中,我还发布了我正在使用的频道名称应用程序 ID 和令牌,也是我生成的

这也是代码

import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';

class LiveStreaming extends StatefulWidget {
 const LiveStreaming({Key? key}) : super(key: key);

 @override
 _LiveStreamingState createState() => _LiveStreamingState();
}

class _LiveStreamingState extends State<LiveStreaming> {
 String appId = '4235f9d46dd349e0b9df3ad2ea011b7d';
 String channelName = "ajanba";
 String token = "007eJxTYHCe9kzt0Gtu0ZfqVv99H1YoVC06Yltmoth98HnQfaFEEX4FBhMjY9M0yxQTs5QUYxPLVIMky5Q048QUo9REA0PDJPOUtXmJyQ2BjAxxB+cyMzJAIIjPxpCYlZiXlMjAAABaqB+p";

 int uid = 0; // uid of the local user

 int? _remoteUid; // uid of the remote user
 bool _isJoined = false; // Indicates if the local user has joined the channel
 bool _isHost =
     true; // Indicates whether the user has joined as a host or audience
 late RtcEngine agoraEngine; // Agora engine instance

 final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey =
     GlobalKey<ScaffoldMessengerState>(); // Global key to access the scaffold

 showMessage(String message) {
   scaffoldMessengerKey.currentState?.showSnackBar(SnackBar(
     content: Text(message),
   ));
 }

 @override
 void initState() {
   super.initState();
   // Set up an instance of Agora engine
   setupVideoSDKEngine();
 }

 Future<void> setupVideoSDKEngine() async {
   // retrieve or request camera and microphone permissions
   await [Permission.microphone, Permission.camera].request();

   //create an instance of the Agora engine
   agoraEngine = createAgoraRtcEngine();
   await agoraEngine.initialize(RtcEngineContext(appId: appId));

   await agoraEngine.enableVideo();

   // Register the event handler
   agoraEngine.registerEventHandler(
     RtcEngineEventHandler(
       onJoinChannelSuccess: (RtcConnection connection, int elapsed) {
         showMessage(
             "Local user uid:${connection.localUid} joined the channel");
         setState(() {
           _isJoined = true;
         });
       },
       onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) {
         showMessage("Remote user uid:$remoteUid joined the channel");
         setState(() {
           _remoteUid = remoteUid;
         });
       },
       onUserOffline: (RtcConnection connection, int remoteUid,
           UserOfflineReasonType reason) {
         showMessage("Remote user uid:$remoteUid left the channel");
         setState(() {
           _remoteUid = null;
         });
       },
     ),
   );
 }

 void join() async {
   // Set channel options
   ChannelMediaOptions options;

   // Set channel profile and client role
   if (_isHost) {
     options = const ChannelMediaOptions(
       clientRoleType: ClientRoleType.clientRoleBroadcaster,
       channelProfile: ChannelProfileType.channelProfileLiveBroadcasting,
     );
     await agoraEngine.startPreview();
   } else {
     options = const ChannelMediaOptions(
       clientRoleType: ClientRoleType.clientRoleAudience,
       channelProfile: ChannelProfileType.channelProfileLiveBroadcasting,
     );
   }

   await agoraEngine.joinChannel(
     token: token,
     channelId: channelName,
     options: options,
     uid: uid,
   );
 }

 @override
 void dispose() async {
   await agoraEngine.leaveChannel();
   super.dispose();
 }

 void leave() {
   setState(() {
     _isJoined = false;
     _remoteUid = null;
   });
   agoraEngine.leaveChannel();
 }

 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     scaffoldMessengerKey: scaffoldMessengerKey,
     home: Scaffold(
         appBar: AppBar(
           title: const Text('Get started with Interactive Live Streaming'),
         ),
         body: ListView(
           padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4),
           children: [
             // Container for the local video
             Container(
               height: 240,
               decoration: BoxDecoration(border: Border.all()),
               child: Center(child: _videoPanel()),
             ),
             // Radio Buttons
             Row(children: <Widget>[
               Radio<bool>(
                 value: true,
                 groupValue: _isHost,
                 onChanged: (value) => _handleRadioValueChange(value),
               ),
               const Text('Host'),
               Radio<bool>(
                 value: false,
                 groupValue: _isHost,
                 onChanged: (value) => _handleRadioValueChange(value),
               ),
               const Text('Audience'),
             ]),
             // Button Row
             Row(
               children: <Widget>[
                 Expanded(
                   child: ElevatedButton(
                     child: const Text("Join"),
                     onPressed: () => {join()},
                   ),
                 ),
                 const SizedBox(width: 10),
                 Expanded(
                   child: ElevatedButton(
                     child: const Text("Leave"),
                     onPressed: () => {leave()},
                   ),
                 ),
               ],
             ),
             // Button Row ends
           ],
         )),
   );
 }

 Widget _videoPanel() {
   if (!_isJoined) {
     return const Text(
       'Join a channel',
       textAlign: TextAlign.center,
     );
   } else if (_isHost) {
     // Local user joined as a host
     return AgoraVideoView(
       controller: VideoViewController(
         rtcEngine: agoraEngine,
         canvas: VideoCanvas(uid: uid),
       ),
     );
   } else {
     // Local user joined as audience
     if (_remoteUid != null) {
       return AgoraVideoView(
         controller: VideoViewController.remote(
           rtcEngine: agoraEngine,
           canvas: VideoCanvas(uid: _remoteUid),
           connection: RtcConnection(channelId: channelName),
         ),
       );
     } else {
       return const Text(
         'Waiting for a host to join',
         textAlign: TextAlign.center,
       );
     }
   }
 }

// Set the client role when a radio button is selected
 void _handleRadioValueChange(bool? value) async {
   setState(() {
     _isHost = (value == true);
   });
   if (_isJoined) leave();
 }
}

我刚刚用 agora 完成了我的项目,所以也许我可以帮助你,但你粘贴的上述问题的错误消息链接不起作用, 请尽快更新以便快速解决

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在我的 flutter 应用程序中使用 Agora rtc 引擎时出现问题 的相关文章

  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • Antlr 解析器运算符优先级

    考虑以下语法 我对运算符优先级有疑问 例如 res 2 a b有一个类似的解析树res 2 a b 我知道问题出在哪里 但我没有想到没有相互左递归的 漂亮 解决方案 你能帮我一点忙吗 该语法与自定义访问者一起使用 grammar Math
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • PrimeFaces 对话框参考父级

    我有一个 xhtml 页面 显示带有条目的数据表 我还有一个用于插入新条目的按钮 该按钮显示一个包含表单的对话框 插入表格用作
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • NSArrayController 无需将大型数据集加载到数组中

    我想使用 NSArrayController 向 NSTableView 提供数据 我面临的问题是我不想将所有数据预先加载到数组中 然后使用数组控制器setContent 方法 我的数据模型是一个管理数百万条记录的大型现有代码库 它包含有效
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • 禁用允许文本选择的

    残疾人可以吗
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下

随机推荐

  • Java 中 == 和 .equals 之间的区别。

    我知道这已经被涵盖了 但我在这里看到了不一致的论点 所以如果我有 String a apple2e String b apple2e System out println a b a b I get FALSE 据我了解 这是因为a and
  • 将工件添加到标准 Maven 部署

    我希望有人可以帮助我进行 Maven 部署 通常通过发布插件运行 我想在发布时将除了打包的 jar 之外的文件部署到存储库 例如特定的说明文档和生成的 SQL 文件 如果我不必使用就好了deploy deploy file为每一个 如果我可
  • 如何控制 PyYAML 对我的数据使用哪种标量形式?

    我有一个具有短字符串属性和长多行字符串属性的对象 我想将短字符串写为 YAML 带引号的标量 将多行字符串写为文字标量 my obj short Hello my obj long Line1 nLine2 nLine3 我希望 YAML
  • 用户身份验证后重定向回页面选项卡?

    在用户验证我的应用程序后 我应该如何将用户重定向回我的页面选项卡 我无法输入一个特定的网址进行重定向 因为我的应用程序将驻留在多个页面上 所以我需要以某种方式获取页面的 id 并将其放入 url 中 我尝试过使用会话变量 但它似乎对我不起作
  • PHP 四舍五入不起作用

    我有这个代码 我想将两位小数四舍五入到一半 我期望值为 0 58 但上面的代码打印 0 57 我怎样才能做到这一点 如果您期望 0 58 则不必使用 半轮 而是使用 ceil 函数 v 0 575 echo ceil v 100 100 s
  • SQLAlchemy 中的编译扩展:索引中使用的函数

    我想在 SQLAlchemy 中创建一个不区分大小写的唯一约束 它可以与 Postgres 和 SQLite 一起使用 在Postgres中是这样实现的 SQL CREATE UNIQUE INDEX my index ON my tabl
  • 删除前面没有 NULL 的换行符

    我有一串数据 在我需要删除的行中插入了随机 CRLF 并以正确的 CRLF 结束了我需要保留的数据 我尝试使用 Notepad 正则表达式尝试将以下内容替换为空 NULL r n 但是 它不会删除插入的 CRLF 关于如何在 Notepad
  • 使用用户输入创建新对象 [JAVA]

    您好 我正在尝试创建一个程序 每当用户输入某个对象的新信息时就创建一个新对象 目前我有这个 import java util Scanner public class Main public static void main String
  • 无法销毁使用 Core Data 和 SQLite 创建的持久存储

    我有一个 iOS 应用程序 我想在每次启动时都从一个新的核心数据数据库开始 存储类型是 SQLite 但是 当我调用 persistenceStoreCoordinator destroyPersistentStore 时 100 都会收到
  • 通过 preg_replace 使用文本中的电话号码

    我可以使用 preg replace 在文本中查找电话号码 text preg replace d s 8 25 0 9 d strong 1 strong text 但是 我正在开发一个小功能 其中电话号码将被混淆 因此我需要实际的电话号
  • 是否有适用于 iphone sdk 的谷歌日历 api?

    有没有适用于 iphone sdk 的谷歌日历 api 目前我开发了一个 iphone 日历本机应用程序 在此应用程序中 我想从两侧与谷歌日历同步 所以我想知道是否有任何谷歌日历 API 可以完成这项工作 I found iphone gc
  • 上下文菜单的 SwiftUI 自定义视图

    我想在视图上长按手势时实现相同的自定义弹出视图 如照片 来自 Tweeter 应用程序 所示 这样我就可以同时显示自定义视图和上下文菜单 您需要进行定制ContextMenu using UIContextMenu from UIKit s
  • 我的 getJSON 调用随机返回结果,而不是它们被调用的顺序

    我需要制作多个getJSON请求将数据写入 HTML 文件 此示例显示了 3 个请求 但我将以相同的格式添加最多 6 个请求 可能更多 我的问题是结果以随机顺序返回 而不是按调用顺序返回 我怀疑它们是按照请求完成的顺序返回的 我每次都必须以
  • SQL 中的空字符文字是什么?

    我想知道 a 的字面意思是什么空字符 例如 0 在 SQL 中 Note 不是 NULL 字段值 而是空字符 see link 我有一列混合了典型字符和空字符 我正在尝试用不同的值替换空字符 我本以为以下内容会起作用 但没有成功 selec
  • 如何在 Swift 中按长度反向/降序对字符串数组进行排序?

    我想根据长度按降序排列字符串集合 首先 我不确定是否应该使用集合或数组 因为集合是无序事物的集合 并且我不需要集合中的元素必须位于有序集合中 我遇到了sorted 方法和sorted by 方法 但无法弄清楚如何按长度降序排列 仅按字母顺序
  • 使 WPF 数据网格中的行不可聚焦

    我试图弄清楚如何使以下 WPF DataGrid 中的行不可聚焦 正如你所看到的 我尝试添加一个
  • Unity C#,如何从另一个脚本调用函数来启动动画?

    using UnityEngine using System Collections public class ClickToMoveScript MonoBehaviour public string Chopping Chopping
  • 加载图像时出现内存不足异常

    我使用以下代码将图像作为缩略图加载到 FlowLayoutPanel 控件 不幸的是我遇到了 OutOfMemory 异常 正如您已经猜测的那样 内存泄漏是在该行发现的 Pedit Image System Drawing Image Fr
  • 使用流畅的 nhibernate 自动映射 IDictionary

    我有一个简单的类 如下所示 public class Item some properties public virtual IDictionary
  • 在我的 flutter 应用程序中使用 Agora rtc 引擎时出现问题

    我在使用 agora rtc 引擎时遇到问题 每次启动项目时我都会收到此错误消息 https pastebin com DuniUQYd 我不知道问题是什么 因为错误消息对我来说不是很清楚 在代码中 我还发布了我正在使用的频道名称应用程序