trtc-electron-sdk 12.0.606 → 12.1.608
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/liteav/VideoRenderControl/VideoRenderFPSMonitor.d.ts +37 -0
- package/liteav/VideoRenderControl/VideoRenderFPSMonitor.js +127 -0
- package/liteav/trtc.d.ts +57 -9
- package/liteav/trtc.js +78 -27
- package/liteav/trtc_define.d.ts +14 -0
- package/liteav/trtc_define.js +50 -2
- package/package.json +1 -1
- package/scripts/copy-sdk.js +4 -0
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ Tencent Real-Time Communication (TRTC) is a set of low-latency, high-quality rea
|
|
|
23
23
|
## ⏬ Install
|
|
24
24
|
By default, it will install the SDK compatible with your device Operation System platform and node.js CPU architecture. If you want to install SDK for specific Operating System or CPU architecture. You can configure the `platform` and `arch` you want in `package.json` or `.npmrc` file as following code. If you configure both, the configuration in `package.json` will work and override that in `.npmrc`.
|
|
25
25
|
|
|
26
|
-
```
|
|
26
|
+
```js
|
|
27
27
|
// package.json
|
|
28
28
|
{
|
|
29
29
|
...
|
|
@@ -65,7 +65,7 @@ const version = rtcCloud.getSDKVersion();
|
|
|
65
65
|
## 📦 Build
|
|
66
66
|
Taking webpack and electron-builder as example.
|
|
67
67
|
|
|
68
|
-
```
|
|
68
|
+
```js
|
|
69
69
|
// webpack config
|
|
70
70
|
module.exports = {
|
|
71
71
|
...
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @class RenderFPSMonitor
|
|
3
|
+
*/
|
|
4
|
+
declare class VideoRenderFPSMonitor {
|
|
5
|
+
private logPrefix;
|
|
6
|
+
private emitter;
|
|
7
|
+
private nextAnimationFrame;
|
|
8
|
+
private lastTimestamp;
|
|
9
|
+
private refreshCount;
|
|
10
|
+
private pageRefreshFPS;
|
|
11
|
+
private lastPageRefreshFPS;
|
|
12
|
+
private videoRenderFPS;
|
|
13
|
+
private lastVideoRenderFPS;
|
|
14
|
+
private statisticDuration;
|
|
15
|
+
constructor();
|
|
16
|
+
private initPageRefreshFPSStatistic;
|
|
17
|
+
private statisticPageRefreshFPS;
|
|
18
|
+
/**
|
|
19
|
+
* 规则:
|
|
20
|
+
* 页面刷新帧率低于 10 时,设置渲染帧率为 5
|
|
21
|
+
* 页面刷新帧率低于 20 时,设置渲染帧率为 15
|
|
22
|
+
* 页面刷新帧率低于 30 时,设置渲染帧率为 25
|
|
23
|
+
* 页面刷新帧率高于 30 时,设置渲染帧率为 -1,负数表示关闭渲染帧率限制
|
|
24
|
+
* 页面刷新帧率从低于 10 到 30+ 时,持续 2 秒后,设置渲染帧率为 15
|
|
25
|
+
* 页面刷新帧率从低于 20 到 30+ 时,持续 2 秒后,设置渲染帧率为 25
|
|
26
|
+
* 页面刷新帧率从低于 30 到 30+ 时,持续 2 秒后,设置渲染帧率为 -1,负数表示关闭渲染帧率限制
|
|
27
|
+
*/
|
|
28
|
+
private statisticVideoRenderFPS;
|
|
29
|
+
private onVisibilityChange;
|
|
30
|
+
private notifyFPS;
|
|
31
|
+
destroy(): void;
|
|
32
|
+
on(event: string, listener: (...args: any[]) => void): void;
|
|
33
|
+
off(event: string, listener: (...args: any[]) => void): void;
|
|
34
|
+
emit(event: string, ...args: any[]): void;
|
|
35
|
+
}
|
|
36
|
+
export declare const videoRenderFPSMonitor: VideoRenderFPSMonitor;
|
|
37
|
+
export default VideoRenderFPSMonitor;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.videoRenderFPSMonitor = void 0;
|
|
7
|
+
const events_1 = require("events");
|
|
8
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
9
|
+
/**
|
|
10
|
+
* @class RenderFPSMonitor
|
|
11
|
+
*/
|
|
12
|
+
class VideoRenderFPSMonitor {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.logPrefix = '[RenderFPSMonitor]';
|
|
15
|
+
this.emitter = new events_1.EventEmitter();
|
|
16
|
+
this.nextAnimationFrame = 0;
|
|
17
|
+
this.lastTimestamp = 0;
|
|
18
|
+
this.refreshCount = 0;
|
|
19
|
+
this.pageRefreshFPS = 0;
|
|
20
|
+
this.lastPageRefreshFPS = 60;
|
|
21
|
+
this.videoRenderFPS = 0;
|
|
22
|
+
this.lastVideoRenderFPS = -1;
|
|
23
|
+
this.statisticDuration = 2000;
|
|
24
|
+
this.statisticPageRefreshFPS = this.statisticPageRefreshFPS.bind(this);
|
|
25
|
+
this.onVisibilityChange = this.onVisibilityChange.bind(this);
|
|
26
|
+
this.initPageRefreshFPSStatistic();
|
|
27
|
+
document.addEventListener('visibilitychange', this.onVisibilityChange);
|
|
28
|
+
}
|
|
29
|
+
initPageRefreshFPSStatistic() {
|
|
30
|
+
if (window.requestAnimationFrame) {
|
|
31
|
+
this.nextAnimationFrame = window.requestAnimationFrame(this.statisticPageRefreshFPS);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
statisticPageRefreshFPS(timestamp) {
|
|
35
|
+
if (this.lastTimestamp === 0) {
|
|
36
|
+
this.lastTimestamp = timestamp;
|
|
37
|
+
}
|
|
38
|
+
this.refreshCount++;
|
|
39
|
+
const duration = timestamp - this.lastTimestamp;
|
|
40
|
+
if (duration >= this.statisticDuration) {
|
|
41
|
+
this.lastPageRefreshFPS = this.pageRefreshFPS;
|
|
42
|
+
this.pageRefreshFPS = Math.round(this.refreshCount * 1000 / duration);
|
|
43
|
+
setTimeout(() => {
|
|
44
|
+
this.statisticVideoRenderFPS();
|
|
45
|
+
}, 0);
|
|
46
|
+
this.lastTimestamp = timestamp;
|
|
47
|
+
this.refreshCount = 0;
|
|
48
|
+
}
|
|
49
|
+
this.nextAnimationFrame = window.requestAnimationFrame(this.statisticPageRefreshFPS);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 规则:
|
|
53
|
+
* 页面刷新帧率低于 10 时,设置渲染帧率为 5
|
|
54
|
+
* 页面刷新帧率低于 20 时,设置渲染帧率为 15
|
|
55
|
+
* 页面刷新帧率低于 30 时,设置渲染帧率为 25
|
|
56
|
+
* 页面刷新帧率高于 30 时,设置渲染帧率为 -1,负数表示关闭渲染帧率限制
|
|
57
|
+
* 页面刷新帧率从低于 10 到 30+ 时,持续 2 秒后,设置渲染帧率为 15
|
|
58
|
+
* 页面刷新帧率从低于 20 到 30+ 时,持续 2 秒后,设置渲染帧率为 25
|
|
59
|
+
* 页面刷新帧率从低于 30 到 30+ 时,持续 2 秒后,设置渲染帧率为 -1,负数表示关闭渲染帧率限制
|
|
60
|
+
*/
|
|
61
|
+
statisticVideoRenderFPS() {
|
|
62
|
+
if (this.pageRefreshFPS <= 10) {
|
|
63
|
+
this.videoRenderFPS = this.pageRefreshFPS < 5 ? this.pageRefreshFPS : 5;
|
|
64
|
+
}
|
|
65
|
+
else if (this.pageRefreshFPS <= 20) {
|
|
66
|
+
this.videoRenderFPS = this.pageRefreshFPS < 15 ? this.pageRefreshFPS : 15;
|
|
67
|
+
}
|
|
68
|
+
else if (this.pageRefreshFPS <= 30) {
|
|
69
|
+
this.videoRenderFPS = this.pageRefreshFPS < 25 ? this.pageRefreshFPS : 25;
|
|
70
|
+
}
|
|
71
|
+
else if (this.pageRefreshFPS > 30 && this.lastPageRefreshFPS <= 10) {
|
|
72
|
+
this.videoRenderFPS = 15;
|
|
73
|
+
}
|
|
74
|
+
else if (this.pageRefreshFPS > 30 && this.lastPageRefreshFPS <= 20) {
|
|
75
|
+
this.videoRenderFPS = 25;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.videoRenderFPS = -1;
|
|
79
|
+
}
|
|
80
|
+
if (this.lastVideoRenderFPS !== this.videoRenderFPS) {
|
|
81
|
+
this.lastVideoRenderFPS = this.videoRenderFPS;
|
|
82
|
+
this.notifyFPS();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
onVisibilityChange() {
|
|
86
|
+
if (document.hidden) {
|
|
87
|
+
logger_1.default.info(`${this.logPrefix} document hidden`);
|
|
88
|
+
this.videoRenderFPS = 1;
|
|
89
|
+
this.pageRefreshFPS = 1;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
logger_1.default.info(`${this.logPrefix} document show`);
|
|
93
|
+
this.videoRenderFPS = 5; // 慢启动
|
|
94
|
+
this.pageRefreshFPS = 5;
|
|
95
|
+
}
|
|
96
|
+
this.lastVideoRenderFPS = this.videoRenderFPS;
|
|
97
|
+
this.lastTimestamp = 0;
|
|
98
|
+
this.refreshCount = 0;
|
|
99
|
+
this.notifyFPS();
|
|
100
|
+
}
|
|
101
|
+
notifyFPS() {
|
|
102
|
+
logger_1.default.debug(`${this.logPrefix} pageRefreshFPS:${this.pageRefreshFPS} videoRenderFPS: ${this.videoRenderFPS}`);
|
|
103
|
+
this.emit('videoRenderFPS', {
|
|
104
|
+
pageFPS: this.pageRefreshFPS,
|
|
105
|
+
videoFPS: this.videoRenderFPS,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
destroy() {
|
|
109
|
+
if (this.nextAnimationFrame) {
|
|
110
|
+
window.cancelAnimationFrame(this.nextAnimationFrame);
|
|
111
|
+
this.nextAnimationFrame = 0;
|
|
112
|
+
}
|
|
113
|
+
this.emitter.removeAllListeners();
|
|
114
|
+
document.removeEventListener('visibilitychange', this.onVisibilityChange);
|
|
115
|
+
}
|
|
116
|
+
on(event, listener) {
|
|
117
|
+
this.emitter.on(event, listener);
|
|
118
|
+
}
|
|
119
|
+
off(event, listener) {
|
|
120
|
+
this.emitter.off(event, listener);
|
|
121
|
+
}
|
|
122
|
+
emit(event, ...args) {
|
|
123
|
+
this.emitter.emit(event, ...args);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.videoRenderFPSMonitor = new VideoRenderFPSMonitor();
|
|
127
|
+
exports.default = VideoRenderFPSMonitor;
|
package/liteav/trtc.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
3
|
import { TRTCConfig } from './Renderer/util';
|
|
4
|
-
import { AudioMusicParam, Rect, TRTCAppScene, TRTCAudioEffectParam, TRTCAudioQuality, TRTCBeautyStyle, TRTCDeviceState, TRTCDeviceType, TRTCLogLevel, TRTCRenderParams, TRTCRoleType, TRTCSpeedTestResult, TRTCStatistics, TRTCSwitchRoomParam, TRTCVideoBufferType, TRTCVideoFillMode, TRTCAudioFrame, TRTCVideoPixelFormat, TRTCVideoRotation, TRTCVideoStreamType, TRTCVolumeInfo, TRTCWaterMarkSrcType, TRTCQualityInfo, TRTCPluginType, TRTCPluginInfo, TRTCVideoProcessPluginOptions, TRTCMediaEncryptDecryptPluginOptions, TRTCAudioRecordingParams, TRTCScreenCaptureSourceInfo, TRTCScreenCaptureProperty, TRTCSpeedTestParams, TRTCRecordType, TRTCDeviceInfo, TRTCCameraCaptureParams, TRTCImageBuffer, TRTCInitConfig, TRTCAudioParallelParams, TRTCVoiceReverbType, TRTCMusicPlayObserver, TRTCAudioFrameCallback, TRTCAudioProcessPluginOptions } from './trtc_define';
|
|
4
|
+
import { AudioMusicParam, Rect, TRTCAppScene, TRTCAudioEffectParam, TRTCAudioQuality, TRTCBeautyStyle, TRTCDeviceState, TRTCDeviceType, TRTCLogLevel, TRTCRenderParams, TRTCRoleType, TRTCSpeedTestResult, TRTCStatistics, TRTCSwitchRoomParam, TRTCVideoBufferType, TRTCVideoFillMode, TRTCAudioFrame, TRTCVideoPixelFormat, TRTCVideoRotation, TRTCVideoStreamType, TRTCVolumeInfo, TRTCWaterMarkSrcType, TRTCQualityInfo, TRTCPluginType, TRTCPluginInfo, TRTCVideoProcessPluginOptions, TRTCMediaEncryptDecryptPluginOptions, TRTCAudioRecordingParams, TRTCScreenCaptureSourceInfo, TRTCScreenCaptureProperty, TRTCSpeedTestParams, TRTCRecordType, TRTCDeviceInfo, TRTCCameraCaptureParams, TRTCImageBuffer, TRTCInitConfig, TRTCAudioParallelParams, TRTCVoiceReverbType, TRTCVoiceChangerType, TRTCMusicPlayObserver, TRTCAudioFrameCallback, TRTCAudioProcessPluginOptions } from './trtc_define';
|
|
5
5
|
export * from './trtc_define';
|
|
6
6
|
export * from './trtc_code';
|
|
7
7
|
export * from './vod_player';
|
|
@@ -67,6 +67,7 @@ declare class TRTCCloud extends EventEmitter {
|
|
|
67
67
|
* 注释:会同时销毁所有子实例
|
|
68
68
|
*/
|
|
69
69
|
static destroyTRTCShareInstance(): void;
|
|
70
|
+
private onFPSChanged;
|
|
70
71
|
/**
|
|
71
72
|
* 创建子实例
|
|
72
73
|
*
|
|
@@ -1209,7 +1210,6 @@ declare class TRTCCloud extends EventEmitter {
|
|
|
1209
1210
|
* 如果录制任务在退出房间前尚未通过本接口停止,则退出房间后录音任务会自动被停止。
|
|
1210
1211
|
*/
|
|
1211
1212
|
stopLocalRecording(): void;
|
|
1212
|
-
setVideoRenderFPS(fps: number): void;
|
|
1213
1213
|
/**
|
|
1214
1214
|
* 开启本地音频的采集和上行
|
|
1215
1215
|
*
|
|
@@ -2205,16 +2205,59 @@ declare class TRTCCloud extends EventEmitter {
|
|
|
2205
2205
|
* @param {Number} volume - 音量大小,100为正常音量,取值范围为0 - 100;默认值:100
|
|
2206
2206
|
*/
|
|
2207
2207
|
setMusicPublishVolume(id: number, volume: number): void;
|
|
2208
|
+
/**
|
|
2209
|
+
* 开启耳返
|
|
2210
|
+
*
|
|
2211
|
+
* 主播开启耳返后,可以在耳机里听到麦克风采集到的自己发出的声音,该特效适用于主播唱歌的应用场景中。
|
|
2212
|
+
*
|
|
2213
|
+
* 需要您注意的是,由于蓝牙耳机的硬件延迟非常高,所以在主播佩戴蓝牙耳机时无法开启此特效,请尽量在用户界面上提示主播佩戴有线耳机。同时也需要注意,并非所有的手机开启此特效后都能达到优秀的耳返效果,我们已经对部分耳返效果不佳的手机屏蔽了该特效。
|
|
2214
|
+
* @param {Boolean} enable - 是否开启耳返。
|
|
2215
|
+
*/
|
|
2216
|
+
enableVoiceEarMonitor(enable: boolean): void;
|
|
2217
|
+
/**
|
|
2218
|
+
* 设置耳返音量
|
|
2219
|
+
*
|
|
2220
|
+
* 通过该接口您可以设置耳返特效中声音的音量大小。
|
|
2221
|
+
*
|
|
2222
|
+
* 如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
|
|
2223
|
+
* @param {Number} volumn - 音量大小,取值范围为0 - 100,默认值:100。
|
|
2224
|
+
*/
|
|
2225
|
+
setVoiceEarMonitorVolume(volumn: number): void;
|
|
2226
|
+
/**
|
|
2227
|
+
* 设置语音音量
|
|
2228
|
+
*
|
|
2229
|
+
* 该接口可以设置语音音量的大小,一般配合音乐音量的设置接口 setAllMusicVolume 协同使用,用于调谐语音和音乐在混音前各自的音量占比。
|
|
2230
|
+
*
|
|
2231
|
+
* 如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
|
|
2232
|
+
* @param {Number} volume - 音量大小,取值范围为0 - 100,默认值:100。
|
|
2233
|
+
*/
|
|
2234
|
+
setVoiceCaptureVolume(volume: number): void;
|
|
2235
|
+
/**
|
|
2236
|
+
* 设置语音音调
|
|
2237
|
+
*
|
|
2238
|
+
* 该接口可以设置语音音调,用于实现变调不变速的目的。
|
|
2239
|
+
* @param {Number} pitch - 音调,取值范围为-1.0f~1.0f,默认值:0.0f。
|
|
2240
|
+
*/
|
|
2241
|
+
setVoicePitch(pitch: number): void;
|
|
2208
2242
|
/**
|
|
2209
2243
|
* 设置人声的混响效果
|
|
2210
2244
|
*
|
|
2211
|
-
*
|
|
2245
|
+
* 通过该接口您可以设置人声的混响效果,具体特效请参见枚举定义。
|
|
2212
2246
|
*
|
|
2213
2247
|
* 注意:设置的效果在退出房间后会自动失效,如果下次进房还需要对应特效,需要调用此接口再次进行设置。
|
|
2214
2248
|
*
|
|
2215
|
-
* @param {TRTCVoiceReverbType} type -
|
|
2249
|
+
* @param {TRTCVoiceReverbType} type - 人声的混响效果类型。
|
|
2216
2250
|
*/
|
|
2217
2251
|
setVoiceReverbType(type: TRTCVoiceReverbType): void;
|
|
2252
|
+
/**
|
|
2253
|
+
* 设置人声的变声效果
|
|
2254
|
+
*
|
|
2255
|
+
* 通过该接口您可以设置人声的变声效果,具体特效请参见枚举定义
|
|
2256
|
+
*
|
|
2257
|
+
* 注意:设置的效果在退出房间后会自动失效,如果下次进房还需要对应特效,需要调用此接口再次进行设置
|
|
2258
|
+
* @param {TRTCVoiceChangerType} type - 人声的变声效果类型 。
|
|
2259
|
+
*/
|
|
2260
|
+
setVoiceChangerType(type: TRTCVoiceChangerType): void;
|
|
2218
2261
|
/**
|
|
2219
2262
|
* 废弃接口: 播放音效
|
|
2220
2263
|
*
|
|
@@ -2385,18 +2428,23 @@ declare class TRTCCloud extends EventEmitter {
|
|
|
2385
2428
|
/**
|
|
2386
2429
|
* 设置日志保存路径
|
|
2387
2430
|
*
|
|
2388
|
-
*
|
|
2389
|
-
* - windows 日志文件默认保存在 C:/Users/[系统用户名]/AppData/Roaming/
|
|
2431
|
+
* 通过该接口您可以更改 SDK 本地日志的默认存储路径,SDK 默认的本地日志的存储位置:
|
|
2432
|
+
* - windows 日志文件默认保存在 C:/Users/[系统用户名]/AppData/Roaming/liteav/log,即 %appdata%/liteav/log 下,如需修改,必须在所有方法前调用。
|
|
2390
2433
|
* - mac 日志文件默认保存在 sandbox Documents/log 下,如需修改,必须在所有方法前调用。
|
|
2391
2434
|
*
|
|
2435
|
+
* 注意:请务必在所有其他接口之前调用,并且保证您指定的目录是存在的,并且您的应用程序拥有对该目录的读写权限。
|
|
2436
|
+
*
|
|
2392
2437
|
* @param {String} path - 存储日志的文件夹,例如 "D:\\Log",UTF-8 编码
|
|
2393
2438
|
*/
|
|
2394
2439
|
setLogDirPath(path: string): void;
|
|
2395
2440
|
/**
|
|
2396
2441
|
* 设置日志回调
|
|
2397
|
-
*
|
|
2442
|
+
*
|
|
2443
|
+
* 注意: 如何您设置了日志回调,SDK的日志信息将会回调给您,您需要自行在代码中处理。当 callback 为 null 时取消日志回调,SDK 将不会再回调日志。
|
|
2444
|
+
*
|
|
2445
|
+
* @param {Function | null} callback - 日志回调。 Function 的参数格式为 (log:string, level:TRTCLogLevel, module:string) => void。
|
|
2398
2446
|
*/
|
|
2399
|
-
setLogCallback(callback?: () => void): void;
|
|
2447
|
+
setLogCallback(callback?: (log: string, level: TRTCLogLevel, module: string) => void | null): void;
|
|
2400
2448
|
/**
|
|
2401
2449
|
* 调用实验性 API 接口
|
|
2402
2450
|
*
|
|
@@ -2466,7 +2514,7 @@ declare class TRTCCloud extends EventEmitter {
|
|
|
2466
2514
|
* - pluginId - 插件ID
|
|
2467
2515
|
* - errorCode - 错误码。0、-1、-2、-3、-4、-5 是 SDK 内部定义错误码,其它错误码是插件自定义错误码。
|
|
2468
2516
|
* - 0 表示 addPlugin 成功
|
|
2469
|
-
* - -1
|
|
2517
|
+
* - -1 插件库加载失败
|
|
2470
2518
|
* - -2 插件库缺少插件创建函数
|
|
2471
2519
|
* - -3 创建函数执行失败
|
|
2472
2520
|
* - -4 插件初始化函数执行失败
|
package/liteav/trtc.js
CHANGED
|
@@ -36,6 +36,7 @@ const trtc_define_1 = require("./trtc_define");
|
|
|
36
36
|
const validate_util_1 = require("./validate-util");
|
|
37
37
|
const logger_1 = __importStar(require("./logger"));
|
|
38
38
|
const LocalVideoRenderController_1 = __importDefault(require("./VideoRenderControl/LocalVideoRenderController"));
|
|
39
|
+
const VideoRenderFPSMonitor_1 = require("./VideoRenderControl/VideoRenderFPSMonitor");
|
|
39
40
|
const NodeTRTCEngine = require('../build/Release/trtc_electron_sdk.node');
|
|
40
41
|
const pkg = require('../package.json');
|
|
41
42
|
__exportStar(require("./trtc_define"), exports);
|
|
@@ -204,8 +205,9 @@ class TRTCCloud extends events_1.EventEmitter {
|
|
|
204
205
|
};
|
|
205
206
|
// 本地合图插件
|
|
206
207
|
// this.localMediaTranscoder = null;
|
|
207
|
-
this.videoRenderFPS =
|
|
208
|
-
this.
|
|
208
|
+
this.videoRenderFPS = 60;
|
|
209
|
+
this.onFPSChanged = this.onFPSChanged.bind(this);
|
|
210
|
+
VideoRenderFPSMonitor_1.videoRenderFPSMonitor.on('videoRenderFPS', this.onFPSChanged);
|
|
209
211
|
this.callExperimentalAPI("{\"api\":\"setCurrentEnvironment\",\"params\" :{\"electron\":true}}");
|
|
210
212
|
this._localVideoRenderCallback = this._localVideoRenderCallback.bind(this);
|
|
211
213
|
this._remoteVideoRenderCallback = this._remoteVideoRenderCallback.bind(this);
|
|
@@ -241,6 +243,10 @@ class TRTCCloud extends events_1.EventEmitter {
|
|
|
241
243
|
TRTCCloud.sharedTRTCCloudInstance = null;
|
|
242
244
|
}
|
|
243
245
|
}
|
|
246
|
+
onFPSChanged(options) {
|
|
247
|
+
this.videoRenderFPS = options.videoFPS !== -1 ? options.videoFPS : 60;
|
|
248
|
+
this.rtcCloud.setVideoRenderFPS(this.videoRenderFPS);
|
|
249
|
+
}
|
|
244
250
|
/**
|
|
245
251
|
* 创建子实例
|
|
246
252
|
*
|
|
@@ -310,6 +316,7 @@ class TRTCCloud extends events_1.EventEmitter {
|
|
|
310
316
|
else {
|
|
311
317
|
TRTCCloud.subInstances = TRTCCloud.subInstances.filter((item) => { return item != this; });
|
|
312
318
|
}
|
|
319
|
+
VideoRenderFPSMonitor_1.videoRenderFPSMonitor.off('videoRenderFPS', this.onFPSChanged);
|
|
313
320
|
this.playAudioEffectIdList = [];
|
|
314
321
|
this.remoteFillModeMap.clear();
|
|
315
322
|
this.rtcCloud.destroy();
|
|
@@ -863,17 +870,6 @@ class TRTCCloud extends events_1.EventEmitter {
|
|
|
863
870
|
* @param {TRTCStatistics} statis - 统计数据,包括本地和远程的
|
|
864
871
|
*/
|
|
865
872
|
handleOnStatistics(statis) {
|
|
866
|
-
if (statis.systemCpu >= 95 && this.videoRenderFPS !== 5) {
|
|
867
|
-
this.setVideoRenderFPS(5);
|
|
868
|
-
}
|
|
869
|
-
else if (statis.systemCpu >= 80 && this.videoRenderFPS !== 10) {
|
|
870
|
-
this.setVideoRenderFPS(10);
|
|
871
|
-
}
|
|
872
|
-
else {
|
|
873
|
-
if (this.videoRenderFPS < 15) {
|
|
874
|
-
this.setVideoRenderFPS(15);
|
|
875
|
-
}
|
|
876
|
-
}
|
|
877
873
|
this.fire('onStatistics', statis);
|
|
878
874
|
}
|
|
879
875
|
/////////////////////////////////////////////////////////////////////////////////
|
|
@@ -2407,11 +2403,6 @@ class TRTCCloud extends events_1.EventEmitter {
|
|
|
2407
2403
|
stopLocalRecording() {
|
|
2408
2404
|
this.rtcCloud.stopLocalRecording();
|
|
2409
2405
|
}
|
|
2410
|
-
setVideoRenderFPS(fps) {
|
|
2411
|
-
const valid_fps = fps >= 5 ? fps : 5;
|
|
2412
|
-
this.videoRenderFPS = valid_fps;
|
|
2413
|
-
this.rtcCloud.setVideoRenderFPS(this.videoRenderFPS);
|
|
2414
|
-
}
|
|
2415
2406
|
/////////////////////////////////////////////////////////////////////////////////
|
|
2416
2407
|
//
|
|
2417
2408
|
// (四)音频相关接口函数
|
|
@@ -3812,18 +3803,74 @@ class TRTCCloud extends events_1.EventEmitter {
|
|
|
3812
3803
|
setMusicPublishVolume(id, volume) {
|
|
3813
3804
|
this.rtcCloud.setMusicPublishVolume(id, volume);
|
|
3814
3805
|
}
|
|
3806
|
+
/**
|
|
3807
|
+
* 开启耳返
|
|
3808
|
+
*
|
|
3809
|
+
* 主播开启耳返后,可以在耳机里听到麦克风采集到的自己发出的声音,该特效适用于主播唱歌的应用场景中。
|
|
3810
|
+
*
|
|
3811
|
+
* 需要您注意的是,由于蓝牙耳机的硬件延迟非常高,所以在主播佩戴蓝牙耳机时无法开启此特效,请尽量在用户界面上提示主播佩戴有线耳机。同时也需要注意,并非所有的手机开启此特效后都能达到优秀的耳返效果,我们已经对部分耳返效果不佳的手机屏蔽了该特效。
|
|
3812
|
+
* @param {Boolean} enable - 是否开启耳返。
|
|
3813
|
+
*/
|
|
3814
|
+
enableVoiceEarMonitor(enable) {
|
|
3815
|
+
this.rtcCloud.enableVoiceEarMonitor(enable);
|
|
3816
|
+
}
|
|
3817
|
+
/**
|
|
3818
|
+
* 设置耳返音量
|
|
3819
|
+
*
|
|
3820
|
+
* 通过该接口您可以设置耳返特效中声音的音量大小。
|
|
3821
|
+
*
|
|
3822
|
+
* 如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
|
|
3823
|
+
* @param {Number} volumn - 音量大小,取值范围为0 - 100,默认值:100。
|
|
3824
|
+
*/
|
|
3825
|
+
setVoiceEarMonitorVolume(volumn) {
|
|
3826
|
+
this.rtcCloud.setVoiceEarMonitorVolume(volumn);
|
|
3827
|
+
}
|
|
3828
|
+
/**
|
|
3829
|
+
* 设置语音音量
|
|
3830
|
+
*
|
|
3831
|
+
* 该接口可以设置语音音量的大小,一般配合音乐音量的设置接口 setAllMusicVolume 协同使用,用于调谐语音和音乐在混音前各自的音量占比。
|
|
3832
|
+
*
|
|
3833
|
+
* 如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
|
|
3834
|
+
* @param {Number} volume - 音量大小,取值范围为0 - 100,默认值:100。
|
|
3835
|
+
*/
|
|
3836
|
+
setVoiceCaptureVolume(volume) {
|
|
3837
|
+
this.rtcCloud.setVoiceCaptureVolume(volume);
|
|
3838
|
+
}
|
|
3839
|
+
/**
|
|
3840
|
+
* 设置语音音调
|
|
3841
|
+
*
|
|
3842
|
+
* 该接口可以设置语音音调,用于实现变调不变速的目的。
|
|
3843
|
+
* @param {Number} pitch - 音调,取值范围为-1.0f~1.0f,默认值:0.0f。
|
|
3844
|
+
*/
|
|
3845
|
+
setVoicePitch(pitch) {
|
|
3846
|
+
if (pitch < -1.0 || pitch > 1.0) {
|
|
3847
|
+
throw new Error('pitch is out of range [-1.0, 1.0]');
|
|
3848
|
+
}
|
|
3849
|
+
this.rtcCloud.setVoicePitch(pitch);
|
|
3850
|
+
}
|
|
3815
3851
|
/**
|
|
3816
3852
|
* 设置人声的混响效果
|
|
3817
3853
|
*
|
|
3818
|
-
*
|
|
3854
|
+
* 通过该接口您可以设置人声的混响效果,具体特效请参见枚举定义。
|
|
3819
3855
|
*
|
|
3820
3856
|
* 注意:设置的效果在退出房间后会自动失效,如果下次进房还需要对应特效,需要调用此接口再次进行设置。
|
|
3821
3857
|
*
|
|
3822
|
-
* @param {TRTCVoiceReverbType} type -
|
|
3858
|
+
* @param {TRTCVoiceReverbType} type - 人声的混响效果类型。
|
|
3823
3859
|
*/
|
|
3824
3860
|
setVoiceReverbType(type) {
|
|
3825
3861
|
this.rtcCloud.setVoiceReverbType(type);
|
|
3826
3862
|
}
|
|
3863
|
+
/**
|
|
3864
|
+
* 设置人声的变声效果
|
|
3865
|
+
*
|
|
3866
|
+
* 通过该接口您可以设置人声的变声效果,具体特效请参见枚举定义
|
|
3867
|
+
*
|
|
3868
|
+
* 注意:设置的效果在退出房间后会自动失效,如果下次进房还需要对应特效,需要调用此接口再次进行设置
|
|
3869
|
+
* @param {TRTCVoiceChangerType} type - 人声的变声效果类型 。
|
|
3870
|
+
*/
|
|
3871
|
+
setVoiceChangerType(type) {
|
|
3872
|
+
this.rtcCloud.setVoiceChangerType(type);
|
|
3873
|
+
}
|
|
3827
3874
|
/////////////////////////////////////////////////////////////////////////////////
|
|
3828
3875
|
//
|
|
3829
3876
|
// (十二)音效相关接口函数
|
|
@@ -4097,6 +4144,7 @@ class TRTCCloud extends events_1.EventEmitter {
|
|
|
4097
4144
|
* - TRTCLogLevelFatal : 只输出 FATAL 级别的 Log
|
|
4098
4145
|
*/
|
|
4099
4146
|
setLogLevel(level) {
|
|
4147
|
+
logger_1.default.setLogLevel(level);
|
|
4100
4148
|
this.logger.setLogLevel(level);
|
|
4101
4149
|
this.rtcCloud.setLogLevel(level);
|
|
4102
4150
|
}
|
|
@@ -4122,10 +4170,12 @@ class TRTCCloud extends events_1.EventEmitter {
|
|
|
4122
4170
|
/**
|
|
4123
4171
|
* 设置日志保存路径
|
|
4124
4172
|
*
|
|
4125
|
-
*
|
|
4126
|
-
* - windows 日志文件默认保存在 C:/Users/[系统用户名]/AppData/Roaming/
|
|
4173
|
+
* 通过该接口您可以更改 SDK 本地日志的默认存储路径,SDK 默认的本地日志的存储位置:
|
|
4174
|
+
* - windows 日志文件默认保存在 C:/Users/[系统用户名]/AppData/Roaming/liteav/log,即 %appdata%/liteav/log 下,如需修改,必须在所有方法前调用。
|
|
4127
4175
|
* - mac 日志文件默认保存在 sandbox Documents/log 下,如需修改,必须在所有方法前调用。
|
|
4128
4176
|
*
|
|
4177
|
+
* 注意:请务必在所有其他接口之前调用,并且保证您指定的目录是存在的,并且您的应用程序拥有对该目录的读写权限。
|
|
4178
|
+
*
|
|
4129
4179
|
* @param {String} path - 存储日志的文件夹,例如 "D:\\Log",UTF-8 编码
|
|
4130
4180
|
*/
|
|
4131
4181
|
setLogDirPath(path) {
|
|
@@ -4134,12 +4184,13 @@ class TRTCCloud extends events_1.EventEmitter {
|
|
|
4134
4184
|
}
|
|
4135
4185
|
/**
|
|
4136
4186
|
* 设置日志回调
|
|
4137
|
-
*
|
|
4187
|
+
*
|
|
4188
|
+
* 注意: 如何您设置了日志回调,SDK的日志信息将会回调给您,您需要自行在代码中处理。当 callback 为 null 时取消日志回调,SDK 将不会再回调日志。
|
|
4189
|
+
*
|
|
4190
|
+
* @param {Function | null} callback - 日志回调。 Function 的参数格式为 (log:string, level:TRTCLogLevel, module:string) => void。
|
|
4138
4191
|
*/
|
|
4139
4192
|
setLogCallback(callback) {
|
|
4140
|
-
|
|
4141
|
-
this.rtcCloud.setLogCallback(callback);
|
|
4142
|
-
}
|
|
4193
|
+
this.rtcCloud.setLogCallback(callback);
|
|
4143
4194
|
}
|
|
4144
4195
|
/**
|
|
4145
4196
|
* 调用实验性 API 接口
|
|
@@ -4342,7 +4393,7 @@ class TRTCCloud extends events_1.EventEmitter {
|
|
|
4342
4393
|
* - pluginId - 插件ID
|
|
4343
4394
|
* - errorCode - 错误码。0、-1、-2、-3、-4、-5 是 SDK 内部定义错误码,其它错误码是插件自定义错误码。
|
|
4344
4395
|
* - 0 表示 addPlugin 成功
|
|
4345
|
-
* - -1
|
|
4396
|
+
* - -1 插件库加载失败
|
|
4346
4397
|
* - -2 插件库缺少插件创建函数
|
|
4347
4398
|
* - -3 创建函数执行失败
|
|
4348
4399
|
* - -4 插件初始化函数执行失败
|
package/liteav/trtc_define.d.ts
CHANGED
|
@@ -595,6 +595,20 @@ export declare enum TRTCVoiceReverbType {
|
|
|
595
595
|
TRTCLiveVoiceReverbType_10 = 10,
|
|
596
596
|
TRTCLiveVoiceReverbType_11 = 11
|
|
597
597
|
}
|
|
598
|
+
export declare enum TRTCVoiceChangerType {
|
|
599
|
+
TRTCLiveVoiceChangerType_0 = 0,
|
|
600
|
+
TRTCLiveVoiceChangerType_1 = 1,
|
|
601
|
+
TRTCLiveVoiceChangerType_2 = 2,
|
|
602
|
+
TRTCLiveVoiceChangerType_3 = 3,
|
|
603
|
+
TRTCLiveVoiceChangerType_4 = 4,
|
|
604
|
+
TRTCLiveVoiceChangerType_5 = 5,
|
|
605
|
+
TRTCLiveVoiceChangerType_6 = 6,
|
|
606
|
+
TRTCLiveVoiceChangerType_7 = 7,
|
|
607
|
+
TRTCLiveVoiceChangerType_8 = 8,
|
|
608
|
+
TRTCLiveVoiceChangerType_9 = 9,
|
|
609
|
+
TRTCLiveVoiceChangerType_10 = 10,
|
|
610
|
+
TRTCLiveVoiceChangerType_11 = 11
|
|
611
|
+
}
|
|
598
612
|
export declare enum TRTCPluginType {
|
|
599
613
|
TRTCPluginTypeUnknown = 0,
|
|
600
614
|
TRTCPluginTypeVideoProcess = 1,
|
package/liteav/trtc_define.js
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.
|
|
10
|
-
exports.VideoBufferInfo = exports.TRTCSwitchRoomParam = exports.AudioMusicParam = exports.TRTCStatistics = void 0;
|
|
9
|
+
exports.TRTCLocalStatistics = exports.TRTCAudioEffectParam = exports.TRTCAudioRecordingParams = exports.TRTCPublishCDNParam = exports.TRTCTranscodingConfig = exports.TRTCPluginType = exports.TRTCVoiceChangerType = exports.TRTCVoiceReverbType = exports.TRTCAudioRecordingContent = exports.TRTCMixInputType = exports.TRTCTranscodingConfigMode = exports.TRTCMixUser = exports.Rect = exports.TRTCSpeedTestResult = exports.TRTCSpeedTestParams = exports.TRTCVolumeInfo = exports.TRTCQualityInfo = exports.TRTCNetworkQosParam = exports.TRTCRenderParams = exports.TRTCVideoEncParam = exports.TRTCParams = exports.TRTCWaterMarkSrcType = exports.TRTCCameraCaptureMode = exports.TRTCDeviceType = exports.TRTCDeviceState = exports.TRTCLogLevel = exports.TRTCAudioFrame = exports.TRTCVideoFrame = exports.TRTCDeviceInfo = exports.TRTCScreenCaptureProperty = exports.TRTCScreenCaptureSourceInfo = exports.TRTCImageBuffer = exports.TRTCAudioQuality = exports.TRTCScreenCaptureSourceType = exports.TRTCAudioFrameFormat = exports.TRTCVideoQosPreference = exports.TRTCQosControlMode = exports.TRTCRoleType = exports.TRTCAppScene = exports.TRTCRecordType = exports.TRTCVideoMirrorType = exports.TRTCVideoBufferType = exports.TRTCVideoPixelFormat = exports.TRTCBeautyStyle = exports.TRTCVideoRotation = exports.TRTCVideoFillMode = exports.TRTCQuality = exports.TRTCVideoStreamType = exports.TRTCVideoResolutionMode = exports.TRTCVideoResolution = void 0;
|
|
10
|
+
exports.VideoBufferInfo = exports.TRTCSwitchRoomParam = exports.AudioMusicParam = exports.TRTCStatistics = exports.TRTCRemoteStatistics = void 0;
|
|
11
11
|
const util_1 = require("./Renderer/util");
|
|
12
12
|
/////////////////////////////////////////////////////////////////////////////////
|
|
13
13
|
//
|
|
@@ -1282,6 +1282,54 @@ var TRTCVoiceReverbType;
|
|
|
1282
1282
|
TRTCVoiceReverbType[TRTCVoiceReverbType["TRTCLiveVoiceReverbType_10"] = 10] = "TRTCLiveVoiceReverbType_10";
|
|
1283
1283
|
TRTCVoiceReverbType[TRTCVoiceReverbType["TRTCLiveVoiceReverbType_11"] = 11] = "TRTCLiveVoiceReverbType_11";
|
|
1284
1284
|
})(TRTCVoiceReverbType = exports.TRTCVoiceReverbType || (exports.TRTCVoiceReverbType = {}));
|
|
1285
|
+
/**
|
|
1286
|
+
* 变声特效
|
|
1287
|
+
*
|
|
1288
|
+
* 变声特效可以作用于人声之上,通过声学算法对人声进行二次处理,以获得与原始声音所不同的音色,目前支持如下几种变声特效
|
|
1289
|
+
*
|
|
1290
|
+
* @enum {Number}
|
|
1291
|
+
*/
|
|
1292
|
+
const TRTCVoiceChangerType_HACK_JSDOC = {
|
|
1293
|
+
/** 关闭特效 */
|
|
1294
|
+
TRTCLiveVoiceChangerType_0: 0,
|
|
1295
|
+
/** 熊孩子 */
|
|
1296
|
+
TRTCLiveVoiceChangerType_1: 1,
|
|
1297
|
+
/** 萝莉*/
|
|
1298
|
+
TRTCLiveVoiceChangerType_2: 2,
|
|
1299
|
+
/** 大叔 */
|
|
1300
|
+
TRTCLiveVoiceChangerType_3: 3,
|
|
1301
|
+
/** 重金属 */
|
|
1302
|
+
TRTCLiveVoiceChangerType_4: 4,
|
|
1303
|
+
/** 感冒 */
|
|
1304
|
+
TRTCLiveVoiceChangerType_5: 5,
|
|
1305
|
+
/** 外语腔 */
|
|
1306
|
+
TRTCLiveVoiceChangerType_6: 6,
|
|
1307
|
+
/** 困兽 */
|
|
1308
|
+
TRTCLiveVoiceChangerType_7: 7,
|
|
1309
|
+
/** 肥宅 */
|
|
1310
|
+
TRTCLiveVoiceChangerType_8: 8,
|
|
1311
|
+
/** 强电流 */
|
|
1312
|
+
TRTCLiveVoiceChangerType_9: 9,
|
|
1313
|
+
/** 重机械 */
|
|
1314
|
+
TRTCLiveVoiceChangerType_10: 10,
|
|
1315
|
+
/** 空灵 */
|
|
1316
|
+
TRTCLiveVoiceChangerType_11: 11,
|
|
1317
|
+
};
|
|
1318
|
+
var TRTCVoiceChangerType;
|
|
1319
|
+
(function (TRTCVoiceChangerType) {
|
|
1320
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_0"] = 0] = "TRTCLiveVoiceChangerType_0";
|
|
1321
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_1"] = 1] = "TRTCLiveVoiceChangerType_1";
|
|
1322
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_2"] = 2] = "TRTCLiveVoiceChangerType_2";
|
|
1323
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_3"] = 3] = "TRTCLiveVoiceChangerType_3";
|
|
1324
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_4"] = 4] = "TRTCLiveVoiceChangerType_4";
|
|
1325
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_5"] = 5] = "TRTCLiveVoiceChangerType_5";
|
|
1326
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_6"] = 6] = "TRTCLiveVoiceChangerType_6";
|
|
1327
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_7"] = 7] = "TRTCLiveVoiceChangerType_7";
|
|
1328
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_8"] = 8] = "TRTCLiveVoiceChangerType_8";
|
|
1329
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_9"] = 9] = "TRTCLiveVoiceChangerType_9";
|
|
1330
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_10"] = 10] = "TRTCLiveVoiceChangerType_10";
|
|
1331
|
+
TRTCVoiceChangerType[TRTCVoiceChangerType["TRTCLiveVoiceChangerType_11"] = 11] = "TRTCLiveVoiceChangerType_11";
|
|
1332
|
+
})(TRTCVoiceChangerType = exports.TRTCVoiceChangerType || (exports.TRTCVoiceChangerType = {}));
|
|
1285
1333
|
/**
|
|
1286
1334
|
* 插件类型
|
|
1287
1335
|
*
|
package/package.json
CHANGED
package/scripts/copy-sdk.js
CHANGED
|
@@ -31,6 +31,10 @@ if (process.platform === "win32") {
|
|
|
31
31
|
path.resolve(SDK_CPP_PATH, `src/remote-liteav/sdk/win/${dllPrefix}/lib/`),
|
|
32
32
|
path.resolve(SDK_JS_PATH, "build/Release/")
|
|
33
33
|
);
|
|
34
|
+
copySync(
|
|
35
|
+
path.resolve(SDK_CPP_PATH, `src/remote-liteav/sdk/remote_liteav/${dllPrefix}/`),
|
|
36
|
+
path.resolve(SDK_JS_PATH, "build/Release/")
|
|
37
|
+
);
|
|
34
38
|
copySync(
|
|
35
39
|
path.resolve(SDK_CPP_PATH, "build/Release/trtc_electron_sdk.pdb"),
|
|
36
40
|
path.resolve(SDK_JS_PATH, "build/Release/trtc_electron_sdk.pdb")
|