Flutter即时通讯插件jrtc_sdk的使用
Flutter即时通讯插件jrtc_sdk的使用
概况
JRTCExpressEngine
是 SDK 的核心接口类,用于实现实时音视频的主要功能。
JRTCErrorCode
是错误码。
初始化相关的前置功能
方法 | 描述 |
---|---|
createEngine | 初始化SDK |
destroyEngine | 释放资源 |
setMediaConfig | 设置媒体配置 |
设备管理
方法 | 描述 |
---|---|
getCamera | 获取当前已打开的摄像头或者默认摄像头 |
getAllCameras | 获取摄像头列表 |
switchCamera | 切换摄像头 |
enableAudioOutput | 开启/关闭音频输出,本地禁音 |
enableSpeaker | 开启/关闭扬声器 |
setCameraFocus | 设置触屏对焦 |
getCameraMaxZoom | 获取摄像头支持的最大变焦倍数 |
setCameraZoom | 设置摄像头变焦倍数 |
isCameraTorchSupported | 查询摄像头是否支持闪光灯 |
setCameraTorchOn | 设置是否打开闪光灯 |
setCameraExposureLevel | 设置手动曝光度 |
getAudioRoute | 获取音频路由 |
频道管理
方法 | 描述 |
---|---|
joinChannel | 创建并加入频道 |
leaveChannel | 离开频道 |
音视频管理
方法 | 描述 |
---|---|
startLocalVideoDevice | 启动视频模块,是否开启本地视频采集并渲染 |
publishLocalAudioStream | 开启或关闭发送本地音频流 |
publishLocalVideoStream | 开启或关闭发送本地视频流 |
playRemoteAudioStream | 订阅或取消订阅指定用户音频,并播放 |
playRemoteVideoStream | 开始或停止渲染视频对象 |
muteLocalAudioStream | 是否发送静音包 |
muteLocalVideoStream | 是否停止本地视频流 |
getStatistics | 获得当前通话统计信息 |
频道消息管理
方法 | 描述 |
---|---|
sendMessage | 发送文本消息 |
屏幕共享
方法 | 描述 |
---|---|
enableScreenShare | 开关屏幕分享 |
startScreenShareVideo | 启动屏幕共享视频渲染 |
日志
方法 | 描述 |
---|---|
uploadLog | 上传日志 |
info | 打印info等级的日志 |
debug | 打印debug等级的日志 |
error | 打印error等级的日志 |
网络
方法 | 描述 |
---|---|
getNetType | 获取网络类型 |
hasNet | 是否有网 |
媒体高级功能
方法 | 描述 |
---|---|
enableVideoFile | 启动视频文件输入源 |
inputVideoFileFrame | 输入视频文件数据 |
inputCustomAudioData | 将音频输入数据输入到媒体层 |
getAudioOutputData | 获取音频输出数据 |
setLocalCaptureAngle | 设置本地视频采集窗体角度 |
setRenderMirror | 设置本地渲染的画面镜像 |
setRenderEffect | 设置渲染特效 |
freezeRenderEffect | 是否冻结渲染 |
takeOnceSnapshot | 视频通话单次截图 |
setRenderAngle | 设置远端视频在本地渲染的旋转角度 |
getMinExposureCompensation | 获取摄像头曝光补偿最小值 |
getMaxExposureCompensation | 获取摄像头曝光补偿最大值 |
getExposureCompensationStep | 获取摄像头曝光补偿步长 |
频道事件
方法 | 描述 |
---|---|
onSelfJoinStateChange | 自身状态变化回调 |
onChannelUpdate | 频道属性变化回调 |
onSelfJoined | 加入频道结果回调 |
onSelfLeft | 离开频道结果回调 |
onOtherJoined | 成员加入回调 |
onOtherLeft | 成员离开回调 |
onUserUpdate | 成员更新回调 |
onMessageReceived | 接收频道消息的回调 |
onVolumeChange | 成员声音变化回调 |
onError | SDK 运行时出现的错误回调 |
onCameraUpdate | 摄像头变化回调 |
onAudioOutputTypeChange | 音频输出类型变化回调 |
onRenderReceived | 收到第一帧数据回调 |
onRenderStart | 渲染开始回调 |
onVideoError | 视频渲染错误回调 |
onNeedKeyFrame | 标记下一次输入关键帧回调 |
其他
方法 | 描述 |
---|---|
getSdkVersion | 获取当前SDK的版本号 |
示例代码
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:jrtc_flutter_example/home_page.dart';
import 'package:jrtc_flutter_example/log_info.dart';
import 'package:jrtc_flutter_example/remote_user_info.dart';
import 'package:jrtc_flutter_example/self_user_info.dart';
import 'package:jrtc_flutter_example/speak_state_info.dart';
import 'package:oktoast/oktoast.dart';
import 'package:provider/provider.dart';
import 'channel_info.dart';
import 'login_info.dart';
void main() {
runApp(MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => LoginInfo()),
ChangeNotifierProvider(create: (context) => SelfJoinUserInfo()),
ChangeNotifierProvider(create: (context) => RemoteUserInfo()),
ChangeNotifierProvider(create: (context) => JoinChannelInfo()),
ChangeNotifierProvider(create: (context) => SpeakStateInfo()),
ChangeNotifierProvider(create: (context) => LogInfo())
],
child: MyApp(),
));
//runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return OKToast(
child: MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: HomePage(),
),
theme: Theme.of(context).copyWith(
listTileTheme: ListTileThemeData(
horizontalTitleGap: 0, //这里调整基于你的需求
),
),
));
}
}
更多关于Flutter即时通讯插件jrtc_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter即时通讯插件jrtc_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
jrtc_sdk
是一个用于 Flutter 的即时通讯(IM)插件,通常用于实现实时聊天、音视频通话等功能。以下是如何在 Flutter 项目中使用 jrtc_sdk
的基本步骤。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 jrtc_sdk
依赖:
dependencies:
flutter:
sdk: flutter
jrtc_sdk: ^x.x.x # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化 SDK
在你的 Flutter 应用中初始化 jrtc_sdk
。通常需要在应用启动时进行初始化。
import 'package:jrtc_sdk/jrtc_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Jrtc SDK
await Jrtc.init(
appId: 'your_app_id', // 你的 App ID
appKey: 'your_app_key', // 你的 App Key
);
runApp(MyApp());
}
3. 登录与用户管理
使用 Jrtc
提供的 API 来进行用户登录和登出。
// 用户登录
Future<void> login(String userId, String token) async {
await Jrtc.login(userId: userId, token: token);
}
// 用户登出
Future<void> logout() async {
await Jrtc.logout();
}
4. 发送和接收消息
你可以使用 Jrtc
提供的 API 来发送和接收消息。
// 发送文本消息
Future<void> sendTextMessage(String targetUserId, String message) async {
await Jrtc.sendMessage(
targetUserId: targetUserId,
message: message,
messageType: 'text',
);
}
// 监听接收消息
Jrtc.onMessageReceived.listen((message) {
print('Received message: ${message.content}');
});
5. 音视频通话
jrtc_sdk
通常也支持音视频通话功能。你可以使用以下 API 来发起和接听通话。
// 发起音视频通话
Future<void> startCall(String targetUserId, bool isVideoCall) async {
await Jrtc.startCall(
targetUserId: targetUserId,
isVideoCall: isVideoCall,
);
}
// 接听通话
Future<void> acceptCall() async {
await Jrtc.acceptCall();
}
// 挂断通话
Future<void> hangUp() async {
await Jrtc.hangUp();
}
// 监听来电
Jrtc.onIncomingCall.listen((call) {
print('Incoming call from ${call.callerId}');
});
6. 处理用户状态
你还可以监听用户在线状态的变化。
// 监听用户状态变化
Jrtc.onUserStatusChanged.listen((status) {
print('User status changed: ${status.userId} is ${status.online ? 'online' : 'offline'}');
});
7. 处理异常
在使用 SDK 的过程中,可能会遇到各种异常情况。你可以通过监听异常来处理错误。
// 监听异常
Jrtc.onError.listen((error) {
print('Error occurred: ${error.message}');
});
8. 清理资源
在应用退出或不再需要 SDK 时,可以清理资源。
Future<void> dispose() async {
await Jrtc.dispose();
}