本文将介绍如何快速完成 Flutter RTC Engine 的接入,实现一个基本的音视频通话。
环境准备
Flutter 2.0 及以上版本。
Android 端开发:
Android Studio 3.5及以上版本。
App 要求 Android 4.1及以上版本设备。
请确保您的项目支持 CMake 3.13 及以上版本
iOS 端开发:
Xcode 11.0及以上版本。
osx 系统版本要求 10.11 及以上版本。
请确保您的项目已设置有效的开发者签名。
步骤1. 导入SDK
flutter pub add tencent_rtc_sdk
步骤2. 配置项目
1. 开通摄像头和麦克风的权限,即可开启语音通话功能。
1. 需要在 Info.plist
的第一级<dict>目录下加入对相机和麦克风的权限申请:
<key>NSCameraUsageDescription</key>
<string>授权摄像头权限才能正常视频通话</string>
<key>NSMicrophoneUsageDescription</key>
<string>授权麦克风权限才能正常语音通话</string>
2. 添加字段 io.flutter.embedded_views_preview
,并设定值为 YES。
1. 打开/android/app/src/main/AndroidManifest.xml
文件。
2. 在其中添加如下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.autofocus" />
3. 如果您需要编译运行在 Android 平台,您还需要进行如下配置:
首先,需要在工程的 android/app/build.gradle
文件中对应位置添加:
android {
.....
packagingOptions {
pickFirst 'liblibliteavsdk.so'
}
buildTypes {
release {
......
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
在工程的 android/app 目录下创建 proguard-rules.pro 文件,并在 proguard-rules.pro 文件中添加如下代码:
-keep class com.tencent.** { *; }
步骤3. 创建 TRTC 实例
1. 声明成员变量
import 'package:tencent_rtc_sdk/trtc_cloud.dart';
import 'package:tencent_rtc_sdk/trtc_cloud_def.dart';
import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart';
late TRTCCloud trtcCloud;
2. 调用初始化接口创建 TRTC 实例并设置事件回调。
trtcCloud = (await TRTCCloud.sharedInstance())!;
TRTCCloudListener listener = TRTCCloudListener(
onError: (errCode, errMsg) {
}
);
trtcCloud.registerListener(listener);
步骤4. 进入房间
1. 如果您在 Android 设备上运行程序,需要提前请求 CAMERA 和 MICROPHONE 权限。
if (!(await Permission.camera.request().isGranted) ||
!(await Permission.microphone.request().isGranted)) {
print('You need to obtain audio and video permission to enter');
return;
}
2. 在 Tencent RTC 控制台 中单击 Create Application,在 Application Overview 中获取 SDKAppID 。 3. 在 UserSig Tools 中下来选择 SDKAppID ,并输入您自己的用户名(UserID),单击Generate即可获取您自己的 UserSig 。 4. 在设置进房参数 TRTCParams 后,调用 enterRoom
接口函数即可进入房间。
主播角色
trtcCloud.enterRoom(
TRTCParams(
sdkAppId: sdkAppId,
userId: "userId",
userSig: '',
role: TRTCRoleType.anchor,
roomId: 123123,
),
TRTCAppScene.live
);
观众角色
trtcCloud.enterRoom(
TRTCParams(
sdkAppId: sdkAppId,
userId: "userId",
userSig: '',
role: TRTCRoleType.audience,
roomId: 123123,
),
TRTCAppScene.live
);
注意:
如果以观众角色进入房间,sdkAppId 和 roomId 需要与主播端相同,而 userId 和 userSig 需要替换为自己的值。
步骤5. 打开摄像头
1. 在页面的 build 方法中对应位置添加 TRTCCloudVideoView :
import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart';
TRTCCloudVideoView(
key: valueKey,
onViewCreated: (viewId) {
localViewId = viewId;
},
),
说明:
viewId
为视频渲染控件 TRTCCloudVideoView
的唯一标识符。您可以以您想要的方式存储该标识符。此处使用 localViewId
来存储,用以后续渲染本地采集的视频流。
2. 在调用接口 startLocalPreview
打开摄像头预览之前,您可以通过通过调用接口 setLocalRenderParams
来设置本地预览的渲染参数。
trtcCloud.setLocalRenderParams(
TRTCRenderParams(
fillMode: TRTCVideoFillMode.fill,
mirrorType: TRTCVideoMirrorType.auto,
rotation: TRTCVideoRotation.rotation0,
),
);
trtcCloud.startLocalPreview(true, localViewId);
trtcCloud.startLocalPreview(false, localViewId);
调用stopLocalPreview
关闭摄像头预览并停止推送本地视频信息。
trtcCloud.stopLocalPreview();
3. 您可以通过调用接口 TXDeviceManager
来完成“切换前后摄像头”、“设置对焦模式”、“闪光灯”等设备扩展功能的使用。
import 'package:tencent_rtc_sdk/tx_device_manager.dart';
TXDeviceManager manager = trtcCloud.getDeviceManager();
if (manager.isFrontCamera()) {
manager.switchCamera(false);
} else {
manager.switchCamera(true);
}
TXDeviceManager manager = trtcCloud.getDeviceManager();
if (manager.isAutoFocusEnabled()) {
manager.enableCameraAutoFocus(true);
} else {
manager.enableCameraAutoFocus(false);
}
TXDeviceManager manager = trtcCloud.getDeviceManager();
manager.enableCameraTorch(true);
manager.enableCameraTorch(false);
步骤6. 打开麦克风
您可以调用 startLocalAudio
来开启麦克风采集,该接口需要您通过 quality
参数确定采集模式,建议根据您的需求选择以下其中一个适合您项目的模式。
trtcCloud.startLocalAudio(TRTCAudioQuality.speech);
trtcCloud.startLocalAudio(TRTCAudioQuality.music);
调用stopLocalAudio
关闭麦克风采集并停止推送本地音频信息。
trtcCloud.stopLocalAudio();
步骤7. 播放/停止视频流
1. 在进入房间之前对 onUserVideoAvailable 进行监听,当您收到onUserVideoAvailable(userId, true)
通知时,表示该路画面已经有可播放的视频帧到达。
说明:
此处假设可播放视频的用户为 denny
,预计要将用户 denny
的视频流渲染到唯一标识符为 remoteViewId
的 TRTCCloudVideoView
控件中。
2. 您可以通过调用接口 startRemoteView
来播放远端用户的视频画面。
trtcCloud.startRemoteView("denny", TRTCVideoStreamType.big, remoteViewId
);
之后,您通过调用接口 stopRemoteView
停止某个远端用户的视频,也可以通过接口 stopAllRemoteView
停止播放所有远端用户的视频。
trtcCloud.stopRemoteView("denny", TRTCVideoStreamType.big);
trtcCloud.stopAllRemoteView();
步骤8. 播放/停止音频流
默认情况下,SDK 将自动播放远程音频,因此您不需要调用任何 API 来手动播放它。
但当您不喜欢自动播放音频时,可以调用 muteRemoteAudio/muteAllRemoteAudio
选择播放或停止远端声音。
trtcCloud.muteRemoteAudio("denny", true);
trtcCloud.muteAllRemoteAudio(true);
trtcCloud.muteRemoteAudio("denny", true);
trtcCloud.muteAllRemoteAudio(true);
步骤9. 退出房间
调用 exitRoom
退出当前的房间:
TRTC SDK 会在退房结束后通过 onExitRoom
回调事件通知您。
TRTCCloudListener listener = TRTCCloudListener(
onExitRoom: (reason) {
}
);
trtcCloud.registerListener(listener);
常见问题
本页内容是否解决了您的问题?