2020年3月3日,阿拉丁发布《2020年2月小程序互联网发展研究报告》,报告显示,小程序日活跃用户数量已破4.5亿,而小程序数量达39万,在过去的1月、2月新增了60万个。作为对比,过去的11年里,苹果应用商城积累的APP数量才是260万。可见小程序的势头正猛。
在日常生活中,笔者也需要用到小程序,比如乘车码、粤省事、萌芽习惯等。相信很多人也和笔者一样会在衣食住行方面用到小程序。小程序中还能实现语音通话、视频通话,给众人带来了便利。不过,在日常使用中,有多少人知道小程序是如何快速实现视频通话功能的?下面以zego即构科技的小程序视频通话功能为例,给大家详解一番其中的实现过程。
集成
1准备环境
在开始集成 ZEGO Express SDK 前,请确保开发环境满足以下要求:
l 安装 微信开发者工具。
l 使用微信小程序基础库 1.7.0 或以上版本,否则不支持音视频播放、录制组件。
l 通过微信小程序实时音视频播放相关类目审核,开通 live-player、live-pusher 组件权限。
2 集成 SDK
从官网下载 SDK,手动集成
l 请参考下载SDK包,下载最新版本的 SDK。
l 解压SDK压缩包,将“ZegoExpressWebRTC-x.x.x.js”文件拷贝到项目中。
l 在使用到插件的js文件的最前面导入SDK。
实现流程
1 前提条件
在实现基本的实时音视频功能之前,请确保:
l 已在项目中集成 ZEGO Express SDK,详情请参考 快速开始 - 集成。
l 已在 ZEGO 控制台 创建项目,申请有效的 AppID 和 AppSign,详情请参考 控制台 - 项目管理。
l 已在 ZEGO 控制台 获取有效的 Server 地址。在 ZEGO 控制台中的对应项目下单击 “配置 > 查看(环境配置) > 小程序”,即可获得 Server 地址(包含 HTTPS、WSS 协议)。
l 在 微信公众平台 进行 服务器域名配置。在“小程序后台 > 开发 > 开发设置 > 服务器域名”,按照协议分类,将 Server 地址填到指定的“request合法域名”或“socket合法域名”中。
2使用步骤
本节介绍如何使用 ZEGO Express SDK 实现基本的实时音视频功能,API 调用时序如下图:
2.1 创建引擎
1. (可选)创建界面
2. 创建引擎
创建 ZegoExpressEngine 引擎实例,将申请到的 AppID 传入参数 “appID”,将获取到的 Server 地址传入参数 “server”。
3.(可选)监听事件回调
2.2 登录房间
1. 获取登录 Token
登录房间需要用于验证身份的 Token,获取方式请参考 登录房间鉴权。
2. 登录房间
调用 SDK 的 loginRoom 接口,传入房间 ID 参数 “roomID”、“token” 和用户参数 “user”,登录房间。
3. 监听登录房间后的事件回调
根据实际应用需要,在登录房间前监听想要关注的事件通知,比如房间状态更新、用户状态更新、流状态更新等。(详情请登录官方网站)
2.3 推流
1. 开始推流
触发推流后,调用 SDK 的 startPublishingStream 接口,传入流 ID 参数 “streamID”,获取 “streamID” 对应的推流地址。
调用微信小程序的 wx.createLivePusherContext 创建 live-pusher,将获取到的推流地址设置为 live-pusher 的 “url” 属性,然后调用 live-pusher 的 start 录制视频。
2. 推流事件处理
l 推流状态事件
微信小程序会在 live-pusher 的 bindstatechange 绑定的方法中通知出推流状态事件,开发者需要:
a. 在 bindstatechange 绑定的回调函数中,调用 SDK 的 updatePlayerState 接口将推流状态事件透传给 SDK。
b. 在 SDK 的 publisherStateUpdate 回调中处理推流的开始、失败状态。
推流网络事件
微信小程序会在 live-pusher 的 bindnetstatus 绑定的方法中通知出推流网络事件,开发者需要在对应的小程序回调中,调用 SDK 的 updatePlayerNetStatus 接口将推流网络事件透传给 SDK。
2.4 拉流
1. 开始拉流
触发拉流后,调用 SDK 的 startPlayingStream 接口,根据传入的流 ID 参数 “streamID”,获取 streamID 对应的拉流地址。远端用户推送的 “streamID” 可以从 roomStreamUpdate 回调中获得。
2. 拉流事件处理
拉流状态事件
微信小程序会在 live-player 的 bindstatechange 绑定的方法中通知出拉流状态事件,开发者需要:
a. 在 bindstatechange 绑定的回调函数中,调用 SDK 的 updatePlayerState 接口将拉流状态事件透传给 SDK。
b. 在 SDK 提供的 playerStateUpdate 回调中处理拉流的开始、失败状态。
l 拉流网络事件
微信小程序会在 live-player 的 bindnetstatus 绑定的方法中通知出拉流网络事件,开发者需要在对应的小程序回调中,调用 SDK 的 updatePlayerNetStatus 接口将推流网络事件透传给 SDK。
2.5 停止推拉流
1. 停止推流
调用 SDK 的 stopPublishingStream 接口清空推流状态。
调用微信小程序 live-pusher 的 stop 停止推流。
3. 停止拉流
调用 SDK 的 stopPlayingStream 接口清空拉流状态。
调用微信小程序 live-player 的 stop 停止拉流。
2.6 退出房间
调用 SDK 的 logoutRoom 接口退出房间。
上面便是在小程序上实现视频通话的后台步骤了,主要划分为集成、实现流程(准备环境、使用步骤、创建引擎、登录房间、进行推拉流、停止推拉流、退出房间)几大步骤。想进一步详细查看他们的开源示例代码的话,可登录他们的官方网站进行了解。