Flutter实时音视频通信插件tencent_rtc_sdk的使用
Flutter实时音视频通信插件tencent_rtc_sdk的使用
利用腾讯21年的网络和音视频技术经验,Tencent Real-Time Communication (TRTC) 提供了群组音频/视频通话和低延迟互动直播解决方案。借助TRTC,您可以快速开发出成本效益高、低延迟且高质量的互动音频/视频服务。
Demo 快速开始
SDK 快速集成
请参阅 快速集成(Flutter)
SDK 类文件
- trtc_cloud - 腾讯云TRTC核心功能接口。
- trtc_cloud_video_view - 提供用于渲染视频的组件
<code>TRTCCloudVideoView</code>
。 - tx_audio_effect_manager - 腾讯云音频效果管理模块。
- tx_device_manager - 腾讯云设备管理模块。
- trtc_cloud_def - TRTC关键类定义。描述:如分辨率和质量等级等接口化和常量值的定义。
- trtc_cloud_listener - 腾讯云TRTC事件通知接口。
示例调用
1. 初始化
// 创建 TRTCCloud 单例
trtcCloud = await TRTCCloud.sharedInstance();
// 腾讯云音频效果管理模块
txDeviceManager = trtcCloud.getDeviceManager();
// 腾讯云音频效果管理模块
txAudioManager = trtcCloud.getAudioEffectManager();
2. 进入/退出房间
// 进入房间
trtcCloud.enterRoom(
TRTCParams(
sdkAppId: sdkAppId,
userId: userId,
userSig: userSig,
roomId: roomId),
TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL);
// 退出房间
trtcCloud.exitRoom();
3. 监听器注册
// 注册监听器
TRTCCloudListener listener = TRTCCloudListener(
onError: (errorCode, errorMessage) {
debugPrint("TRTCCloudListener onError errCode:$errCode errMsg: $errMsg");
}
// 其他事件...
)
trtcCloud.registerListener(listener);
// 移除监听器
trtcCloud.unRegisterListener(listener);
4. 播放本地视频
// 参数:
// frontCamera: `true`:前置摄像头;`false`:后置摄像头
// viewId: 由 `TRTCCloudVideoView` 生成的视图ID
TRTCCloudVideoView(
onViewCreated: (viewId) {
trtcCloud.startLocalPreview(true, viewId);
});
5. 显示远程视频
// 参数:
// userId: 指定远程用户的用户ID
// streamType: 指定要观看的视频流类型
///* 高清大图:TRTCVideoStreamType.big
///* 低清大图:TRTCVideoStreamType.small
// viewId: 由 `TRTCCloudVideoView` 生成的视图ID
TRTCCloudVideoView(
onViewCreated: (viewId) {
trtcCloud.startRemoteView(userId, TRTCVideoStreamType.big, viewId);
});
6. 显示远程屏幕共享
// 参数:
// userId: 指定远程用户的用户ID
// streamType: 指定远程用户的视频流类型
///* 子流(屏幕分享):TRTCVideoStreamType.sub
// viewId: 由 `TRTCCloudVideoView` 生成的视图ID
TRTCCloudVideoView(
onViewCreated: (viewId) {
trtcCloud.startRemoteView(userId, TRTCVideoStreamType.sub, viewId);
});
如何查看TRTC日志?
TRTC日志默认被压缩并加密,扩展名为XLOG。您可以设置 setLogCompressEnabled
来指定是否加密日志。如果日志文件名包含C(压缩),则日志已压缩加密;如果包含R(原始),则日志为明文。
- iOS:应用沙盒的 Documents/log 文件夹
- Android
- 6.7或以下版本:
/sdcard/log/tencent/liteav
- 6.8或以上版本:
/sdcard/Android/data/package name/files/log/tencent/liteav/
- 6.7或以下版本:
完整示例代码
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_foreground_task/flutter_foreground_task.dart';
import 'package:provider/provider.dart';
import 'package:trtc_demo/ui/login.dart';
import 'package:trtc_demo/ui/meeting.dart';
import 'package:trtc_demo/ui/member_list.dart';
import 'package:trtc_demo/ui/test/test_api.dart';
import 'package:trtc_demo/models/meeting_model.dart';
part 'main_ext.dart';
void main() {
FlutterForegroundTask.initCommunicationPort();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
// 请求权限并初始化服务。
ServiceManager()._requestPermissions();
ServiceManager()._initService();
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => MeetingModel(),
child: MaterialApp(
routes: {
"/": (context) => LoginPage(),
"/login": (context) => LoginPage(),
"/meeting": (context) => MeetingPage(),
"/memberList": (context) => MemberListPage(),
"/test": (context) => TestPage(),
},
),
);
}
}
更多关于Flutter实时音视频通信插件tencent_rtc_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter实时音视频通信插件tencent_rtc_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个使用 tencent_rtc_sdk
插件在 Flutter 中实现实时音视频通信的基本代码示例。这个示例将涵盖初始化 SDK、加入房间、发布音视频流以及订阅其他用户的音视频流的基本流程。
首先,确保你的 Flutter 项目中已经添加了 tencent_rtc_sdk
依赖。在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
tencent_rtc_sdk: ^最新版本号 # 请替换为最新版本号
然后运行 flutter pub get
来获取依赖。
接下来,是主要的代码实现:
main.dart
import 'package:flutter/material.dart';
import 'package:tencent_rtc_sdk/tencent_rtc_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late TRTCClient _client;
late String _roomId;
late String _userId;
@override
void initState() {
super.initState();
// 初始化 TRTCClient
_client = TRTCClient();
_client.setListener(TRTCClientListener());
// 设置 SDK 相关的配置(例如,AppID)
var config = TRTCClientConfig();
config.sdkAppId = '你的SDK_APP_ID'; // 请替换为你的SDK_APP_ID
_client.init(config);
// 设置房间ID和用户ID(实际应用中这些值可能来自服务器或其他逻辑)
_roomId = '123456';
_userId = 'user_${DateTime.now().millisecondsSinceEpoch}';
// 加入房间
_joinRoom();
}
Future<void> _joinRoom() async {
var roomConfig = TRTCRoomConfig();
roomConfig.roomId = _roomId;
roomConfig.userId = _userId;
try {
await _client.enterRoom(roomConfig);
print('Joined room: $_roomId');
// 发布音视频流
_publishStream();
} catch (e) {
print('Failed to join room: $e');
}
}
Future<void> _publishStream() async {
try {
var localStream = await _client.createLocalStream();
await _client.publishLocalStream(localStream);
print('Published local stream');
// 订阅远程流(通常在实际应用中,这会在收到远程用户加入房间的通知后进行)
_client.remoteStreamAdded = (remoteStream) {
print('Remote stream added');
// 在这里处理远程流的显示,例如将其添加到 UI 中
};
} catch (e) {
print('Failed to publish stream: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Tencent RTC Demo'),
),
body: Center(
child: Text('Joining room...'), // 这里可以添加更复杂的 UI,例如显示视频流
),
),
);
}
@override
void dispose() {
// 退出房间并释放资源
_client.exitRoom();
_client.unInit();
super.dispose();
}
}
class TRTCClientListener extends TRTCClientListenerMixin {
@override
void onEnterRoomSuccess(String roomId, int userId, int elapsed) {
print('Entered room successfully: $roomId, userId: $userId');
}
@override
void onEnterRoomFailed(int code, String message) {
print('Failed to enter room: $code, $message');
}
// 其他回调方法可以根据需要实现
}
注意事项
- 权限配置:确保在 Android 和 iOS 项目中配置了必要的音视频权限。
- UI 更新:上述示例中未详细处理 UI 更新,实际项目中需要将视频流显示在界面上,可以使用
Texture
或其他方式来实现。 - 错误处理:示例中仅简单打印了错误信息,实际项目中应添加更完善的错误处理逻辑。
- 信号服务器:实际应用中,房间管理、用户加入/离开通知等通常需要通过信令服务器来实现,这里未涉及信令服务器的部分。
这个示例提供了一个基本的框架,你可以根据实际需求进行扩展和修改。希望这对你有所帮助!