音视频通话 2.0
Flutter
新手接入指南
产品简介
产品介绍
功能特性
产品优势
基本概念
使用限制
产品计费
按量计费
资源包
下载 SDK 和 示例代码
更新日志
快速开始
接入流程
创建应用
开通服务
集成 SDK
快速跑通 Sample Code
实现音视频通话
Token 鉴权
API 参考
Flutter API 参考
服务端 API
错误码
控制台指南
常见问题
FAQ
服务协议

实现音视频通话

更新时间: 2022/08/18 18:50:41

网易云信音视频通话产品的基本功能包括高质量的实时音视频通话。当您成功初始化 SDK 之后,您可以简单体验本产品的基本业务流程。本文档为您展示音视频通话提供的基本业务流程。

前提条件

请确认您已完成以下操作:

实现音视频通话

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. 设置本地视图(可选)

初始化成功后,可以设置本地视图,来预览本地图像。您可以在加入房间之前预览,或在加入房间后预览。

  • 加入房间前预览。

    1. 通过 startVideoPreviewattachToLocalVideo 方法,在加入房间前设置本地视图,预览本地图像。

      // 示例
      _engine.startVideoPreview();
      NERtcVideoRenderer renderer = await VideoRendererFactory.createVideoRenderer();   
      renderer.attachToLocalVideo();
      
    2. 若要结束预览,或者准备加入房间时,调用stopVideoPreview停止预览。

  • 加入房间后预览。

    在成功加入房间后,通过 enableLocalVideo 方法进行视频的采集发送与预览。

    // 示例
    // 开启本地视频采集并发送
    _engine.enableLocalVideo(true);
    // 设置本地预览画布
    NERtcVideoRenderer renderer = await VideoRendererFactory.createVideoRenderer();   
    renderer.attachToLocalVideo();
    

4. 加入房间

加入房间前,请确保已完成初始化相关事项。

通过 joinChannel 方法加入房间。

// 示例
_engine.joinChannel(token,channelName,uid);

参数说明

参数 说明
token 安全认证签名(NERTC Token)。可设置为:
  • null。调试模式下可设置为 null。安全性不高,建议在产品正式上线前在云信控制台中将指定应用的鉴权方式恢复为默认的安全模式。
  • 已获取的NERTC Token。安全模式下必须设置为获取到的 Token 。若未传入正确的 Token 将无法进入房间。

    推荐使用安全模式。

channelName 房间名称,长度为 1 ~ 64 字节。目前支持以下 89 个字符:a-z, A-Z, 0-9, space, !#$%&()+-:;≤.,>? @[]^_{|}~"。
设置相同房间名称的用户会进入同一个通话房间。
您也可以在加入通道前,通过创建房间接口创建房间。加入房间时,若传入的 {channelName} 未事先创建,则云信服务器内部将为其自动创建一个名为 {channelName} 的通话房间。
uid 用户的唯一标识 id,为数字串,房间内每个用户的 uid 必须是唯一的。此 uid 为用户在您应用中的 ID,请在您的业务服务器上自行管理并维护。

SDK发起加入房间请求后,服务器会进行响应,开发者可以通过 NERtcChannelEventCallbackonJoinChannel 回调监听加入房间的结果,同时该回调会抛出当前通话房间的 channelId 与加入房间总耗时(毫秒)。

注意:请在创建 NERtcEngine 方法 create 中传入原型为 NERtcChannelEventCallbackcallback

5. 设置远端视图

音视频通话过程中,除了要显示本地的视频画面,通常也要显示参与互动的其他连麦者/主播的远端视频画面。

  1. NERtcChannelEventCallback 通过以下回调获取相关信息:

    • onUserJoined :监听远端用户加入通话房间的事件,并抛出对方的 uid。当本端加入房间后,也会通过此回调抛出通话房间内已有的其他用户。

    • onUserVideoStart :监听远端用户发布视频流的事件,回调中携带对方的 uid 与发布的视频分辨率。

  2. 在监听到远端用户加入房间或发布视频流后,本方可以通过 attachToRemoteVideo 方法设置远端用户视频画布,用于显示其视频画面。

    // 示例
    NERtcVideoRenderer renderer =
        await VideoRendererFactory.createVideoRenderer();
    renderer.attachToRemoteVideo(uid);
    
  3. 在监听到远端用户发布视频流后,本方可以通过 subscribeRemoteVideo 方法对其发起视频流的订阅,来将对方的视频流渲染到视频画布上。

    _engine.subscribeRemoteVideo(uid, profile, subscribe);
    
  4. 监听远端用户离开房间或关闭视频功能。

  5. 收到 onUserLeave 用户离开房间回调。

  6. 收到 onUserVideoStop 远端用户关闭视频功能回调。

6. 音频流

本地音频的采集发布和远端音频订阅播放是默认启动的,正常情况下无需开发者主动干预。

7. 退出通话房间

通过 leaveChannel() 接口退出通话房间。

// 示例
// 退出通话房间
_engine.leaveChannel();

NERtcChannelEventCallback 提供 onLeaveChannel 来监听当前用户退出房间的结果。

8. 销毁实例

当确定 App 短期内不再使用音视频通话实例时,可以通过 release() 接口释放对应的对象资源。

// 示例
// 销毁实例
_engine.release();
此文档是否对你有帮助?
有帮助
我要吐槽
  • 前提条件
  • 实现音视频通话
  • 1. 导入类
  • 2. 初始化
  • 3. 设置本地视图(可选)
  • 4. 加入房间
  • 5. 设置远端视图
  • 6. 音频流
  • 7. 退出通话房间
  • 8. 销毁实例