Start Broadcasting and Listen

适用场景

主播开播观众收听功能主要依赖于核心部件(LiveStreamCore),该核心部件提供了开启语音聊天室、关闭语音聊天室,直播间内麦位管理,如申请上麦,邀请上麦,移动麦位,踢人下麦等丰富的 API。
当您通过 快速接入 接入语音聊天室 UIKit 后,如果 UI 风格和您的理想中 UI 风格有出入,您可以使用核心部件半小时内快速搭建语音聊天室的主流程。然后在其之上添加您自己的业务 UI 视图。

环境准备

平台
版本
Flutter
Flutter 3.27.4 及更高版本。
Dart 3.6.2 或更高的版本。
Android
Android Studio 3.5及以上版本。
Android 5.0 及以上版本的 Android 设备。
iOS
Xcode 15.0及以上版本。
请确保您的项目已设置有效的开发者签名。

步骤一:开通服务

请参见 开通服务(TUILiveKit),领取体验版或者开通付费版。

步骤二:导入 LiveStreamCore 组件

在工程的根目录下,通过命令行执行以下命令安装组件 live_stream_core 插件。
flutter pub add live_stream_core
您在接入和使用过程中遇到的任何问题,欢迎给我们 反馈

步骤三:登录

在您的项目中添加如下代码,它的作用是通过调用 RTCRoomEngine 中的登录相关接口完成 TUI 组件的登录。这一步骤至关重要,只有在成功登录之后,您才能正常使用 LiveStreamCore 提供的各项功能。
final result = await TUIRoomEngine.login(
'Replace with your activated SDKAppID',
'Replace with your userId',
'Replace with your userSig');
参数说明
这里详细介绍一下 login 函数中所需要用到的几个关键参数:
参数
类型
说明
SDKAppID
int
在步骤一中的最后一步中您已经获取到,这里不再赘述。
UserID
String
当前用户的 ID,字符串类型,只允许包含英文字母(a-z 和 A-Z)、数字(0-9)、连词符和下划线。
userSig
String
使用 步骤一 的第3步中获取的 SecretKey 对 SDKAppID、UserID 等信息进行加密,就可以得到 UserSig,它是一个鉴权用的票据,用于腾讯云识别当前用户是否能够使用 TRTC 的服务。您可以通过控制台中的 辅助工具 生成一个临时可用的 UserSig。更多信息请参见 如何计算及使用 UserSig
说明:
开发环境:如果您正在本地开发调试阶段,可以采用本地 GenerateTestUserSig.genTestSig函数生成 userSig。该方法中 SDKSecretKey 很容易被反编译逆向破解,一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量。
生产环境:如果您的项目要发布上线,请采用 服务端生成 UserSig 的方式。

步骤四:使用核心部件实现语音聊天室功能

说明:
使用过程中您若有任何 API 调用方式的疑问,可参考 Example 示例。

创建语音聊天室核心部件实例

您需要先创建一个控制器 SeatGridController ,然后再将其赋值给语音聊天室核心部件 SeatGridWidget
SeatGridController 负责提供API, SeatGridWidget 用于展示麦位UI。您可将 SeatGridWidget 添加在您需要展示麦位 UI 的任何地方。
final controller = SeatGridController();
SeatGridWidget(controller: controller);

主播开启语音聊天室和观众加入语音聊天室

主播开启语音聊天室:开启一个语音聊天室,并将本地麦克风采集的数据推流到语音聊天室。
import 'package:live_stream_core/live_stream_core.dart';
import 'package:rtc_room_engine/rtc_room_engine.dart';

final roomInfo = TUIRoomInfo(roomId: 'replace with your roomId');
roomInfo.name = 'replace with your roomName';
roomInfo.seatMode = TUISeatMode.applyToTake;
roomInfo.isSeatEnabled = true;
roomInfo.roomType = TUIRoomType.livingRoom;
final startVoiceRoomResult = await controller.startVoiceRoom(roomInfo);

final startMicrophoneResult = await controller.startMicrophone();
观众加入直播间:
import 'package:live_stream_core/live_stream_core.dart';

final result = await controller.joinVoiceRoom('replace with your roomId');
主播开启语音聊天室
观众加入语音聊天室








观众连麦

您如果需要实现观众连麦功能,可参见 麦位管理 文档。

设置麦位列表排列布局

您可通过 setLayoutMode 接口实现麦位布局。
setLayoutMode 这一接口内置3种布局:聚焦布局(focus)、宫格布局(grid)和垂直布局(vertical),同时也支持自定义布局(free)。
// 接口定义
void setLayoutMode(LayoutMode layoutMode, SeatWidgetLayoutConfig? layoutConfig);

// 接口使用
import 'package:live_stream_core/live_stream_core.dart';

// 设置宫格布局
controller.setLayoutMode(LayoutMode.grid, null);

// 设置聚焦布局
controller.setLayoutMode(LayoutMode.focus, null);

// 设置垂直布局
controller.setLayoutMode(LayoutMode.vertical, null);

// 设置自定义布局
final rowConfig = SeatWidgetLayoutRowConfig(
count: 2,
seatSpacing: 20.0,
seatSize: const Size(80, 80),
alignment: SeatWidgetLayoutRowAlignment.spaceBetween);
final layoutConfig = SeatWidgetLayoutConfig(
rowConfigs: [rowConfig, rowConfig]);
controller.setLayoutMode(LayoutMode.free, layoutConfig);
说明:
自定义布局的参数设置可查看 SeatWidgetLayoutRowConfig 中参数说明,其中对齐方式 alignment 可参见 SeatWidgetLayoutRowAlignment 中描述对齐方式效果可参见 示意图
宫格布局
元素布局
纵向布局
自定义布局

















自定义布局对齐方式示意图:





自定义麦位视图

如果您认为我们默认的 UI 不满足您的需求,您想自定义自己的麦位UI,您可通过 SeatGridWidget 的参数 seatWidetBuilder 实现指定麦位的 UI 样式。
// seatWidetBuilder 定义
typedef SeatWidgetBuilder = Widget Function(
BuildContext context,
ValueNotifier<TUISeatInfo> seatInfoNotifier,
ValueNotifier<int> volumeNotifier);
// 使用示例
import 'package:live_stream_core/live_stream_core.dart';
import 'package:rtc_room_engine/rtc_room_engine.dart';

SeatGridWidget(
controller: controller,
onSeatWidgetTap: (TUISeatInfo seatInfo) {
// debugPrint('click seatWidget index:${seatInfo.index}');
},
seatWidgetBuilder: (
BuildContext context,
ValueNotifier<TUISeatInfo> seatInfoNotifier,
ValueNotifier<int> volumeNotifier) {
// 返回您的自定义麦位部件
return Container();
}
)
自定义麦位布局前
自定义麦位布局后