问题
官方文档
https://docs.agora.io/cn/Interactive%20Broadcast/start_live_audio_electron?platform=Electron
license用量地址
https://console.shengwang.cn/license/usage
错误
agora_node_ext.node is not a valid Win32 application
查看Electron所有版本
https://npm.taobao.org/mirrors/electron/
解决办法
先删除项目下的node_moudle
清空缓存
1 | npm cache clean --force |
项目根目录添加.npmrc
文件
保证下载的Electron为32位版本
1 | arch=ia32 |
或者
Windows 平台请先运行
npm install -D --arch=ia32 electron
安装 32 位的 Electron,然后运行npm install
。否则会收到报错:Not a valid win32 application
。如果项目根目录下已有
node_modules
文件夹,建议先删除该文件夹,再运行npm install
,以免出现报错。
package.json中添加agora_electron
和config
的部分
1 | { |
其中:
agora_electron
:保证预编译版本和electron的版本一致
main.js
中添加
1 | app.allowRendererProcessReuse = false; |
缺一不可
安装
1 | npm install |
推送摄像头
1 | // Code that will run only after the |
共享窗口
1 | const AgoraRtcEngine = require('agora-electron-sdk').default |
获取所有的窗口
1 | getScreenWindowsInfo(rtcEngine) {//声网获取窗口 |
使用
1 | let win_arr = await this.getScreenWindowsInfo(rtcEngine); |
共享屏幕
获取屏幕
1 | getDisplays(rtcEngine) {//声网获取屏幕 |
单路推流
如果是不推送摄像头建议用该方法,更省CPU
1 | let that = this; |
双路推流
1 | { |
注意
rtcEngine.enableLocalVideo(false);
和rtcEngine.muteLocalVideoStream(true);
不能同时调用会导致网页上闪屏
二次渲染报错
1 | const remoteVideoContainer = document.getElementById( |
主要是调用
1 | await rtcEngine.setupRemoteVideo(userid, null); |
setupViewContentMode
setupViewContentMode要在subscribe之后调用
1 | setupViewContentMode(uid, mode, channelId) |
设置视窗内容显示模式。
Parameters
uid: number | “local” | “videosource”
用户 ID,表示设置的是哪个用户的流。设置远端用户的流时,请确保你已先调用 subscribe 方法订阅该远端用户流。
mode: 0 | 1
视窗内容显示模式:
- 0:优先保证视窗被填满。视频尺寸等比缩放,直至整个视窗被视频填满。如果视频长宽与显示窗口不同,多出的视频将被截掉。
- 1: 优先保证视频内容全部显示。视频尺寸等比缩放,直至视频窗口的一边与视窗边框对齐。如果视频长宽与显示窗口不同,视窗上未被填满的区域将被涂黑。
channelId: string | undefined
设置音频设备
获取所有的音频设备
获取麦克风设备
1 | let rtcEngine = new AgoraRtcEngine(); |
设置音频设备
1 | rtcEngine.setAudioRecordingDevice(audio_deviceId); |
注意
获取到的设备ID和HTML5获取到的设备ID的值是不一样的
H5获取的
1 | { |
声网获取的
1 | { |
麦克风设备测试
音频设备测试
设置音频设备
获取当前的音频设备
获取麦克风的最大音量
获取音频设备
1 | getAllAudio() { |
测试
1 | showAudioTest() { |
退出前结束测试
1 | let rtcEngine = global.rtcEngine; |
其他测试
设备通话回路测试
网络质量测试
监听声音
1 | rtcEngine.enableAudioVolumeIndication(200, 3, false); |
uid为0的是自己
volume值范围(0-255)
服务端录制
开始录制
1 | { |
OSS获取封面
1 | // 填写视频文件的完整路径。 |
阿里云的说明地址:https://help.aliyun.com/document_detail/64555.html?spm=a2c4g.11174283.6.1472.55457da2vrSZqX
使用fast模式截取视频3s处的内容,输出为JPG格式的图片,宽度为1280,高度为800。
处理后的URL为:
1 | https://xhlivetest.oss-cn-hangzhou.aliyuncs.com/0ba655c2f84cd780626e13838c965168_AAAAAA_10706_0.mp4?x-oss-process=video/snapshot,t_3000,f_jpg,w_1280,h_800,m_fast |
获取时长
引入阿里云osspom
1 | <dependency> |
阿里云工具类
1 | /** |
阿里云配置类
1 |
|
阿里云根据资源路径获取资源时长代码
1 | public int getVideoDuration(String videoUrl) { |
这里需要注意:HttpRequest httpRequest = HttpRequest.get(videoUrl).timeout(30000);
请求是一定不要加 .header("Content-Type", "application/json")
头,不然会验证签名失败