实现音视频通话(Flutter)
网易云信音视频通话产品的基本功能包括高质量的实时音视频通话。当您成功初始化 SDK 之后,您可以简单体验本产品的基本业务流程。本文档为您展示音视频通话提供的基本业务流程。
前提条件
请确认您已完成以下操作:
快速跑通 Sample Code
注意:在运行示例项目之前,请联系商务经理开通非安全模式。非安全模式建议只在集成开发阶段使用,请在应用正式上线前改回安全模式。
- 在SDK和示例代码下载页面或 Demo 体验页面下载需要体验的示例项目或 Demo 源码工程。
在
example/lib/Config.dart
文件中配置 AppKey。class Config { //替换为你自己的AppKey static const String APP_KEY = ''; }
- 运行工程。
实现音视频通话
本节主要介绍如何使用 NERTC SDK 实现音视频通话,主要流程如下图所示:
1. 导入类
在您的工程中对应的 Page 文件里添加如下代码先导入以下重要类:
import 'package:nertc/nertc.dart';
2. 初始化
默认情况下,请先执行 create 方法完成初始化。
// 示例
void _initRtcEngine() async {
NERtcOptions options = NERtcOptions(
audioAutoSubscribe: _settings.autoSubscribeAudio,
serverRecordSpeaker: _settings.serverRecordSpeaker,
serverRecordAudio: _settings.serverRecordAudio,
serverRecordVideo: _settings.serverRecordVideo,
serverRecordMode:
NERtcServerRecordMode.values[_settings.serverRecordMode],
videoSendMode: NERtcVideoSendMode.values[_settings.videoSendMode],
videoEncodeMode:
NERtcMediaCodecMode.values[_settings.videoEncodeMediaCodecMode],
videoDecodeMode:
NERtcMediaCodecMode.values[_settings.videoDecodeMediaCodecMode]);
_engine
.create(
appKey: Config.APP_KEY,
channelEventCallback: this,
options: options);
}
3. 设置本地视图(可选)
初始化成功后,可以设置设置本地视图,来预览本地图像。您可以在加入房间之前预览,或在加入房间后预览。
加入房间前预览。
通过 startVideoPreview 与 attachToLocalVideo 方法,在加入房间前设置本地视图,预览本地图像。
// 示例 _engine.startVideoPreview(); NERtcVideoRenderer renderer = await VideoRendererFactory.createVideoRenderer(); renderer.attachToLocalVideo();
- 若要结束预览,或者准备加入房间时,调用stopVideoPreview停止预览。
加入房间后预览。
在成功加入房间后,通过 enableLocalVideo 方法进行视频的采集发送与预览。
// 示例 // 开启本地视频采集并发送 _engine.enableLocalVideo(true); // 设置本地预览画布 NERtcVideoRenderer renderer = await VideoRendererFactory.createVideoRenderer(); renderer.attachToLocalVideo();
4. 加入房间
加入房间前,请确保已完成初始化相关事项。若您的业务中涉及呼叫邀请等机制,建议通过信令实现。
通过 joinChannel 方法加入房间。
// 示例
_engine.joinChannel(token,channelName,uid);
参数说明:
参数 | 说明 |
---|---|
token | 安全认证签名(NERTC Token)。可设置为:
|
channelName | 房间名称,设置相同房间名称的用户会进入同一个通话房间。 注意:您也可以在加入通道前,通过创建房间接口创建房间。加入房间时,若传入的 {channelName} 未事先创建,则云信服务器内部将为其自动创建一个名为 {channelName} 的通话房间。 |
uid | 用户的唯一标识 id,房间内每个用户的 uid 必须是唯一的。 |
SDK发起加入房间请求后,服务器会进行响应,开发者可以通过 NERtcChannelEventCallback 的 onJoinChannel 回调监听加入房间的结果,同时该回调会抛出当前通话房间的 channelId 与加入房间总耗时(毫秒)。
注意:请在创建 NERtcEngine 方法 create 中传入原型为 NERtcChannelEventCallback 的 callback。
5. 设置远端视图
互动直播过程中,除了要显示本地的视频画面,通常也要显示参与互动的其他连麦者/主播的远端视频画面。
NERtcChannelEventCallback 通过以下回调获取相关信息:
onUserJoined :监听远端用户加入通话房间的事件,并抛出对方的 uid。当本端加入房间后,也会通过此回调抛出通话房间内已有的其他用户。
onUserVideoStart :监听远端用户发布视频流的事件,回调中携带对方的 uid 与发布的视频分辨率。
在监听到远端用户加入房间或发布视频流后,本方可以通过 attachToRemoteVideo 方法设置远端用户视频画布,用于显示其视频画面。
// 示例 NERtcVideoRenderer renderer = await VideoRendererFactory.createVideoRenderer(); renderer.attachToRemoteVideo(uid);
在监听到远端用户发布视频流后,本方可以通过 subscribeRemoteVideo 方法对其发起视频流的订阅,来将对方的视频流渲染到视频画布上。
_engine.subscribeRemoteVideo(uid, profile, subscribe);
- 监听远端用户离开房间或关闭视频功能。
- 收到 onUserLeave 用户离开房间回调。
- 收到 onUserAudioStop 远端用户关闭视频功能回调。
6. 音频流
本地音频的采集发布和远端音频订阅播放是默认启动的,正常情况下无需开发者主动干预。
7. 退出通话房间
通过 leaveChannel() 接口退出通话房间。
// 示例
// 退出通话房间
_engine.leaveChannel();
NERtcChannelEventCallback 提供 onLeaveChannel 来监听当前用户退出房间的结果。
8. 销毁实例
当确定 App 短期内不再使用音视频通话实例时,可以通过 release() 接口释放对应的对象资源。
// 示例
// 销毁实例
_engine.release();


此文档对你是否有帮助

