You need to enable JavaScript to run this app.
文档中心
实时音视频

实时音视频

复制全文
下载 pdf
实现音视频通话
Flutter
复制全文
下载 pdf
Flutter
集成 RTC SDK 后,你可以使用其中接口快速构建基础应用,实现基本实时音视频通话;你也能通过阅读代码,了解音视频通话的最佳实践。​
关于完整的项目实现,参考 获取示例源码。​
前提条件​
  • Flutter 2.0.0+​
  • Dart 2.12.0+​
  • 如果目标平台为 Android:​
  • Android Studio 3.5+​
  • Android API Level 19+​
  • arm64-v8a 真机、armeabi-v7a 真机​
  • 使用 Java 作为开发语言​
  • 如果目标平台为 iOS:​
  • Xcode 12.5+​
  • iOS 11.0+​
  • arm64 真机​
  • 使用 Objective-C 作为开发语言​
  • 请确保您的项目已设置有效的开发者签名​
集成 SDK​
步骤1:(可选)创建项目​
本步骤为如何创建一个新项目,如集成到已有项目,请跳过该步骤。​
请参考 Create the App 创建一个 Flutter 项目。​
步骤2: 添加依赖​
方式一:远端依赖 (推荐)​
在终端中进入项目根目录,运行如下命令安装依赖项:​
​
flutter pub add volc_engine_rtc​
​
这将在你项目的 pubspec.yaml 文件中添加这样的一行:​
​
dependencies:​
volc_engine_rtc: ^3.44.1​
​
方式二:本地依赖​
  1. 将下载的 SDK 文件夹复制到你的项目文件夹下。​
  1. 在 pubspec.yaml 文件中添加 volc_engine_rtc依赖项:​
  • ​
    environment:​
    sdk: ">=2.12.0 <3.0.0"​
    ​
    # 依赖项​
    dependencies:​
    flutter:​
    sdk: flutter​
    ​
    # 将 <SDK_PATH> 替换为项目下SDK的文件路径​
    volc_engine_rtc:​
    path: <SDK_PATH>​
    ​
更新依赖项​
选择以上任意一种方式添加依赖项后,当需要更新 SDK 版本时,在终端中进入项目根目录,运行如下命令更新依赖项:​
​
flutter pub get​
​
步骤3:配置项目属性​
  1. 权限获取:​
  • 在使用音视频功能前,请先在代码中申请音视频权限,本文采用 permission_handler 组件库为例:​
  • ​
    [Permission.camera, Permission.microphone].request()​
    ​
  1. 目标平台项目配置​
  1. iOS 平台​
  • 打开 Info.plist 文件添加下列权限​
  • Privacy - Microphone Usage Description ,并填入使用麦克风的原因(Value)​
  • Privacy - Camera Usage Description ,并填入使用摄像头的原因(Value)​
  • 打开 Podfile 文件添加如下代码​
  • ​
    # Uncomment this line to define a global platform for your project​
    # platform :ios, '11.0'​
    ​
    # CocoaPods analytics sends network stats synchronously affecting flutter build latency.​
    ENV['COCOAPODS_DISABLE_STATS'] = 'true'​
    ​
    source 'https://github.com/CocoaPods/Specs.git'​
    ···​
    source 'https://github.com/volcengine/volcengine-specs'​
    ···​
    ​
实现音视频通话​
​​​
实现流程​
1. (可选)创建用户界面​
根据场景需要,为你的项目创建音视频通话的用户界面。若已有用户界面,请跳过此步骤。​
如果你想实现基本的音视频通话,我们建议你在项目中添加如下元素:​
  • 房间ID​
  • 用户 ID​
  • 本地视频窗口​
  • 远端视频窗口​
  • 打开麦克风按钮​
  • 打开摄像头按钮​
  • 结束通话按钮​
