Flutter实时音视频房间管理插件rtc_room_engine的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter实时音视频房间管理插件rtc_room_engine的使用

概述

RTC Room Engine SDK 是一个适用于多人音频和视频对话场景的产品,如商务会议、网络研讨会和在线教育。

RTC Room Engine

激活服务

在使用 rtc_room_engine 发起会议之前,请在 TRTC控制台 创建一个应用。您可以按照以下步骤激活 TRTC 会议产品服务并获得免费的14天试用版。

步骤

  1. 访问 TRTC控制台 > 应用程序,选择 创建应用程序
  2. 在创建应用程序弹出框中,选择 会议 并输入应用程序名称,点击 创建
  3. 完成应用程序创建后,默认进入应用程序详情页面,在浮动窗口中选择 免费试用,并点击 免费开始
  4. 激活完成后,您可以在当前页面查看版本信息。这里的 SDKAppIDSDKSecretKey 将用于集成指南。

登录到 rtc_room_engine

将以下代码添加到您的项目中,通过调用 rtc_room_engine 中的相关接口来初始化组件。此步骤至关重要,因为只有在初始化之后才能使用 rtc_room_engine 的各种功能。

import 'package:rtc_room_engine/rtc_room_engine.dart';

TUIActionCallback actionCallback = await TUIRoomEngine.login(
       1400000001,     // 请替换为在激活服务步骤中获取的 SDKAppID
       "userId",       // 请替换为您的 UserID
       "xxxxxxxxxx");  // 您可以在控制台计算 UserSig 并将其填入此处
if (actionCallback.code == TUIError.success) {
    // 登录成功
} else {
    // 登录失败
}

参数说明

  • SDKAppID:在激活服务中获取。
  • UserID:当前用户的 ID,只能包含英文字母(a-z 和 A-Z)、数字(0-9)、连字符(-)和下划线(_)。
  • UserSig:腾讯云用来验证当前用户是否有权使用 TRTC 服务的认证凭证。可以通过使用 SDKSecretKey 加密 SDKAppIDUserID 等信息生成。您可以在 TRTC 控制台的 UserSig 工具 页面生成临时的 UserSig。

使用 rtc_room_engine

创建房间

通过调用 rtc_room_enginecreateRoom 方法,您可以创建一个房间。

var _roomEngine = TUIRoomEngine.sharedInstance();

var roomInfo = TUIRoomInfo(roomId: 'your room id');
TUIActionCallback actionCallback = await _roomEngine.createRoom(roomInfo);

if (actionCallback.code == TUIError.success) {
    // 创建房间成功
} else {
    // 创建房间失败
}

加入房间

通过调用 rtc_room_engineenterRoom 方法,您可以进入指定的房间。

var _roomEngine = TUIRoomEngine.sharedInstance();

TUIValueCallBack<TUIRoomInfo> valueCallback = await _roomEngine.enterRoom("your room id");

if (valueCallback.code == TUIError.success) {
    // 进入房间成功
} else {
    // 进入房间失败
}

更多功能

自定义美颜设置

步骤 1:启用视频处理

var trtcCloud = (await TRTCCloud.sharedInstance())!;
var enable = true;
trtcCloud.enableCustomVideoProcess(enable);

步骤 2:启用视频处理(以 Android 平台为例,使用 腾讯效果 SDK

// 创建 BeautyProcess 类实现 ITXCustomBeautyProcesser
class BeautyProcess implements ITXCustomBeautyProcesser {

    @Override
    public TXCustomBeautyDef.TXCustomBeautyPixelFormat getSupportedPixelFormat() {
        return TXCustomBeautyDef.TXCustomBeautyPixelFormat
                                .TXCustomBeautyPixelFormatTexture2D;
    }

    @Override
    public TXCustomBeautyDef.TXCustomBeautyBufferType getSupportedBufferType() {
        return TXCustomBeautyDef.TXCustomBeautyBufferType
                              .TXCustomBeautyBufferTypeTexture;
    }

    @Override
    public void onProcessVideoFrame(TXCustomBeautyDef.TXCustomBeautyVideoFrame srcVideoFrame, 
                                  TXCustomBeautyDef.TXCustomBeautyVideoFrame destVideoFrame) {
        // 处理您的视频帧
        destVideoFrame.texture.textureId = srcVideoFrame.texture.textureId;
    }
}

// 创建 BeautyFactory 类实现 ITXCustomBeautyProcesserFactory
class TencentEffectBeauty implements ITXCustomBeautyProcesserFactory {
    private BeautyProcess mBeautyProcess;

    @Override
    public ITXCustomBeautyProcesser createCustomBeautyProcesser() {
        // 创建 BeautyProcess
        mBeautyProcess = new BeautyProcess();
        return mBeautyProcess;
    }

    @Override
    public void destroyCustomBeautyProcesser() {
        if (null != mBeautyProcess) {
            // 销毁 BeautyProcess
            mBeautyProcess = null;
        }
    }
}

// 注册您的 BeautyFactory 类到 TRTCCloudPlugin
TRTCCloudPlugin.register(new TencentEffectBeauty());

示例 Demo

以下是一个完整的 Flutter 示例,展示了如何使用 rtc_room_engine 插件:

import 'package:flutter/material.dart';
import 'package:rtc_room_engine/rtc_room_engine.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter RTC Room Engine Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var _roomEngine = TUIRoomEngine.sharedInstance();

  Future<void> _login() async {
    TUIActionCallback actionCallback = await TUIRoomEngine.login(
      1400000001, // 替换为实际的 SDKAppID
      "testUserId", // 替换为实际的 UserID
      "userSig" // 替换为实际的 UserSig
    );

    if (actionCallback.code == TUIError.success) {
      print('Login success');
    } else {
      print('Login failed');
    }
  }

  Future<void> _createRoom() async {
    var roomInfo = TUIRoomInfo(roomId: '123456');
    TUIActionCallback actionCallback = await _roomEngine.createRoom(roomInfo);

    if (actionCallback.code == TUIError.success) {
      print('Create room success');
    } else {
      print('Create room failed');
    }
  }

  Future<void> _joinRoom() async {
    TUIValueCallBack<TUIRoomInfo> valueCallback = await _roomEngine.enterRoom("123456");

    if (valueCallback.code == TUIError.success) {
      print('Join room success');
    } else {
      print('Join room failed');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('RTC Room Engine Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _login,
              child: Text('Login'),
            ),
            ElevatedButton(
              onPressed: _createRoom,
              child: Text('Create Room'),
            ),
            ElevatedButton(
              onPressed: _joinRoom,
              child: Text('Join Room'),
            ),
          ],
        ),
      ),
    );
  }
}

