trtc-electron-sdk 12.3.705-beta.3 → 12.5.705-alpha.0

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.
@@ -1,135 +1,8 @@
1
1
  /// <reference types="node" />
2
2
  import { EventEmitter } from 'events';
3
- import { TRTCVideoStreamType, TRTCScreenCaptureSourceInfo, Rect, TRTCVideoEncParam, TRTCVideoPixelFormat, TRTCRenderParams, TRTCCameraCaptureParams } from '../trtc_define';
4
- export declare enum TRTCLocalMediaTranscodingError {
5
- Success = 0,
6
- Error = -1,
7
- InvalidParams = -2,
8
- NotFoundSource = -3,
9
- ImageSourceLoadFailed = -4
10
- }
11
- /**
12
- * @namespace TRTCLocalMediaTranscodingEvent
13
- * @description 目前只支持 Windows
14
- */
15
- export declare enum TRTCLocalMediaTranscodingEvents {
16
- /**
17
- * @description 本地混流转码开启的事件
18
- *
19
- * 当您调用 [startTranscoding]{@link TRTCLocalMediaTranscoder#startTranscoding} 时启动本地混流转码时,是否启动成功会通过此回调同步给您。
20
- *
21
- * @event TRTCLocalMediaTranscodingEvent#onTranscodingStarted
22
- * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
23
- * @param {String} errMsg - 错误信息。
24
- */
25
- onTranscodingStarted = "onTranscodingStarted",
26
- /**
27
- * @description 本地混流转码停止的事件
28
- *
29
- * 当您通过 [stopTranscoding]{@link TRTCLocalMediaTranscoder#stopTranscoding} 停止本地混流转码时,SDK 便会抛出此事件。
30
- *
31
- * @event TRTCLocalMediaTranscodingEvent#onTranscodingStopped
32
- * @param {Number} reason - 停止原因,0:用户主动停止;1:被动停止,有可能采集源失效了
33
- * @param {String} errMsg - 停止原因描述信息。
34
- */
35
- onTranscodingStopped = "onTranscodingStopped",
36
- /**
37
- * @description 本地摄像头开启的事件
38
- * 当您调用 [startCameraSource]{@link TRTCLocalMediaTranscoder#startCameraSource} 打开摄像头时,是否启动成功会通过此回调同步给您。
39
- *
40
- * @event TRTCLocalMediaTranscodingEvent#onCameraSourceStarted
41
- * @param {String} deviceId - 摄像头设备 Id 。
42
- * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
43
- * @param {String} errMsg - 错误信息。
44
- */
45
- onCameraSourceStarted = "onCameraSourceStarted",
46
- /**
47
- * @description 本地摄像头停止的事件
48
- *
49
- * @event TRTCLocalMediaTranscodingEvent#onCameraSourceStopped
50
- * @param {String} deviceId - 摄像头设备 Id 。
51
- * @param {String} reasonMsg - 停止原因描述信息。
52
- */
53
- onCameraSourceStopped = "onCameraSourceStopped",
54
- /**
55
- * @description 图片混流开启的事件
56
- * 当您调用 [addImageSource]{@link TRTCLocalMediaTranscoder#addImageSource} 打开摄像头时,是否启动成功会通过此回调同步给您。
57
- *
58
- * @event TRTCLocalMediaTranscodingEvent#onImageSourceStarted
59
- * @param {String} imagePath - 图片路径 。
60
- * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
61
- * @param {String} errMsg - 错误信息。
62
- */
63
- onImageSourceStarted = "onImageSourceStarted",
64
- /**
65
- * @description 图片混流停止的事件
66
- * @event TRTCLocalMediaTranscodingEvent#onImageSourceStopped
67
- * @param {String} imagePath - 图片路径 。
68
- */
69
- onImageSourceStopped = "onImageSourceStopped",
70
- /**
71
- * @description 屏幕分享开启的事件
72
- * * 当您通过 [startScreenSource]{@link TRTCLocalMediaTranscoder#startScreenSource} 等相关接口启动屏幕分享时,SDK 便会抛出此事件回调。
73
- *
74
- * @event TRTCLocalMediaTranscodingEvent#onScreenSourceStarted
75
- * @param {String} sourceId - 屏幕或者窗口 Id 。
76
- * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
77
- * @param {String} errMsg - 错误信息。
78
- */
79
- onScreenSourceStarted = "onScreenSourceStarted",
80
- /**
81
- * @description 屏幕分享暂停的事件
82
- * @event TRTCLocalMediaTranscodingEvent#onScreenSourcePaused
83
- * @param {String} sourceId - 屏幕或者窗口 Id 。
84
- * @param {int} reason - 原因:
85
- * - 1:注意此字段的含义在 MAC 和 Windows
86
- * 平台有稍微差异。屏幕窗口不可见暂停(Mac)。表示设置屏幕分享参数导致的暂停(Windows)。
87
- * - 2:表示屏幕分享窗口被最小化导致的暂停(仅 Windows)。
88
- * - 3:表示屏幕分享窗口被隐藏导致的暂停(仅 Windows)。
89
- */
90
- onScreenSourcePaused = "onScreenSourcePaused",
91
- /**
92
- * @description 屏幕分享恢复的事件
93
- * @event TRTCLocalMediaTranscodingEvent#onScreenSourceResumed
94
- * @param {String} sourceId - 屏幕或者窗口 Id 。
95
- * @param {int} reason - 原因:
96
- * - 1:注意此字段的含义在 MAC 和 Windows
97
- * 平台有稍微差异。屏幕窗口恢复可见从而恢复分享(Mac)。屏幕分享参数设置完毕后自动恢复(Windows)。
98
- * - 2:表示屏幕分享窗口从最小化被恢复(仅 Windows)。
99
- * - 3:表示屏幕分享窗口从隐藏被恢复(仅 Windows)。
100
- */
101
- onScreenSourceResumed = "onScreenSourceResumed",
102
- /**
103
- * @description 屏幕分享停止的事件
104
- * 当您通过 [stopScreenSource]{@link TRTCLocalMediaTranscoder#stopScreenSource} 停止屏幕分享时,SDK 便会抛出此事件回调。
105
- *
106
- * @event TRTCLocalMediaTranscodingEvent#onScreenSourceStopped
107
- * @param {String} sourceId - 屏幕或者窗口 Id 。
108
- * @param {int} reason - 原因:0:用户主动停止;1:屏幕窗口关闭导致停止;2:表示屏幕分享的显示屏状态变更(如接口被拔出、投影模式变更等)。
109
- */
110
- onScreenSourceStopped = "onScreenSourceStopped"
111
- }
112
- export declare enum TRTCLocalMediaTranscodingSourceType {
113
- MediaSourceCamera = 0,
114
- MediaSourceScreen = 1,
115
- MediaSourceImage = 2,
116
- MediaSourceRemoteVideo = 3
117
- }
118
- export declare type TRTCLocalMediaTranscodingSource = {
119
- sourceType: TRTCLocalMediaTranscodingSourceType;
120
- cameraDeviceId?: string;
121
- screenSourceId?: string;
122
- imagePath?: string;
123
- userId?: string;
124
- rect: Rect;
125
- zOrder: number;
126
- renderParams: TRTCRenderParams;
127
- };
128
- export declare type TRTCLocalMediaTranscodingParams = {
129
- inputSourceList: TRTCLocalMediaTranscodingSource[];
130
- videoEncoderParams: TRTCVideoEncParam;
131
- canvasColor: number;
132
- };
3
+ import { TRTCVideoStreamType, TRTCScreenCaptureSourceInfo, Rect, TRTCVideoPixelFormat, TRTCCameraCaptureParams, TRTCScreenCaptureProperty } from '../trtc_define';
4
+ import { TRTCLocalMediaTranscodingParams, ITRTCLocalMediaTranscoder } from './types';
5
+ export { TRTCLocalMediaTranscodingError, TRTCLocalMediaTranscodingSourceType, TRTCLocalMediaTranscodingSource, TRTCLocalMediaTranscodingParams } from './types';
133
6
  /**
134
7
  * @description 本地媒体流混流转码(目前只支持 Windows)
135
8
  *
@@ -312,11 +185,15 @@ export declare type TRTCLocalMediaTranscodingParams = {
312
185
  * const view = document.getElementById("preview-view");
313
186
  * localMediaTranscoder.setMixedVideoRenderView(view as HTMLElement);
314
187
  */