2. 引入头文件​
在用到 SDK API 的文件中引入头文件。​
​
//引入 byte_rtc_engine_SDK 头文件​
import 'package:volc_engine_rtc/volc_engine_rtc.dart';​
​
3. 创建引擎​
首先你需要调用 RTCVideo.createRTCVideo 接口,创建一个引擎单例,以使用 RTC 提供的各种音视频能力。​
如果当前进程中未创建引擎实例,那么你必须先使用此方法创建实例;​
如果当前进程中已创建了引擎实例,再次调用此方法时,会返回已创建的实例。​
你需要在该方法中传入以下参数:​
​
参数名​
类型​
说明​
context​
RTCVideoContext​
引擎环境参数​
​
​
static Future<RTCVideo?> createRTCVideo(RTCVideoContext context)​
​
4. 设置视频编码参数​
创建引擎实例后,你可以调用RTCVideo.setMaxVideoEncoderConfig设置视频编码参数修改发布的视频流属性。​
你需要在该方法中传入以下参数:​
​
参数名​
类型​
说明​
maxSolution​
VideoEncoderConfig​
视频发布端设置期望发布的最大分辨率视频流参数,包括分辨率、帧率、码率、网络不佳时的回退策略等。​
​
​
Future<int?> setMaxVideoEncoderConfig(VideoEncoderConfig maxSolution)​
​
5. 设置本地视图​
加入房间前,你需要设置本地视图以在通话中看到本地图像,首先创建RTCViewContext实例:​
​
参数名​
类型​
说明​
uid​
String​
本地用户 Id​
streamType​
StreamIndex​
流类型,默认为主视频流​
​
​
RTCViewContext.localContext(​
{required this.uid, this.streamType = StreamIndex.main})​
​
再由创建的RTCViewContext实例构建RTCSurfaceView视频渲染视图:​
​
参数名​
类型​
说明​
context​
RTCViewContext​
渲染视图环境参数​
renderMode​
VideoRenderMode​
视频渲染模式​
backgroundColor​
int​
用于填充画布空白部分的背景颜色,颜色格式为BGR。取值范围是 `[0x0000000, 0xFFFFFFFF]`。默认值是 `0x00000000`。其中,透明度设置无效。​
zOrderOnTop​
bool​
仅安卓使用,参考Android官方接口文档​
zOrderMediaOverlay​
bool​
仅安卓使用,参考Android官方接口文档​
onPlatformViewCreated​
PlatformViewCreatedCallback​
`PlatformView` 被创建时,收到此回调​
gestureRecognizers​
Set<Factory>?​
应转发哪些手势给 `PlatformView`​
​
​
const RTCSurfaceView({​
Key? key,​
required this.context,​
this.renderMode = VideoRenderMode.hidden,​
this.backgroundColor = 0,​
this.zOrderOnTop = false,​
this.zOrderMediaOverlay = false,​
this.onPlatformViewCreated,​
this.gestureRecognizers,​
})​
​
6. 开始视频采集​
创建引擎实例后,你需要调用RTCVideo.startVideoCapture开启视频采集,以在通话中使用视频功能。​
​
Future<void> startVideoCapture()​
​
7. 开始音频采集​
创建引擎实例后,你需要调用RTCVideo.startAudioCapture开启音频采集,以在通话中使用音频功能。​
​
Future<void> startAudioCapture()​
​
8. 创建房间​
完成初始化后,你就可以调用RTCVideo``.createRTCRoom创建房间。​
​
参数名​
类型​
说明​
roomId​
String​
房间 Id​
​
​
Future<RTCRoom?> createRTCRoom(String roomId)​
​
9. 设置房间事件回调处理​
成功创建房间后,你就可以调用RTCRoom``.setRTCRoomEventHandler设置房间事件回调处理。​
​
参数名​
类型​
说明​
eventHandler​
RTCRoomEventHandler​
房间事件回调处理器​
​
​
void setRTCRoomEventHandler(RTCRoomEventHandler eventHandler)​
​
10. 加入房间​
完成房间初始化后,你就可以调用RTCRoom``.joinRoom加入房间。​
你需要在该方法中传入以下参数:​
​
参数名​
类型​
说明​
token​
String​
动态密钥,用于对登录用户进行鉴权验证。​
进入房间需要携带 Token。测试时可使用控制台生成临时 Token ,正式上线需要使用密钥 SDK 在你的服务端生成并下发 Token 。​
使用不同 AppID 的 App 是不能互通的。​
请务必保证生成 Token 使用的 AppID 和创建引擎时使用的 AppID 相同,否则会导致加入房间失败。​
userInfo​
UserInfo​
用户信息。​
roomConfig​
RoomConfig​
房间信息配置。​
​
​
Future<int?> joinRoom(​
{required String token,​
required UserInfo userInfo,​
required RoomConfig roomConfig})​
​
11. 处理加入房间结果回调​
加入房间后,你需要在 RTCRoomEventHandler.onRoomStateChanged 中处理首次加入房间/重连加入房间的事件。​
回调参数说明:​
​
参数名​
类型​
说明​
roomId​
String​
房间 ID。​
uid​
String​
用户 ID。​
state​
int​
用户加入房间回调的状态码。​
• 0: 加入房间成功;​
• 非 0: 加入房间失败。具体原因参看 ErrorCode 及 WarningCode。​
extraInfo​
String​
加入房间的类型。​
• 0: 首次加入房间。用户手动调用 joinRoom,收到加入成功。​
• 1: 重新加入房间。用户网络较差,失去与服务器的连接,进行重连时收到加入成功。​
​
​
typedef OnRoomStateChangedType = void Function(​
String roomId, String uid, int state, String extraInfo);​
​
12. 处理远端用户加入房间的回调​
加入房间后,你需要在 RTCRoomEventHandler.onUserJoined 中处理远端用户加入房间的事件。​
回调参数说明:​
​
参数名​
类型​
说明​
userInfo​
UserInfo​
用户信息。​
elapsed​
int​
保留字段,无意义​
​
​
typedef OnUserJoinedType = void Function(UserInfo userInfo, int elapsed);​
​
13. 处理远端视频数据渲染的回调​
加入房间后,你需要在 RTCVideoEventHandler.onFirstRemoteVideoFrameDecoded 中处理第一帧远端视频流在视图上渲染成功后的事件。​
回调参数说明:​
​
参数名​
类型​
说明​
streamKey​
RemoteStreamKey​
远端流信息。​
videoFrameInfo​
VideoFrameInfo​
视频帧信息。​
​
​
OnFirstRemoteVideoFrameRenderedType = void Function(RemoteStreamKey streamKey,VideoFrameInfo videoFrameInfo)​
​
14. 设置远端视图​
在确认收到远端用户的第一帧视频渲染回调后,你需要设置远端视图以在通话中查看远端图像,将接口创建的RTCViewContext实例用于构建视频渲染视图RTCSurfaceView。​
你需要在该方法中传入以下参数:​
​
参数名​
类型​
说明​
roomId​
String​
房间ID​
uid​
String​
视频来源的远端用户 ID​
streamType​
StreamIndex​
流类型,默认为主视频流​
​
​
RTCViewContext.remoteContext(​
{required this.roomId,​
required this.uid,​
this.streamType = StreamIndex.main})​
​
15. 处理远端用户离开房间的回调​
加入房间后,你需要在 RTCRoomEventHandler.onUserLeave 的此回调中处理远端用户离开房间的事件。​
回调参数说明:​
​
参数名​
类型​
说明​
uid​
String​
离开房间,或切至隐身的远端用户 ID 。​
reason​
int​
用户离开房间的原因。​
​
​
OnUserLeaveType = void Function(String uid,int reason)​
​
16. 离开房间​
在结束通话等场景下,你需要调用 RTCRoom.leaveRoom 离开房间,结束通话过程,释放所有通话相关的资源。​
​
Future<int?> leaveRoom()​
​
17. 销毁房间​
在 RTC 房间实例相关的业务场景全部结束后,你可以调用RTCRoom.destroy 销毁房间,并释放所有相关资源。​
​
Future<void> destroy()​
​
18. 销毁引擎​
在 RTC 引擎实例相关的业务场景全部结束后,你可以调用RTCVideo``.``destroy销毁由引擎创建的单例,并释放所有相关资源。​
​
Future<void> destroy()​
​
至此,我们实现了基本的音视频通话。​
后续步骤​
在实现音视频通话后,如遇无声音、无画面、视频卡顿等问题时,您可以使用通过诊断工具深入诊断快速排查和定位异常房间及用户,并获取异常根因分析、处理建议、分析报告等。​
​
最近更新时间:2026.07.30 14:45:02
这个页面对您有帮助吗?
有用
有用
无用
无用