本文将介绍如何快速完成 Flutter RTC Engine 的接入,实现一个基本的音视频通话。
环境准备
Flutter 2.0 及以上版本。
Android 端开发:
Android Studio 3.5及以上版本。
App 要求 Android 4.1及以上版本设备。
iOS 端开发:
Xcode 11.0及以上版本。
osx 系统版本要求 10.11 及以上版本
请确保您的项目已设置有效的开发者签名。
步骤1. 导入SDK
flutter pub add tencent_trtc_cloud
步骤2. 配置项目
1. 开通摄像头和麦克风的权限,即可开启语音通话功能。
1. 需要在 Info.plist
中加入对相机和麦克风的权限申请:
<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. 创建 TRTC 实例
1. 声明成员变量
late TRTCCloud trtcCloud;
2. 调用初始化接口创建 TRTC 实例并设置事件回调。
trtcCloud = (await TRTCCloud.sharedInstance())!;
trtcCloud.registerListener((type, param) async {
switch (type) {
case TRTCCloudListener.onError:
print("onError errorCode:${param['errCode']} errorMsg:${param['errMsg']}")
break;
case TRTCCloudListener.onEnterRoom:
if (param > 0) {
print("Enter room success");
} else {
print("Enter room failed");
}
break;
default:
break;
}
});
步骤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
接口函数即可进入房间。
主播角色
await trtcCloud.enterRoom(
TRTCParams(
sdkAppId: sdkAppId,
userId: "denny",
userSig: '',
role: TRTCCloudDef.TRTCRoleAnchor,
roomId: 123321
),
TRTCCloudDef.TRTC_APP_SCENE_LIVE);
观众角色
await trtcCloud.enterRoom(
TRTCParams(
sdkAppId: sdkAppId,
userId: "denny",
userSig: '',
role: TRTCCloudDef.TRTCRoleAudience,
roomId: 123321
),
TRTCCloudDef.TRTC_APP_SCENE_LIVE);
注意:
如果以观众角色进入房间,sdkAppId 和 roomId 需要与主播端相同,而 userId 和 userSig 需要替换为自己的值。
步骤5. 打开摄像头
1. 在页面的 build 方法中对应位置添加 TRTCCloudVideoView :
TRTCCloudVideoView(
key: valueKey,
viewType: TRTCCloudDef.TRTC_VideoView_TextureView,
onViewCreated: (viewId) async {
setState(() {
localViewId = viewId;
});
},
),
2. 在调用接口 startLocalPreview
打开摄像头预览之前,您可以通过通过调用接口 setLocalRenderParams
来设置本地预览的渲染参数。
trtcCloud.setLocalRenderParams(TRTCRenderParams(
fillMode: TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL,
mirrorType: TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO,
rotation: TRTCCloudDef.TRTC_VIDEO_ROTATION_0,
));
trtcCloud.startLocalPreview(isFrontCamera, viewId);
3. 您可以通过调用接口 TXDeviceManager
来完成“切换前后摄像头”、“设置对焦模式”等操作。
TXDeviceManager manager = trtcCloud.getDeviceManager();
bool autoFocusEnable = (await manager.isAutoFocusEnabled())!;
if (autoFocusEnable) {
manager.enableCameraAutoFocus(true);
}
manager.enableCameraTorch(true);
说明:
摄像头默认打开前置摄像头,如果您需要使用后置摄像头,调用manager.switchCamera(false)
即可打开后置摄像头。
步骤6. 打开麦克风
您可以调用 startLocalAudio
来开启麦克风采集,该接口需要您通过 quality
参数确定采集模式,建议根据您的需求选择以下其中一个适合您项目的模式。
trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH);
trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC);
步骤7. 播放/停止视频流
创建一个新项目,按照步骤1-4以观众角色进入 denny 的房间后,您可以通过调用接口 startRemoteView
来播放远端用户的视频画面。
trtcCloud.startRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, viewId);
之后,您通过调用接口 stopRemoteView
停止某个远端用户的视频,也可以通过接口 stopAllRemoteView
停止播放所有远端用户的视频。
trtcCloud.stopRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, viewId);
trtcCloud.stopAllRemoteView();
步骤8. 播放/停止音频流
您可以通过调用接口 muteRemoteAudio("denny",true)
来静音远端用户 denny 的声音。
trtcCloud.muteRemoteAudio("denny", true);
之后也可以通过调用接口 muteRemoteAudio("denny",false)
来解除对他的静音。
trtcCloud.muteRemoteAudio("denny", false);
步骤9. 退出房间
您可以调用接口 exitRoom
即可退出当前的房间,SDK 会在退房结束后通过 onExitRoom(int reason)
回调事件通知您。
trtcCloud.exitRoom();
trtcCloud.registerListener(onTrtcListener);
onTrtcListener(type, params) async {
if (type == TRTCCloudListener.onExitRoom) {
if (param == 0) {
print("Exit current room by calling the 'exitRoom' api of sdk ...");
} else if (param == 1) {
print("Kicked out of the current room by server through the restful api...");
} else if (param == 2) {
print("Current room is dissolved by server through the restful api...");
}
}
}
常见问题
本页内容是否解决了您的问题?