- 安装好node环境。https://nodejs.org/dist/v10.14.1/node-v10.14.1-x86.msi
- 按照以下命令执行。
$ git clone https://github.com/zegoim/zego-electron-quick-start.git
$ cd zego-electron-quick-start
$ npm config set registry http://registry.npm.taobao.org/
$ npm install (或者使用 cnpm install 下载依赖速度会快很多)
- 设置国外镜像,并通过代理访问国外镜像的方法是,执行以下命令
$ npm config set registry https://registry.npmjs.org/
// 设置代理
$ npm config set proxy http://127.0.0.1:1080
// 设置https代理
$ npm config set https-proxy http://127.0.0.1:1080
- 设置npm淘宝镜像的方法是,执行以下命令
$ npm config set registry http://registry.npm.taobao.org/
// 删除http代理
$ npm config delete proxy
// 删除https代理
$ npm config delete https-proxy
// 请在 [即构管理控制台](https://console.zego.im/acount) 申请 SDK 初始化需要的 AppID 和 AppSign
// 获取 AppID 和 AppSign 指引](https://doc.zego.im/API/HideDoc/GetAppIDGuide/GetAppIDGuideline.html)。
// app id
const app_id = "";//向zego获取app id,ID为字符串
// app sign
const app_sign = [];//向zego获取测试app_sign,是一个数组,格式例如 [0x01, 0x03, 0x44, ....]
$ npm start
mac 平台打包,不使用签名时使用以下命令禁止
$ export CSC_IDENTITY_AUTO_DISCOVERY=false
$ npm run pkg
-
安装包文件:
zego-electron-quick-start Setup 1.0.0.exe
-
未打成安装包的可执行文件目录:
win-ia32-unpacked
-
参考文档末尾
实践
章节集成sdk。 -
在工程项目中的renderer.js文件中添加以下代码,引入zego sdk,参考代码
var ZegoLiveRoom = require("zegoliveroom/ZegoLiveRoom.js");
var ZEGOCONSTANTS = require("zegoliveroom/ZegoConstant.js");
- 创建zego client,参考代码
var zegoClient = new ZegoLiveRoom();
- 配置当前环境,参考代码
// 配置设置当前环境为测试环境
zegoClient.setUseEnv({ use_test_env: true });
- 初始化sdk,参考代码
// 初始化sdk
let ret = zegoClient.initSDK({
app_id: app_id, // appid
sign_key: app_sign, // app sign
user_id: TEST_USER_ID, // 用户id
user_name: TEST_USER_NAME // 用户名字
}, rs => {
if (rs.error_code == 0) {
console.log("sdk初始化成功");
} else {
console.log("sdk初始化失败,错误码为:" + rs.error_code);
zegoClient.unInitSDK();
}
});
if (ret) {
console.log("正在初始化...");
} else {
console.log("sdk初始化失败");
zegoClient.unInitSDK();
}
- 登录房间,参考代码
// 登陆房间
let ret = zegoClient.loginRoom({
room_id: TEST_ROOM_ID, // 房间id
room_name: TEST_ROOM_NAME, // 房间名字
role: ZEGOCONSTANTS.ZegoRoomRole.Audience // 房间角色
}, rs => {
console.log("登录结果返回 ", rs);
if (rs.error_code == 0) {
console.log("登录成功");
} else {
console.log("登录失败,错误码为:" + rs.error_code);
}
});
- 选择设备,参考代码
// 获取摄像头设备列表
let video_devices_list = zegoClient.getVideoDeviceList();
console.log("got video devices list:", video_devices_list);
if(video_devices_list.length > 0){
let cur_sel_index = 0; // 设备索引,选择第一个设备
zegoClient.setVideoDevice({
device_id: video_devices_list[cur_sel_index].device_id
});
}
- 预览摄像头,参考代码
// 设置预览view
let set_ret = zegoClient.setPreviewView({
// 设置canvas
canvas_view: document.getElementById("localVideo"),
// 通道索引,默认主通道
channel_index: ZEGOCONSTANTS.PublishChannelIndex.PUBLISH_CHN_MAIN
});
if (set_ret) {
// 开始预览
let preview_ret = zegoClient.startPreview({
channel_index: ZEGOCONSTANTS.PublishChannelIndex.PUBLISH_CHN_MAIN
});
console.log("预览结果", preview_ret);
}
- 开启回音消除、噪音消除和增益,参考代码
// 开启回音消除
zegoClient.enableAEC({enable:true});
// 开启噪音消除
zegoClient.enableANS({enable:true});
// 开启自动增益控制
zegoClient.enableAGC({enable:true});
- 开始推流,发送音视频数据,参考代码
// 开始推流
let ret = zegoClient.startPublishing({
title: "zego electron simple test xx",// 推流标题
stream_id: TEST_PUB_STREAM_ID,// 推流id
// 推流flag,连麦、混流还是单主播
publish_flag: ZEGOCONSTANTS.ZegoPublishFlag.ZEGO_JOIN_PUBLISH,
params: ""// 推流参数
});
- 开始拉流,播放音视频数据,开发过程中,需要传递的流id参数是对方的流id,这里为了演示,拉取的是自己的流id。参考代码
// 开始拉流播放
zegoClient.startPlayingStream({
stream_id: TEST_PLAY_STREAM_ID, // 拉流id
canvas_view: document.getElementById("remoteVideo"), // 设置播放的canvas
params: "" // 拉流参数
});
- 停止拉流播放音视频数据,参考代码
zegoClient.stopPlayingStream({
stream_id: TEST_PLAY_STREAM_ID // 流id
});
- 停止推流发送音视频数据,参考代码
zegoClient.stopPublishing({
// 通道
channel_index: ZEGOCONSTANTS.PublishChannelIndex.PUBLISH_CHN_MAIN
});
- 退出房间,参考代码
zegoClient.logoutRoom(rs => { });
- 反初始化sdk,参考代码
zegoClient.unInitSDK();
-
生产环境中,不打开调试栏,关闭方法为,注释掉main.js的第18行代码,mainWindow.webContents.openDevTools()
-
更多的功能接口和触发通知事件,请查阅工程demo示例和 官网SDK 的 Electron API接口文档。
-
注意点说明
- 推流和拉流:Zego SDK 把采集我方的音视频,编码后发送到 Zego 实时网络,此步骤被称为“推流”。同时,Zego SDK 从 Zego 实时网络中接收对方的音视频数据流,解码得到对方的声音与画面,此步骤被称作“拉流”。通话双方各自推我方流和拉对方流,视频通话就建立起来了。
- 用户id设置:业务保证唯一即可。
- 推流时机:登陆房间成功后,在进行推流操作。
- 拉流时机:在实现过程中,拉取的是对方的流,所以拉流操作传递的流id参数是对方的流id。在onStreamUpdated事件的流新增事件时可以获取到对方的流id。当收到新增流事件时在进行拉流操作。
- 房间登录相关说明,查看官网房间登录。
在工程package.json文件中,通过指定zego liveroom sdk版本号,可以下载到指定版本的sdk。
包括两部分:前缀和sdk迭代版本号; 其中前缀表示对应的Electron版本号。 sdk迭代版本号是ZEGO每次迭代更新SDK后,以当前年月作为迭代版本号。
例如:2020年5月份zego发布的Electron sdk版本列表如下:
1.8.4-2020-05
1.8.8-2020-05
2.0.18-2020-05
3.0.16-2020-05
3.1.13-2020-05
4.0.8-2020-05
4.1.5-2020-05
4.2.11-2020-05
4.2.12-2020-05
5.0.8-2020-05
5.0.11-2020-05
5.0.12-2020-05
一些新特性的更新需要,ZEGO 提供latest版本.
通过以下版本号可以下载到对应electron版本的最新zego sdk。
1.8.4-latest
1.8.8-latest
2.0.18-latest
3.0.16-latest
3.1.13-latest
4.0.8-latest
4.1.5-latest
4.2.11-latest
4.2.12-latest
5.0.8-latest
5.0.11-latest
5.0.12-latest
6.0.12-latest
使用5.0.12的Electron,要下载zego的2020年05月份的版本sdk。配置如下
方式一:
通过postinstall配置zegodown指定版本号。
{
"name": "zego-electron-quick-start",
"version": "1.0.0",
"description": "A zego electron sdk quick start application",
"main": "main.js",
"scripts": {
"postinstall": "node node_modules/zegodown/bin/zegodown -v 5.0.12-2020-05",
"start": "electron ."
},
"author": "zego",
"license": "MIT",
"devDependencies": {
"electron": "5.0.12",
"electron-builder": "^20.28.4"
},
"dependencies": {
"zegoliveroom": "latest",
"zegodown": "latest"
},
"build": {
"extraResources": [
"./node_modules/zegoliveroom/**"
]
}
}
如果指定下载32位,postinstall配置为 node node_modules/zegodown/bin/zegodown -v 4.0.8 -a ia32
如果指定下载64位 node node_modules/zegodown/bin/zegodown -v 4.0.8 -a x64
如果不指定,默认取值为node的os.platform()平台信息
mac 下不支持32位,都为64位。
方式二:
通过配置zegoDeps指定版本号。
{
"name": "zego-electron-quick-start",
"version": "1.0.0",
"description": "A zego electron sdk quick start application",
"main": "main.js",
"scripts": {
"start": "electron ."
},
"zegoDeps": {
"electron": "5.0.12-2020-05",
"arch": "auto"
},
"author": "zego",
"license": "MIT",
"devDependencies": {
"electron": "5.0.12",
"electron-builder": "^20.28.4"
},
"dependencies": {
"zegoliveroom": "latest",
"zegodown": "latest"
},
"build": {
"extraResources": [
"./node_modules/zegoliveroom/**"
]
}
}
"electron": "5.0.12" 表示对应的Electron版本号,
"arch": "auto" 表示自动根据平台下载32位或者64位信息。
"arch": "ia32" 表示指定32位的zego sdk。
"arch": "x64" 表示指定64位zego sdk。
mac 下不支持32位,都为64位。
配置postinstall 下载zego sdk,用户每次执行npm install 时,都会从zego服务器下载sdk并替换更新本地的。
配置zegoDeps 只有第一次npm install 时会下载zego sdk,以后执行npm install时,不会再下载更新,除非删除掉node_modules文件夹,在执行npm install 才会重新下载。
目前支持指定以下版本Electron
['1.8.4', '1.8.8', '2.0.18', '3.0.16', '3.1.13', '4.0.8', '4.1.5', '4.2.11', '5.0.11', '5.0.12']
[
'1.8.4-2020-05',
'1.8.8-2020-05',
'2.0.18-2020-05',
'3.0.16-2020-05',
'3.1.13-2020-05',
'4.0.8-2020-05',
'4.1.5-2020-05',
'4.2.11-2020-05',
'4.2.12-2020-05',
'5.0.8-2020-05',
'5.0.11-2020-05',
'5.0.12-2020-05'
]
[
'1.8.4-latest',
'1.8.8-latest',
'2.0.18-latest',
'3.0.16-latest',
'3.1.13-latest',
'4.0.8-latest',
'4.1.5-latest',
'4.2.11-latest',
'4.2.12-latest',
'5.0.8-latest',
'5.0.11-latest',
'5.0.12-latest'
'6.0.12-latest'
]