沟通与反馈

如果您在使用我们产品的过程中有任何建议或意见,请随时通过 info_rtc@tencent.com 联系我们。您的反馈非常宝贵。


更多关于Flutter实时音视频房间管理插件rtc_room_engine的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter实时音视频房间管理插件rtc_room_engine的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用Flutter实时音视频房间管理插件rtc_room_engine的代码案例。这个插件通常用于创建、加入和管理音视频房间。为了展示其基本用法,以下代码包含了初始化、加入房间、离开房间以及处理房间事件的基本流程。

首先,确保你已经在pubspec.yaml文件中添加了rtc_room_engine依赖:

dependencies:
  flutter:
    sdk: flutter
  rtc_room_engine: ^latest_version  # 请替换为实际最新版本号

然后,运行flutter pub get来安装依赖。

接下来是代码示例:

import 'package:flutter/material.dart';
import 'package:rtc_room_engine/rtc_room_engine.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late RtcRoomEngine _roomEngine;
  String _roomId = 'test_room_123';
  String _userId = 'user_123';
  bool _isJoined = false;

  @override
  void initState() {
    super.initState();
    // 初始化RtcRoomEngine
    _roomEngine = RtcRoomEngine();

    // 监听房间事件
    _roomEngine.onRoomJoined.listen((roomId) {
      setState(() {
        _isJoined = true;
      });
      print('Joined room: $roomId');
    });

    _roomEngine.onRoomLeft.listen((roomId) {
      setState(() {
        _isJoined = false;
      });
      print('Left room: $roomId');
    });

    _roomEngine.onError.listen((error) {
      print('Error: $error');
    });
  }

  @override
  void dispose() {
    // 释放资源
    _roomEngine.dispose();
    super.dispose();
  }

  void _joinRoom() async {
    try {
      await _roomEngine.joinRoom(_roomId, _userId);
    } catch (e) {
      print('Failed to join room: $e');
    }
  }

  void _leaveRoom() async {
    try {
      await _roomEngine.leaveRoom(_roomId);
    } catch (e) {
      print('Failed to leave room: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('RTC Room Engine Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                _isJoined ? 'Joined Room: $_roomId' : 'Not Joined to Any Room',
                style: TextStyle(fontSize: 24),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _isJoined ? _leaveRoom : _joinRoom,
                child: Text(_isJoined ? 'Leave Room' : 'Join Room'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖导入:在pubspec.yaml文件中添加rtc_room_engine依赖。
  2. 初始化:在initState方法中初始化RtcRoomEngine实例,并设置房间事件监听器。
  3. 加入房间:定义_joinRoom方法,调用_roomEngine.joinRoom方法加入指定房间。
  4. 离开房间:定义_leaveRoom方法,调用_roomEngine.leaveRoom方法离开当前房间。
  5. UI展示:使用Flutter的Material Design组件展示当前房间状态,并提供加入/离开房间的按钮。

注意事项:

  • 确保rtc_room_engine插件支持你的Flutter版本。
  • 插件的具体API和事件可能会有所不同,请参考官方文档以获取最新和最准确的用法。
  • 在实际项目中,你可能需要处理更多的房间事件和错误情况。

这个示例提供了一个基本框架,你可以根据自己的需求进一步扩展和定制。

回到顶部