315
- declare class TRTCLocalMediaTranscoder extends EventEmitter {
188
+ declare class TRTCLocalMediaTranscoder extends EventEmitter implements ITRTCLocalMediaTranscoder {
189
+ private logPrefix;
316
190
  private nativeLocalMediaTranscoder;
317
191
  private renderer;
318
192
  private container;
319
193
  private pixelFormat;
194
+ private pixelLength;
195
+ private streamType;
196
+ private videoRenderBuffer;
320
197
  constructor(nativeLocalMediaTranscoder: any, pixelFormat?: TRTCVideoPixelFormat);
321
198
  destroy(): void;
322
199
  private validateTranscodingConfig;
@@ -369,6 +246,14 @@ declare class TRTCLocalMediaTranscoder extends EventEmitter {
369
246
  * @fires [onCameraSourceStopped]{@link TRTCLocalMediaTranscodingEvent#onCameraSourceStopped}
370
247
  */
371
248
  stopCameraSource(deviceId: string): void;
249
+ /**
250
+ * 启用摄像头采集画面绿幕抠图
251
+ *
252
+ * @param cameraDeviceId {String} - 摄像头设备 ID。
253
+ * @param enable {Boolean} - 是否启用摄像头采集画面绿幕抠图。
254
+ * @param color {Number} - 指定画面中需要抠除的颜色值。默认值:0x00FF00 代表绿色。格式为十六进制数字,比如:“0x61B9F1” 代表 RGB 分别为(97、185、241)。
255
+ */
256
+ enableCameraGreenScreen(deviceId: string, enable: boolean): void;
372
257
  /**
373
258
  * 启动屏幕/窗口采集
374
259
  *
@@ -378,6 +263,13 @@ declare class TRTCLocalMediaTranscoder extends EventEmitter {
378
263
  * @fires [onScreenSourceStarted]{@link TRTCLocalMediaTranscodingEvent#onScreenSourceStarted}
379
264
  */
380
265
  startScreenSource(source: TRTCScreenCaptureSourceInfo, rect: Rect): void;
266
+ /**
267
+ * 更新窗口/屏幕采集属性
268
+ *
269
+ * @param {String} sourceId 屏幕/窗口的 Id
270
+ * @param {TRTCScreenCaptureProperty} property 屏幕/窗口采集参数
271
+ */
272
+ updateScreenCaptureProperty(sourceId: string, property: TRTCScreenCaptureProperty): void;
381
273
  /**
382
274
  * 停止屏幕/窗口采集
383
275
  * @param sourceId {String} - 屏幕/窗口的 Id
@@ -3,11 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.TRTCLocalMediaTranscodingSourceType = exports.TRTCLocalMediaTranscodingEvents = exports.TRTCLocalMediaTranscodingError = void 0;
6
+ exports.TRTCLocalMediaTranscodingSourceType = exports.TRTCLocalMediaTranscodingError = void 0;
7
7
  const events_1 = require("events");
8
8
  const trtc_define_1 = require("../trtc_define");
9
9
  const Renderer_1 = require("../Renderer");
10
+ const util_1 = require("../Renderer/util");
11
+ const types_1 = require("./types");
10
12
  const logger_1 = __importDefault(require("../logger"));
13
+ var types_2 = require("./types");
14
+ Object.defineProperty(exports, "TRTCLocalMediaTranscodingError", { enumerable: true, get: function () { return types_2.TRTCLocalMediaTranscodingError; } });
15
+ Object.defineProperty(exports, "TRTCLocalMediaTranscodingSourceType", { enumerable: true, get: function () { return types_2.TRTCLocalMediaTranscodingSourceType; } });
11
16
  /**
12
17
  * @description 本地媒体流混流转码错误码
13
18
  * @enum {Number}
@@ -24,116 +29,6 @@ const TRTCLocalMediaTranscodingError_HACK_JSDOC = {
24
29
  /** 图片源加载失败。*/
25
30
  ImageSourceLoadFailed: -4,
26
31
  };
27
- var TRTCLocalMediaTranscodingError;
28
- (function (TRTCLocalMediaTranscodingError) {
29
- TRTCLocalMediaTranscodingError[TRTCLocalMediaTranscodingError["Success"] = 0] = "Success";
30
- TRTCLocalMediaTranscodingError[TRTCLocalMediaTranscodingError["Error"] = -1] = "Error";
31
- TRTCLocalMediaTranscodingError[TRTCLocalMediaTranscodingError["InvalidParams"] = -2] = "InvalidParams";
32
- TRTCLocalMediaTranscodingError[TRTCLocalMediaTranscodingError["NotFoundSource"] = -3] = "NotFoundSource";
33
- TRTCLocalMediaTranscodingError[TRTCLocalMediaTranscodingError["ImageSourceLoadFailed"] = -4] = "ImageSourceLoadFailed";
34
- })(TRTCLocalMediaTranscodingError = exports.TRTCLocalMediaTranscodingError || (exports.TRTCLocalMediaTranscodingError = {}));
35
- /**
36
- * @namespace TRTCLocalMediaTranscodingEvent
37
- * @description 目前只支持 Windows
38
- */
39
- var TRTCLocalMediaTranscodingEvents;
40
- (function (TRTCLocalMediaTranscodingEvents) {
41
- /**
42
- * @description 本地混流转码开启的事件
43
- *
44
- * 当您调用 [startTranscoding]{@link TRTCLocalMediaTranscoder#startTranscoding} 时启动本地混流转码时,是否启动成功会通过此回调同步给您。
45
- *
46
- * @event TRTCLocalMediaTranscodingEvent#onTranscodingStarted
47
- * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
48
- * @param {String} errMsg - 错误信息。
49
- */
50
- TRTCLocalMediaTranscodingEvents["onTranscodingStarted"] = "onTranscodingStarted";
51
- /**
52
- * @description 本地混流转码停止的事件
53
- *
54
- * 当您通过 [stopTranscoding]{@link TRTCLocalMediaTranscoder#stopTranscoding} 停止本地混流转码时,SDK 便会抛出此事件。
55
- *
56
- * @event TRTCLocalMediaTranscodingEvent#onTranscodingStopped
57
- * @param {Number} reason - 停止原因,0:用户主动停止;1:被动停止,有可能采集源失效了
58
- * @param {String} errMsg - 停止原因描述信息。
59
- */
60
- TRTCLocalMediaTranscodingEvents["onTranscodingStopped"] = "onTranscodingStopped";
61
- /**
62
- * @description 本地摄像头开启的事件
63
- * 当您调用 [startCameraSource]{@link TRTCLocalMediaTranscoder#startCameraSource} 打开摄像头时,是否启动成功会通过此回调同步给您。
64
- *
65
- * @event TRTCLocalMediaTranscodingEvent#onCameraSourceStarted
66
- * @param {String} deviceId - 摄像头设备 Id 。
67
- * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
68
- * @param {String} errMsg - 错误信息。
69
- */
70
- TRTCLocalMediaTranscodingEvents["onCameraSourceStarted"] = "onCameraSourceStarted";
71
- /**
72
- * @description 本地摄像头停止的事件
73
- *
74
- * @event TRTCLocalMediaTranscodingEvent#onCameraSourceStopped
75
- * @param {String} deviceId - 摄像头设备 Id 。
76
- * @param {String} reasonMsg - 停止原因描述信息。
77
- */
78
- TRTCLocalMediaTranscodingEvents["onCameraSourceStopped"] = "onCameraSourceStopped";
79
- /**
80
- * @description 图片混流开启的事件
81
- * 当您调用 [addImageSource]{@link TRTCLocalMediaTranscoder#addImageSource} 打开摄像头时,是否启动成功会通过此回调同步给您。
82
- *
83
- * @event TRTCLocalMediaTranscodingEvent#onImageSourceStarted
84
- * @param {String} imagePath - 图片路径 。
85
- * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
86
- * @param {String} errMsg - 错误信息。
87
- */
88
- TRTCLocalMediaTranscodingEvents["onImageSourceStarted"] = "onImageSourceStarted";
89
- /**
90
- * @description 图片混流停止的事件
91
- * @event TRTCLocalMediaTranscodingEvent#onImageSourceStopped
92
- * @param {String} imagePath - 图片路径 。
93
- */
94
- TRTCLocalMediaTranscodingEvents["onImageSourceStopped"] = "onImageSourceStopped";
95
- /**
96
- * @description 屏幕分享开启的事件
97
- * * 当您通过 [startScreenSource]{@link TRTCLocalMediaTranscoder#startScreenSource} 等相关接口启动屏幕分享时,SDK 便会抛出此事件回调。
98
- *
99
- * @event TRTCLocalMediaTranscodingEvent#onScreenSourceStarted
100
- * @param {String} sourceId - 屏幕或者窗口 Id 。
101
- * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
102
- * @param {String} errMsg - 错误信息。
103
- */
104
- TRTCLocalMediaTranscodingEvents["onScreenSourceStarted"] = "onScreenSourceStarted";
105
- /**
106
- * @description 屏幕分享暂停的事件
107
- * @event TRTCLocalMediaTranscodingEvent#onScreenSourcePaused
108
- * @param {String} sourceId - 屏幕或者窗口 Id 。
109
- * @param {int} reason - 原因:
110
- * - 1:注意此字段的含义在 MAC 和 Windows
111
- * 平台有稍微差异。屏幕窗口不可见暂停(Mac)。表示设置屏幕分享参数导致的暂停(Windows)。
112
- * - 2:表示屏幕分享窗口被最小化导致的暂停(仅 Windows)。
113
- * - 3:表示屏幕分享窗口被隐藏导致的暂停(仅 Windows)。
114
- */
115
- TRTCLocalMediaTranscodingEvents["onScreenSourcePaused"] = "onScreenSourcePaused";
116
- /**
117
- * @description 屏幕分享恢复的事件
118
- * @event TRTCLocalMediaTranscodingEvent#onScreenSourceResumed
119
- * @param {String} sourceId - 屏幕或者窗口 Id 。
120
- * @param {int} reason - 原因:
121
- * - 1:注意此字段的含义在 MAC 和 Windows
122
- * 平台有稍微差异。屏幕窗口恢复可见从而恢复分享(Mac)。屏幕分享参数设置完毕后自动恢复(Windows)。
123
- * - 2:表示屏幕分享窗口从最小化被恢复(仅 Windows)。
124
- * - 3:表示屏幕分享窗口从隐藏被恢复(仅 Windows)。
125
- */
126
- TRTCLocalMediaTranscodingEvents["onScreenSourceResumed"] = "onScreenSourceResumed";
127
- /**
128
- * @description 屏幕分享停止的事件
129
- * 当您通过 [stopScreenSource]{@link TRTCLocalMediaTranscoder#stopScreenSource} 停止屏幕分享时,SDK 便会抛出此事件回调。
130
- *
131
- * @event TRTCLocalMediaTranscodingEvent#onScreenSourceStopped
132
- * @param {String} sourceId - 屏幕或者窗口 Id 。
133
- * @param {int} reason - 原因:0:用户主动停止;1:屏幕窗口关闭导致停止;2:表示屏幕分享的显示屏状态变更(如接口被拔出、投影模式变更等)。
134
- */
135
- TRTCLocalMediaTranscodingEvents["onScreenSourceStopped"] = "onScreenSourceStopped";
136
- })(TRTCLocalMediaTranscodingEvents = exports.TRTCLocalMediaTranscodingEvents || (exports.TRTCLocalMediaTranscodingEvents = {}));
137
32
  /**
138
33
  * 媒体源类型
139
34
  * @enum {Number}
@@ -148,13 +43,6 @@ const TRTCLocalMediaTranscodingSourceType_HACK_JSDOC = {
148
43
  /** 预留字段,当前版本不支持远端用户视频源混流转码 */
149
44
  MediaSourceRemoteVideo: 3
150
45
  };
151
- var TRTCLocalMediaTranscodingSourceType;
152
- (function (TRTCLocalMediaTranscodingSourceType) {
153
- TRTCLocalMediaTranscodingSourceType[TRTCLocalMediaTranscodingSourceType["MediaSourceCamera"] = 0] = "MediaSourceCamera";
154
- TRTCLocalMediaTranscodingSourceType[TRTCLocalMediaTranscodingSourceType["MediaSourceScreen"] = 1] = "MediaSourceScreen";
155
- TRTCLocalMediaTranscodingSourceType[TRTCLocalMediaTranscodingSourceType["MediaSourceImage"] = 2] = "MediaSourceImage";
156
- TRTCLocalMediaTranscodingSourceType[TRTCLocalMediaTranscodingSourceType["MediaSourceRemoteVideo"] = 3] = "MediaSourceRemoteVideo";
157
- })(TRTCLocalMediaTranscodingSourceType = exports.TRTCLocalMediaTranscodingSourceType || (exports.TRTCLocalMediaTranscodingSourceType = {}));
158
46
  /**
159
47
  * 媒体源
160
48
  * @namespace TRTCLocalMediaTranscoding
@@ -380,10 +268,21 @@ const TRTCLocalMediaTranscodingParams_HACK_JSDOC = null;
380
268
  class TRTCLocalMediaTranscoder extends events_1.EventEmitter {
381
269
  constructor(nativeLocalMediaTranscoder, pixelFormat) {
382
270
  super();
271
+ this.logPrefix = '[TRTCLocalMediaTranscoder]';
383
272
  this.nativeLocalMediaTranscoder = nativeLocalMediaTranscoder;
384
273
  this.renderer = null;
385
274
  this.container = null;
386
275
  this.pixelFormat = pixelFormat || trtc_define_1.TRTCVideoPixelFormat.TRTCVideoPixelFormat_I420;
276
+ this.pixelLength = this.pixelFormat === trtc_define_1.TRTCVideoPixelFormat.TRTCVideoPixelFormat_I420 ? 1.5 : 4;
277
+ this.streamType = trtc_define_1.TRTCVideoStreamType.TRTCVideoStreamTypeBig;
278
+ this.videoRenderBuffer = new trtc_define_1.VideoBufferInfo({
279
+ userId: '',
280
+ id: (0, util_1.generateUniqueId)(),
281
+ streamType: this.streamType,
282
+ width: 1920,
283
+ height: 1080,
284
+ pixelFormat: this.pixelFormat,
285
+ });
387
286
  this.setEventCallback();
388
287
  this.nativeLocalMediaTranscoder.setVideoFrameProcessCallback(this.pixelFormat);
389
288
  }
@@ -392,16 +291,18 @@ class TRTCLocalMediaTranscoder extends events_1.EventEmitter {
392
291
  try {
393
292
  if (this.nativeLocalMediaTranscoder) {
394
293
  // 避免重复销毁报错
395
- this.nativeLocalMediaTranscoder.setVideoFrameRenderCallback(null, this.pixelFormat);
294
+ this.nativeLocalMediaTranscoder.setVideoFrameRenderCallback(this.pixelFormat, null);
396
295
  this.nativeLocalMediaTranscoder.setVideoFrameProcessCallback(trtc_define_1.TRTCVideoPixelFormat.TRTCVideoPixelFormat_Unknown);
397
296
  this.nativeLocalMediaTranscoder = null;
398
297
  }
298
+ this.videoRenderBuffer.buffer = null;
299
+ this.videoRenderBuffer.id = 0;
399
300
  (_a = this.renderer) === null || _a === void 0 ? void 0 : _a.destroy();
400
301
  this.renderer = null;
401
302
  this.container = null;
402
303
  }
403
304
  catch (error) {
404
- logger_1.default.warn('TRTCLocalMediaTranscoder.destroy error', error);
305
+ logger_1.default.warn(`${this.logPrefix}destroy error`, error);
405
306
  }
406
307
  }
407
308
  // 帧率、码率在 JS 层为数值,可能被设置为负数,底层要求为无符号整数,此处做检验并将负值设置为零
@@ -432,6 +333,10 @@ class TRTCLocalMediaTranscoder extends events_1.EventEmitter {
432
333
  */
433
334
  startTranscoding(streamType, params) {
434
335
  this.validateTranscodingConfig(params);
336
+ if (streamType !== this.streamType) {
337
+ this.streamType = streamType;
338
+ this.videoRenderBuffer.streamType = this.streamType;
339
+ }
435
340
  this.nativeLocalMediaTranscoder.startTranscoding(streamType, params);
436
341
  }
437
342
  /**
@@ -468,7 +373,7 @@ class TRTCLocalMediaTranscoder extends events_1.EventEmitter {
468
373
  * @param cameraCaptureParams {TRTCCameraCaptureParams} - 指定摄像头采集分辨率和帧率
469
374
  */
470
375
  setCameraCaptureParams(deviceId, cameraCaptureParams) {
471
- this.nativeLocalMediaTranscoder.setCameraCaptureParams(deviceId, cameraCaptureParams);
376
+ this.nativeLocalMediaTranscoder.setCameraCaptureParam(deviceId, cameraCaptureParams);
472
377
  }
473
378
  /**
474
379
  * 停止摄像头采集
@@ -479,6 +384,16 @@ class TRTCLocalMediaTranscoder extends events_1.EventEmitter {
479
384
  stopCameraSource(deviceId) {
480
385
  this.nativeLocalMediaTranscoder.stopCameraSource(deviceId);
481
386
  }
387
+ /**
388
+ * 启用摄像头采集画面绿幕抠图
389
+ *
390
+ * @param cameraDeviceId {String} - 摄像头设备 ID。
391
+ * @param enable {Boolean} - 是否启用摄像头采集画面绿幕抠图。
392
+ * @param color {Number} - 指定画面中需要抠除的颜色值。默认值:0x00FF00 代表绿色。格式为十六进制数字,比如:“0x61B9F1” 代表 RGB 分别为(97、185、241)。
393
+ */
394
+ enableCameraGreenScreen(deviceId, enable) {
395
+ this.nativeLocalMediaTranscoder.enableCameraGreenScreen(deviceId, enable);
396
+ }
482
397
  /**
483
398
  * 启动屏幕/窗口采集
484
399
  *
@@ -490,6 +405,15 @@ class TRTCLocalMediaTranscoder extends events_1.EventEmitter {
490
405
  startScreenSource(source, rect) {
491
406
  this.nativeLocalMediaTranscoder.startScreenSource(source, rect);
492
407
  }
408
+ /**
409
+ * 更新窗口/屏幕采集属性
410
+ *
411
+ * @param {String} sourceId 屏幕/窗口的 Id
412
+ * @param {TRTCScreenCaptureProperty} property 屏幕/窗口采集参数
413
+ */
414
+ updateScreenCaptureProperty(sourceId, property) {
415
+ this.nativeLocalMediaTranscoder.updateScreenCaptureProperty(sourceId, property);
416
+ }
493
417
  /**
494
418
  * 停止屏幕/窗口采集
495
419
  * @param sourceId {String} - 屏幕/窗口的 Id
@@ -564,19 +488,72 @@ class TRTCLocalMediaTranscoder extends events_1.EventEmitter {
564
488
  }
565
489
  }
566
490
  setMixedVideoFrameRenderCallback() {
567
- const renderCallback = (frame) => {
568
- // console.log('trtc:local-media-transcoder:mixed frame:', frame);
569
- this.renderMixedVideoFrame(frame);
491
+ const renderCallback = (args) => {
492
+ const [id, type, width, height, timestamp, rotation, valid, bufferId] = args;
493
+ if (valid === true) {
494
+ this.renderMixedVideoFrame({
495
+ data: this.videoRenderBuffer.buffer,
496
+ width: width,
497
+ height: height,
498
+ timestamp: timestamp,
499
+ rotation: rotation,
500
+ });
501
+ }
502
+ else {
503
+ logger_1.default.info(`${this.logPrefix} video size changed:`, width, height);
504
+ this.videoRenderBuffer.width = width;
505
+ this.videoRenderBuffer.height = height;
506
+ this.videoRenderBuffer.buffer = (0, util_1.allocBuffer)(width * height * this.pixelLength);
507
+ this.nativeLocalMediaTranscoder.setVideoFrameRenderBuffer(this.videoRenderBuffer.userId, this.videoRenderBuffer.buffer, this.videoRenderBuffer.streamType, this.videoRenderBuffer.width, this.videoRenderBuffer.height, this.videoRenderBuffer.pixelFormat, this.videoRenderBuffer.id);
508
+ }
570
509
  };
571
- this.nativeLocalMediaTranscoder.setVideoFrameRenderCallback(renderCallback, this.pixelFormat);
510
+ this.nativeLocalMediaTranscoder.setVideoFrameRenderBuffer(this.videoRenderBuffer.userId, this.videoRenderBuffer.buffer, this.videoRenderBuffer.streamType, this.videoRenderBuffer.width, this.videoRenderBuffer.height, this.videoRenderBuffer.pixelFormat, this.videoRenderBuffer.id);
511
+ this.nativeLocalMediaTranscoder.setVideoFrameRenderCallback(this.pixelFormat, renderCallback);
572
512
  }
573
513
  unsetMixedVideoFrameRenderCallback() {
574
- this.nativeLocalMediaTranscoder.setVideoFrameRenderCallback(null, this.pixelFormat);
514
+ this.nativeLocalMediaTranscoder.setVideoFrameRenderCallback(this.pixelFormat, null);
515
+ this.videoRenderBuffer.width = 0;
516
+ this.videoRenderBuffer.height = 0;
517
+ this.nativeLocalMediaTranscoder.setVideoFrameRenderBuffer(this.videoRenderBuffer.userId, this.videoRenderBuffer.buffer, this.videoRenderBuffer.streamType, this.videoRenderBuffer.width, this.videoRenderBuffer.height, this.videoRenderBuffer.pixelFormat, this.videoRenderBuffer.id);
575
518
  }
576
519
  setEventCallback() {
577
- const eventCallback = (eventName, ...params) => {
578
- // console.log('trtc:local-media-transcoder:event:', eventName, ...params);
579
- this.emit(eventName, ...params);
520
+ const eventCallback = (args) => {
521
+ const key = args[0];
522
+ const data = args[1];
523
+ logger_1.default.debug(`${this.logPrefix}event:`, key, data);
524
+ switch (key) {
525
+ case types_1.TRTCLocalMediaTranscodingEvents.onTranscodingStarted:
526
+ this.emit(key, data.errCode, data.errMsg);
527
+ break;
528
+ case types_1.TRTCLocalMediaTranscodingEvents.onTranscodingStopped:
529
+ this.emit(key, data.reason, data.reasonMsg);
530
+ break;
531
+ case types_1.TRTCLocalMediaTranscodingEvents.onCameraSourceStarted:
532
+ this.emit(key, data.deviceId, data.errCode, data.errMsg);
533
+ break;
534
+ case types_1.TRTCLocalMediaTranscodingEvents.onCameraSourceStopped:
535
+ this.emit(key, data.deviceId, data.errCode, data.reasonMsg);
536
+ break;
537
+ case types_1.TRTCLocalMediaTranscodingEvents.onImageSourceStarted:
538
+ this.emit(key, data.imagePath, data.errCode, data.errMsg);
539
+ break;
540
+ case types_1.TRTCLocalMediaTranscodingEvents.onImageSourceStopped:
541
+ this.emit(key, data.imagePath);
542
+ break;
543
+ case types_1.TRTCLocalMediaTranscodingEvents.onScreenSourceStarted:
544
+ this.emit(key, data.sourceId, data.errCode, data.errMsg);
545
+ break;
546
+ case types_1.TRTCLocalMediaTranscodingEvents.onScreenSourcePaused:
547
+ case types_1.TRTCLocalMediaTranscodingEvents.onScreenSourceResumed:
548
+ case types_1.TRTCLocalMediaTranscodingEvents.onScreenSourceStopped:
549
+ this.emit(key, data.sourceId, data.reason);
550
+ break;
551
+ case types_1.TRTCLocalMediaTranscodingEvents.onMediaSourceSizeChanged:
552
+ this.emit(key, data.mediaSource, data.newSize);
553
+ break;
554
+ default:
555
+ logger_1.default.warn(`${this.logPrefix}unkown event type:${key}`);
556
+ }
580
557
  };
581
558
  this.nativeLocalMediaTranscoder.setTranscodingCallback(eventCallback);
582
559
  }
@@ -586,13 +563,14 @@ class TRTCLocalMediaTranscoder extends events_1.EventEmitter {
586
563
  }
587
564
  const { width, height, data, timestamp, rotation } = frame;
588
565
  if (data) {
589
- const newData = data.slice(0); // Electron 12及以下版本需要复制一次,否则会引起奔溃。
566
+ const realRotation = rotation * 90;
567
+ // const newData = data.slice(0); // Electron 12及以下版本需要复制一次,否则会引起奔溃。
590
568
  this.renderer.drawFrame({
591
- data: newData,
569
+ data,
592
570
  width,
593
571
  height,
594
572
  timestamp,
595
- rotation,
573
+ rotation: realRotation,
596
574
  isNeedRotate: false,
597
575
  });
598
576
  }