agora-electron-sdk 4.2.6 → 4.3.0-dev.1
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/CHANGELOG.md +20 -0
- package/js/Private/AgoraBase.js +139 -174
- package/js/Private/AgoraMediaBase.js +49 -20
- package/js/Private/AgoraMediaPlayerTypes.js +32 -23
- package/js/Private/IAgoraH265Transcoder.js +39 -0
- package/js/Private/IAgoraMediaStreamingSource.js +32 -32
- package/js/Private/IAgoraMusicContentCenter.js +19 -19
- package/js/Private/IAgoraRhythmPlayer.js +9 -9
- package/js/Private/IAgoraRtcEngine.js +12 -12
- package/js/Private/IAgoraSpatialAudio.js +3 -31
- package/js/Private/extension/IAgoraH265TranscoderExtension.js +2 -0
- package/js/Private/impl/AgoraMediaBaseImpl.js +26 -2
- package/js/Private/impl/IAgoraH265TranscoderImpl.js +119 -0
- package/js/Private/impl/IAgoraMediaEngineImpl.js +13 -13
- package/js/Private/impl/IAgoraMediaPlayerImpl.js +92 -74
- package/js/Private/impl/IAgoraMediaPlayerSourceImpl.js +12 -2
- package/js/Private/impl/IAgoraMediaRecorderImpl.js +2 -2
- package/js/Private/impl/IAgoraMusicContentCenterImpl.js +20 -20
- package/js/Private/impl/IAgoraRtcEngineExImpl.js +66 -84
- package/js/Private/impl/IAgoraRtcEngineImpl.js +456 -440
- package/js/Private/impl/IAgoraSpatialAudioImpl.js +157 -181
- package/js/Private/impl/IAudioDeviceManagerImpl.js +22 -22
- package/js/Private/internal/AgoraH265TranscoderInternal.js +86 -0
- package/js/Private/internal/AgoraMediaBaseInternal.js +34 -0
- package/js/Private/internal/IrisApiEngine.js +35 -20
- package/js/Private/internal/LocalSpatialAudioEngineInternal.js +0 -39
- package/js/Private/internal/MediaPlayerInternal.js +22 -21
- package/js/Private/internal/MusicContentCenterInternal.js +1 -4
- package/js/Private/internal/RtcEngineExInternal.js +101 -134
- package/js/Private/ti/AgoraMediaBase-ti.js +1 -1
- package/js/Private/ti/IAgoraH265Transcoder-ti.js +40 -0
- package/js/Private/ti/IAgoraMediaPlayerSource-ti.js +4 -2
- package/js/Private/ti/IAgoraMusicContentCenter-ti.js +5 -5
- package/js/Private/ti/IAgoraRtcEngine-ti.js +12 -11
- package/js/Renderer/AgoraView.js +28 -14
- package/js/Renderer/IRenderer.js +65 -17
- package/js/Renderer/IRendererManager.js +230 -0
- package/js/Renderer/RendererCache.js +170 -0
- package/js/Renderer/RendererManager.js +49 -460
- package/js/Renderer/WebGLRenderer/index.js +82 -234
- package/js/Renderer/YUVCanvasRenderer/index.js +27 -147
- package/js/Types.js +6 -6
- package/js/Utils.js +37 -88
- package/package.json +4 -3
- package/scripts/clean.js +12 -0
- package/scripts/synclib.js +8 -2
- package/ts/Private/AgoraBase.ts +225 -201
- package/ts/Private/AgoraMediaBase.ts +63 -25
- package/ts/Private/AgoraMediaPlayerTypes.ts +67 -24
- package/ts/Private/IAgoraH265Transcoder.ts +73 -0
- package/ts/Private/IAgoraLog.ts +1 -0
- package/ts/Private/IAgoraMediaEngine.ts +12 -7
- package/ts/Private/IAgoraMediaPlayer.ts +47 -21
- package/ts/Private/IAgoraMediaPlayerSource.ts +27 -6
- package/ts/Private/IAgoraMediaStreamingSource.ts +38 -37
- package/ts/Private/IAgoraMusicContentCenter.ts +20 -20
- package/ts/Private/IAgoraRhythmPlayer.ts +7 -6
- package/ts/Private/IAgoraRtcEngine.ts +407 -364
- package/ts/Private/IAgoraRtcEngineEx.ts +25 -61
- package/ts/Private/IAgoraSpatialAudio.ts +80 -191
- package/ts/Private/IAudioDeviceManager.ts +27 -14
- package/ts/Private/extension/IAgoraH265TranscoderExtension.ts +39 -0
- package/ts/Private/impl/AgoraMediaBaseImpl.ts +25 -1
- package/ts/Private/impl/IAgoraH265TranscoderImpl.ts +152 -0
- package/ts/Private/impl/IAgoraMediaEngineImpl.ts +13 -13
- package/ts/Private/impl/IAgoraMediaPlayerImpl.ts +110 -81
- package/ts/Private/impl/IAgoraMediaPlayerSourceImpl.ts +17 -2
- package/ts/Private/impl/IAgoraMediaRecorderImpl.ts +2 -2
- package/ts/Private/impl/IAgoraMusicContentCenterImpl.ts +21 -21
- package/ts/Private/impl/IAgoraRtcEngineExImpl.ts +71 -106
- package/ts/Private/impl/IAgoraRtcEngineImpl.ts +589 -572
- package/ts/Private/impl/IAgoraSpatialAudioImpl.ts +211 -218
- package/ts/Private/impl/IAudioDeviceManagerImpl.ts +22 -22
- package/ts/Private/internal/AgoraH265TranscoderInternal.ts +97 -0
- package/ts/Private/internal/AgoraMediaBaseInternal.ts +15 -0
- package/ts/Private/internal/IrisApiEngine.ts +42 -27
- package/ts/Private/internal/LocalSpatialAudioEngineInternal.ts +1 -86
- package/ts/Private/internal/MediaPlayerInternal.ts +20 -29
- package/ts/Private/internal/MusicContentCenterInternal.ts +1 -5
- package/ts/Private/internal/RtcEngineExInternal.ts +91 -204
- package/ts/Private/ti/AgoraMediaBase-ti.ts +1 -1
- package/ts/Private/ti/IAgoraH265Transcoder-ti.ts +16 -0
- package/ts/Private/ti/IAgoraMediaPlayerSource-ti.ts +4 -2
- package/ts/Private/ti/IAgoraMusicContentCenter-ti.ts +5 -5
- package/ts/Private/ti/IAgoraRtcEngine-ti.ts +12 -11
- package/ts/Renderer/AgoraView.ts +29 -19
- package/ts/Renderer/IRenderer.ts +71 -22
- package/ts/Renderer/IRendererManager.ts +273 -19
- package/ts/Renderer/RendererCache.ts +167 -0
- package/ts/Renderer/RendererManager.ts +62 -607
- package/ts/Renderer/WebGLRenderer/index.ts +117 -295
- package/ts/Renderer/YUVCanvasRenderer/index.ts +45 -198
- package/ts/Types.ts +17 -194
- package/ts/Utils.ts +36 -100
- package/types/Private/AgoraBase.d.ts +219 -200
- package/types/Private/AgoraBase.d.ts.map +1 -1
- package/types/Private/AgoraMediaBase.d.ts +63 -27
- package/types/Private/AgoraMediaBase.d.ts.map +1 -1
- package/types/Private/AgoraMediaPlayerTypes.d.ts +65 -24
- package/types/Private/AgoraMediaPlayerTypes.d.ts.map +1 -1
- package/types/Private/IAgoraH265Transcoder.d.ts +28 -0
- package/types/Private/IAgoraH265Transcoder.d.ts.map +1 -0
- package/types/Private/IAgoraLog.d.ts.map +1 -1
- package/types/Private/IAgoraMediaEngine.d.ts +11 -6
- package/types/Private/IAgoraMediaEngine.d.ts.map +1 -1
- package/types/Private/IAgoraMediaPlayer.d.ts +42 -20
- package/types/Private/IAgoraMediaPlayer.d.ts.map +1 -1
- package/types/Private/IAgoraMediaPlayerSource.d.ts +23 -6
- package/types/Private/IAgoraMediaPlayerSource.d.ts.map +1 -1
- package/types/Private/IAgoraMediaStreamingSource.d.ts.map +1 -1
- package/types/Private/IAgoraMusicContentCenter.d.ts +19 -19
- package/types/Private/IAgoraMusicContentCenter.d.ts.map +1 -1
- package/types/Private/IAgoraRhythmPlayer.d.ts +6 -6
- package/types/Private/IAgoraRhythmPlayer.d.ts.map +1 -1
- package/types/Private/IAgoraRtcEngine.d.ts +329 -293
- package/types/Private/IAgoraRtcEngine.d.ts.map +1 -1
- package/types/Private/IAgoraRtcEngineEx.d.ts +21 -53
- package/types/Private/IAgoraRtcEngineEx.d.ts.map +1 -1
- package/types/Private/IAgoraSpatialAudio.d.ts +56 -167
- package/types/Private/IAgoraSpatialAudio.d.ts.map +1 -1
- package/types/Private/IAudioDeviceManager.d.ts +27 -14
- package/types/Private/IAudioDeviceManager.d.ts.map +1 -1
- package/types/Private/extension/IAgoraH265TranscoderExtension.d.ts +24 -0
- package/types/Private/extension/IAgoraH265TranscoderExtension.d.ts.map +1 -0
- package/types/Private/impl/AgoraMediaBaseImpl.d.ts +5 -1
- package/types/Private/impl/AgoraMediaBaseImpl.d.ts.map +1 -1
- package/types/Private/impl/IAgoraH265TranscoderImpl.d.ts +15 -0
- package/types/Private/impl/IAgoraH265TranscoderImpl.d.ts.map +1 -0
- package/types/Private/impl/IAgoraMediaPlayerImpl.d.ts +6 -4
- package/types/Private/impl/IAgoraMediaPlayerImpl.d.ts.map +1 -1
- package/types/Private/impl/IAgoraMediaPlayerSourceImpl.d.ts.map +1 -1
- package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts +2 -4
- package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts.map +1 -1
- package/types/Private/impl/IAgoraRtcEngineImpl.d.ts +30 -25
- package/types/Private/impl/IAgoraRtcEngineImpl.d.ts.map +1 -1
- package/types/Private/impl/IAgoraSpatialAudioImpl.d.ts +20 -22
- package/types/Private/impl/IAgoraSpatialAudioImpl.d.ts.map +1 -1
- package/types/Private/internal/AgoraH265TranscoderInternal.d.ts +14 -0
- package/types/Private/internal/AgoraH265TranscoderInternal.d.ts.map +1 -0
- package/types/Private/internal/AgoraMediaBaseInternal.d.ts +8 -0
- package/types/Private/internal/AgoraMediaBaseInternal.d.ts.map +1 -0
- package/types/Private/internal/IrisApiEngine.d.ts +5 -2
- package/types/Private/internal/IrisApiEngine.d.ts.map +1 -1
- package/types/Private/internal/LocalSpatialAudioEngineInternal.d.ts +0 -15
- package/types/Private/internal/LocalSpatialAudioEngineInternal.d.ts.map +1 -1
- package/types/Private/internal/MediaPlayerInternal.d.ts.map +1 -1
- package/types/Private/internal/MusicContentCenterInternal.d.ts +0 -1
- package/types/Private/internal/MusicContentCenterInternal.d.ts.map +1 -1
- package/types/Private/internal/RtcEngineExInternal.d.ts +7 -13
- package/types/Private/internal/RtcEngineExInternal.d.ts.map +1 -1
- package/types/Private/ti/IAgoraH265Transcoder-ti.d.ts +8 -0
- package/types/Private/ti/IAgoraH265Transcoder-ti.d.ts.map +1 -0
- package/types/Private/ti/IAgoraMediaPlayerSource-ti.d.ts.map +1 -1
- package/types/Private/ti/IAgoraRtcEngine-ti.d.ts.map +1 -1
- package/types/Renderer/AgoraView.d.ts +4 -4
- package/types/Renderer/AgoraView.d.ts.map +1 -1
- package/types/Renderer/IRenderer.d.ts +11 -9
- package/types/Renderer/IRenderer.d.ts.map +1 -1
- package/types/Renderer/IRendererManager.d.ts +50 -12
- package/types/Renderer/IRendererManager.d.ts.map +1 -1
- package/types/Renderer/RendererCache.d.ts +36 -0
- package/types/Renderer/RendererCache.d.ts.map +1 -0
- package/types/Renderer/RendererManager.d.ts +13 -139
- package/types/Renderer/RendererManager.d.ts.map +1 -1
- package/types/Renderer/WebGLRenderer/index.d.ts +3 -18
- package/types/Renderer/WebGLRenderer/index.d.ts.map +1 -1
- package/types/Renderer/YUVCanvasRenderer/index.d.ts +4 -10
- package/types/Renderer/YUVCanvasRenderer/index.d.ts.map +1 -1
- package/types/Types.d.ts +11 -187
- package/types/Types.d.ts.map +1 -1
- package/types/Utils.d.ts +3 -20
- package/types/Utils.d.ts.map +1 -1
|
@@ -27,8 +27,6 @@ var __assign = (this && this.__assign) || function () {
|
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.RendererManager = void 0;
|
|
30
|
-
var AgoraBase_1 = require("../Private/AgoraBase");
|
|
31
|
-
var AgoraMediaBase_1 = require("../Private/AgoraMediaBase");
|
|
32
30
|
var Types_1 = require("../Types");
|
|
33
31
|
var Utils_1 = require("../Utils");
|
|
34
32
|
var IRendererManager_1 = require("./IRendererManager");
|
|
@@ -41,485 +39,76 @@ var RendererManager = /** @class */ (function (_super) {
|
|
|
41
39
|
__extends(RendererManager, _super);
|
|
42
40
|
function RendererManager() {
|
|
43
41
|
var _this = _super.call(this) || this;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
_this.isRendering = false;
|
|
48
|
-
/**
|
|
49
|
-
* @ignore
|
|
50
|
-
*/
|
|
51
|
-
_this.handleWebGLFallback = function (config) { return function (renderer) {
|
|
52
|
-
var contentMode = renderer.contentMode, mirror = renderer.mirror;
|
|
53
|
-
var view = renderer.parentElement;
|
|
54
|
-
var renderers = _this.getRenderers(config);
|
|
55
|
-
var index = renderers.indexOf(renderer);
|
|
56
|
-
renderer.unbind();
|
|
57
|
-
var newRenderer = _this.createRenderer(Types_1.RENDER_MODE.SOFTWARE);
|
|
58
|
-
newRenderer.bind(view);
|
|
59
|
-
newRenderer.setRenderOption({ contentMode: contentMode, mirror: mirror });
|
|
60
|
-
renderers.splice(index, 1, newRenderer);
|
|
61
|
-
}; };
|
|
62
|
-
_this.renderFps = 15;
|
|
63
|
-
_this.renderers = new Map();
|
|
64
|
-
_this.setRenderMode();
|
|
65
|
-
_this.msgBridge = Utils_1.AgoraEnv.AgoraElectronBridge;
|
|
66
|
-
_this.defaultRenderConfig = {
|
|
67
|
-
rendererOptions: {
|
|
68
|
-
contentMode: AgoraMediaBase_1.RenderModeType.RenderModeFit,
|
|
69
|
-
mirror: false,
|
|
70
|
-
},
|
|
71
|
-
};
|
|
42
|
+
_this._rendererType = (0, Utils_1.isSupportWebGL)()
|
|
43
|
+
? Types_1.RendererType.WEBGL
|
|
44
|
+
: Types_1.RendererType.SOFTWARE;
|
|
72
45
|
return _this;
|
|
73
46
|
}
|
|
47
|
+
Object.defineProperty(RendererManager.prototype, "rendererType", {
|
|
48
|
+
get: function () {
|
|
49
|
+
return this._rendererType;
|
|
50
|
+
},
|
|
51
|
+
set: function (rendererType) {
|
|
52
|
+
if (this._rendererType !== rendererType) {
|
|
53
|
+
this._rendererType = rendererType;
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
enumerable: false,
|
|
57
|
+
configurable: true
|
|
58
|
+
});
|
|
74
59
|
/**
|
|
75
|
-
*
|
|
76
|
-
* In a stereo music file, the left and right channels can store different audio data. According to your needs, you can set the channel mode to original mode, left channel mode, right channel mode, or mixed channel mode. For example, in the KTV scenario, the left channel of the music file stores the musical accompaniment, and the right channel stores the singing voice. If you only need to listen to the accompaniment, call this method to set the channel mode of the music file to left channel mode; if you need to listen to the accompaniment and the singing voice at the same time, call this method to set the channel mode to mixed channel mode.Call this method after calling open .This method only applies to stereo audio files.
|
|
77
|
-
*
|
|
78
|
-
* @param mode The channel mode. See AudioDualMonoMode .
|
|
79
|
-
*
|
|
80
|
-
* @returns
|
|
81
|
-
* 0: Success.< 0: Failure.
|
|
60
|
+
* @deprecated Use rendererType instead
|
|
82
61
|
*/
|
|
83
62
|
RendererManager.prototype.setRenderMode = function (mode) {
|
|
84
|
-
|
|
85
|
-
this.renderMode = this.checkWebglEnv()
|
|
86
|
-
? Types_1.RENDER_MODE.WEBGL
|
|
87
|
-
: Types_1.RENDER_MODE.SOFTWARE;
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
if (mode !== this.renderMode) {
|
|
91
|
-
this.renderMode = mode;
|
|
92
|
-
(0, Utils_1.logInfo)('setRenderMode: new render mode will take effect only if new view bind to render');
|
|
93
|
-
}
|
|
63
|
+
this.rendererType = mode;
|
|
94
64
|
};
|
|
95
65
|
/**
|
|
96
|
-
* @
|
|
66
|
+
* @deprecated Use renderingFps instead
|
|
97
67
|
*/
|
|
98
68
|
RendererManager.prototype.setFPS = function (fps) {
|
|
99
|
-
this.
|
|
100
|
-
this.restartRender();
|
|
101
|
-
};
|
|
102
|
-
/**
|
|
103
|
-
* @ignore
|
|
104
|
-
*/
|
|
105
|
-
RendererManager.prototype.setRenderOption = function (view, contentMode, mirror) {
|
|
106
|
-
if (contentMode === void 0) { contentMode = AgoraMediaBase_1.RenderModeType.RenderModeFit; }
|
|
107
|
-
if (mirror === void 0) { mirror = false; }
|
|
108
|
-
if (!view) {
|
|
109
|
-
(0, Utils_1.logError)('setRenderOption: view not exist', view);
|
|
110
|
-
}
|
|
111
|
-
this.forEachStream(function (_a) {
|
|
112
|
-
var renders = _a.renders;
|
|
113
|
-
renders === null || renders === void 0 ? void 0 : renders.forEach(function (render) {
|
|
114
|
-
if (render.equalsElement(view)) {
|
|
115
|
-
render.setRenderOption({ contentMode: contentMode, mirror: mirror });
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
};
|
|
120
|
-
/**
|
|
121
|
-
* @ignore
|
|
122
|
-
*/
|
|
123
|
-
RendererManager.prototype.setRenderOptionByConfig = function (rendererConfig) {
|
|
124
|
-
var _a = (0, Utils_1.getDefaultRendererVideoConfig)(rendererConfig), uid = _a.uid, channelId = _a.channelId, rendererOptions = _a.rendererOptions, videoSourceType = _a.videoSourceType;
|
|
125
|
-
var renderList = this.getRenderers({ uid: uid, channelId: channelId, videoSourceType: videoSourceType });
|
|
126
|
-
renderList
|
|
127
|
-
? renderList
|
|
128
|
-
.filter(function (renderItem) {
|
|
129
|
-
if (rendererConfig.view) {
|
|
130
|
-
return renderItem.equalsElement(rendererConfig.view);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
})
|
|
136
|
-
.forEach(function (renderItem) { return renderItem.setRenderOption(rendererOptions); })
|
|
137
|
-
: (0, Utils_1.logWarn)("RenderStreamType: ".concat(videoSourceType, " channelId:").concat(channelId, " uid:").concat(uid, " have no render view, you need to call this api after setView"));
|
|
138
|
-
return AgoraBase_1.ErrorCodeType.ErrOk;
|
|
139
|
-
};
|
|
140
|
-
/**
|
|
141
|
-
* @ignore
|
|
142
|
-
*/
|
|
143
|
-
RendererManager.prototype.checkWebglEnv = function () {
|
|
144
|
-
var _a;
|
|
145
|
-
var flag = false;
|
|
146
|
-
var canvas = document.createElement('canvas');
|
|
147
|
-
try {
|
|
148
|
-
var getContext = function (contextNames) {
|
|
149
|
-
if (contextNames === void 0) { contextNames = ['webgl2', 'webgl', 'experimental-webgl']; }
|
|
150
|
-
for (var i = 0; i < contextNames.length; i++) {
|
|
151
|
-
var contextName = contextNames[i];
|
|
152
|
-
var context = canvas === null || canvas === void 0 ? void 0 : canvas.getContext(contextName);
|
|
153
|
-
if (context) {
|
|
154
|
-
return context;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
return null;
|
|
158
|
-
};
|
|
159
|
-
var gl = getContext();
|
|
160
|
-
flag = !!gl;
|
|
161
|
-
(_a = gl === null || gl === void 0 ? void 0 : gl.getExtension('WEBGL_lose_context')) === null || _a === void 0 ? void 0 : _a.loseContext();
|
|
162
|
-
gl = null;
|
|
163
|
-
(0, Utils_1.logInfo)('Your browser support webGL');
|
|
164
|
-
}
|
|
165
|
-
catch (e) {
|
|
166
|
-
(0, Utils_1.logWarn)('Your browser may not support webGL');
|
|
167
|
-
flag = false;
|
|
168
|
-
}
|
|
169
|
-
return flag;
|
|
170
|
-
};
|
|
171
|
-
/**
|
|
172
|
-
* @ignore
|
|
173
|
-
*/
|
|
174
|
-
RendererManager.prototype.setupVideo = function (rendererVideoConfig) {
|
|
175
|
-
var formatConfig = (0, Utils_1.getDefaultRendererVideoConfig)(rendererVideoConfig);
|
|
176
|
-
var uid = formatConfig.uid, channelId = formatConfig.channelId, videoSourceType = formatConfig.videoSourceType, rendererOptions = formatConfig.rendererOptions, view = formatConfig.view;
|
|
177
|
-
if (!formatConfig.view) {
|
|
178
|
-
(0, Utils_1.logWarn)('setupVideo->destroyRenderersByConfig, because of view is null');
|
|
179
|
-
this.destroyRenderersByConfig(videoSourceType, channelId, uid);
|
|
180
|
-
return -AgoraBase_1.ErrorCodeType.ErrInvalidArgument;
|
|
181
|
-
}
|
|
182
|
-
// ensure a render to RenderMap
|
|
183
|
-
var render = this.bindHTMLElementToRender(formatConfig, view);
|
|
184
|
-
// render config
|
|
185
|
-
render === null || render === void 0 ? void 0 : render.setRenderOption(rendererOptions);
|
|
186
|
-
// enable iris videoFrame
|
|
187
|
-
this.enableVideoFrameCache({
|
|
188
|
-
uid: uid,
|
|
189
|
-
channelId: channelId,
|
|
190
|
-
videoSourceType: videoSourceType,
|
|
191
|
-
});
|
|
192
|
-
// enable render
|
|
193
|
-
this.enableRender(true);
|
|
194
|
-
return AgoraBase_1.ErrorCodeType.ErrOk;
|
|
195
|
-
};
|
|
196
|
-
/**
|
|
197
|
-
* @ignore
|
|
198
|
-
*/
|
|
199
|
-
RendererManager.prototype.setupLocalVideo = function (rendererConfig) {
|
|
200
|
-
var videoSourceType = rendererConfig.videoSourceType;
|
|
201
|
-
if (videoSourceType === AgoraMediaBase_1.VideoSourceType.VideoSourceRemote) {
|
|
202
|
-
(0, Utils_1.logError)('setupLocalVideo videoSourceType error', videoSourceType);
|
|
203
|
-
return -AgoraBase_1.ErrorCodeType.ErrInvalidArgument;
|
|
204
|
-
}
|
|
205
|
-
this.setupVideo(__assign({}, rendererConfig));
|
|
206
|
-
return AgoraBase_1.ErrorCodeType.ErrOk;
|
|
69
|
+
this.renderingFps = fps;
|
|
207
70
|
};
|
|
208
71
|
/**
|
|
209
|
-
* @
|
|
72
|
+
* @deprecated Use getRendererCache instead
|
|
210
73
|
*/
|
|
211
|
-
RendererManager.prototype.
|
|
212
|
-
|
|
213
|
-
if (videoSourceType !== AgoraMediaBase_1.VideoSourceType.VideoSourceRemote) {
|
|
214
|
-
(0, Utils_1.logError)('setupRemoteVideo videoSourceType error', videoSourceType);
|
|
215
|
-
return -AgoraBase_1.ErrorCodeType.ErrInvalidArgument;
|
|
216
|
-
}
|
|
217
|
-
this.setupVideo(__assign({}, rendererConfig));
|
|
218
|
-
return AgoraBase_1.ErrorCodeType.ErrOk;
|
|
74
|
+
RendererManager.prototype.getRender = function (context) {
|
|
75
|
+
return this.getRendererCache(context);
|
|
219
76
|
};
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
* @param view The HTMLElement object to be destroyed.
|
|
224
|
-
*/
|
|
225
|
-
RendererManager.prototype.destroyRendererByView = function (view) {
|
|
226
|
-
var _this = this;
|
|
227
|
-
var renders = this.renderers;
|
|
228
|
-
renders.forEach(function (channelMap, videoSourceType) {
|
|
229
|
-
channelMap.forEach(function (uidMap, channelId) {
|
|
230
|
-
uidMap.forEach(function (renderConfig, uid) {
|
|
231
|
-
var _a;
|
|
232
|
-
var hasRender = false;
|
|
233
|
-
var remainRenders = (_a = renderConfig.renders) === null || _a === void 0 ? void 0 : _a.filter(function (render) {
|
|
234
|
-
var isFilter = render.equalsElement(view);
|
|
235
|
-
if (isFilter) {
|
|
236
|
-
hasRender = true;
|
|
237
|
-
render.unbind();
|
|
238
|
-
}
|
|
239
|
-
return !isFilter;
|
|
240
|
-
});
|
|
241
|
-
if (!hasRender) {
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
if ((remainRenders === null || remainRenders === void 0 ? void 0 : remainRenders.length) === 0 || !remainRenders) {
|
|
245
|
-
_this.disableVideoFrameCache({ uid: uid, channelId: channelId, videoSourceType: videoSourceType });
|
|
246
|
-
}
|
|
247
|
-
renderConfig.renders = remainRenders;
|
|
248
|
-
});
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
};
|
|
252
|
-
/**
|
|
253
|
-
* @ignore
|
|
254
|
-
*/
|
|
255
|
-
RendererManager.prototype.destroyRenderersByConfig = function (videoSourceType, channelId, uid) {
|
|
256
|
-
var _a, _b;
|
|
257
|
-
var config = (0, Utils_1.formatConfigByVideoSourceType)(videoSourceType, channelId, uid);
|
|
258
|
-
videoSourceType = config.videoSourceType;
|
|
259
|
-
channelId = config.channelId;
|
|
260
|
-
uid = config.uid;
|
|
261
|
-
this.disableVideoFrameCache(config);
|
|
262
|
-
var uidMap = (_a = this.renderers.get(videoSourceType)) === null || _a === void 0 ? void 0 : _a.get(channelId);
|
|
263
|
-
var renderMap = uidMap === null || uidMap === void 0 ? void 0 : uidMap.get(uid);
|
|
264
|
-
if (!renderMap) {
|
|
265
|
-
return;
|
|
77
|
+
RendererManager.prototype.createRenderer = function (context, rendererType) {
|
|
78
|
+
if (rendererType === undefined) {
|
|
79
|
+
rendererType = this.rendererType;
|
|
266
80
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
var renderMap = this.forEachStream(function (renderConfig, videoFrameCacheConfig) {
|
|
278
|
-
var _a;
|
|
279
|
-
_this.disableVideoFrameCache(videoFrameCacheConfig);
|
|
280
|
-
(_a = renderConfig.renders) === null || _a === void 0 ? void 0 : _a.forEach(function (renderItem) {
|
|
281
|
-
renderItem.unbind();
|
|
282
|
-
});
|
|
283
|
-
renderConfig.renders = [];
|
|
284
|
-
});
|
|
285
|
-
renderMap.clear();
|
|
286
|
-
};
|
|
287
|
-
/**
|
|
288
|
-
* @ignore
|
|
289
|
-
*/
|
|
290
|
-
RendererManager.prototype.clear = function () {
|
|
291
|
-
this.stopRender();
|
|
292
|
-
this.removeAllRenderer();
|
|
293
|
-
};
|
|
294
|
-
/**
|
|
295
|
-
* Enables/Disables the local video capture.
|
|
296
|
-
* This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel.
|
|
297
|
-
*
|
|
298
|
-
* @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera.
|
|
299
|
-
*
|
|
300
|
-
* @returns
|
|
301
|
-
* 0: Success.< 0: Failure.
|
|
302
|
-
*/
|
|
303
|
-
RendererManager.prototype.enableRender = function (enabled) {
|
|
304
|
-
if (enabled === void 0) { enabled = true; }
|
|
305
|
-
if (enabled && this.isRendering) {
|
|
306
|
-
//is already _isRendering
|
|
307
|
-
}
|
|
308
|
-
else if (enabled && !this.isRendering) {
|
|
309
|
-
this.startRenderer();
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
this.stopRender();
|
|
81
|
+
var renderer;
|
|
82
|
+
switch (rendererType) {
|
|
83
|
+
case Types_1.RendererType.WEBGL:
|
|
84
|
+
renderer = new WebGLRenderer_1.WebGLRenderer(this.handleWebGLFallback(context).bind(this));
|
|
85
|
+
break;
|
|
86
|
+
case Types_1.RendererType.SOFTWARE:
|
|
87
|
+
renderer = new YUVCanvasRenderer_1.YUVCanvasRenderer();
|
|
88
|
+
break;
|
|
89
|
+
default:
|
|
90
|
+
throw new Error('Unknown renderer type');
|
|
313
91
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
RendererManager.prototype.startRenderer = function () {
|
|
319
|
-
var _this = this;
|
|
320
|
-
this.isRendering = true;
|
|
321
|
-
var renderFunc = function (rendererItem, _a) {
|
|
322
|
-
var videoSourceType = _a.videoSourceType, channelId = _a.channelId, uid = _a.uid;
|
|
323
|
-
var renders = rendererItem.renders;
|
|
324
|
-
if (!renders || (renders === null || renders === void 0 ? void 0 : renders.length) === 0) {
|
|
325
|
-
return;
|
|
326
|
-
}
|
|
327
|
-
var finalResult = _this.msgBridge.GetVideoFrame(rendererItem.shareVideoFrame);
|
|
328
|
-
switch (finalResult.ret) {
|
|
329
|
-
case 0:
|
|
330
|
-
// GET_VIDEO_FRAME_CACHE_RETURN_TYPE::OK = 0,
|
|
331
|
-
// everything is ok
|
|
332
|
-
break;
|
|
333
|
-
case 1: {
|
|
334
|
-
// GET_VIDEO_FRAME_CACHE_RETURN_TYPE::RESIZED
|
|
335
|
-
var width = finalResult.width, height = finalResult.height, yStride = finalResult.yStride;
|
|
336
|
-
var newShareVideoFrame = _this.resizeShareVideoFrame(videoSourceType, channelId, uid, width, height, yStride);
|
|
337
|
-
rendererItem.shareVideoFrame = newShareVideoFrame;
|
|
338
|
-
finalResult = _this.msgBridge.GetVideoFrame(newShareVideoFrame);
|
|
339
|
-
break;
|
|
340
|
-
}
|
|
341
|
-
case 2:
|
|
342
|
-
// GET_VIDEO_FRAME_CACHE_RETURN_TYPE::NO_CACHE
|
|
343
|
-
// setupVideo/AgoraView render before initialize
|
|
344
|
-
// this.enableVideoFrameCache({ videoSourceType, channelId, uid });
|
|
345
|
-
break;
|
|
346
|
-
default:
|
|
347
|
-
break;
|
|
348
|
-
}
|
|
349
|
-
if (finalResult.ret !== 0) {
|
|
350
|
-
(0, Utils_1.logDebug)('GetVideoFrame ret is', finalResult.ret, rendererItem);
|
|
351
|
-
return;
|
|
352
|
-
}
|
|
353
|
-
if (!finalResult.isNewFrame) {
|
|
354
|
-
(0, Utils_1.logDebug)('GetVideoFrame isNewFrame is false', rendererItem);
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
var renderVideoFrame = rendererItem.shareVideoFrame;
|
|
358
|
-
if (renderVideoFrame.width > 0 && renderVideoFrame.height > 0) {
|
|
359
|
-
renders.forEach(function (renderItem) {
|
|
360
|
-
renderItem.drawFrame(rendererItem.shareVideoFrame);
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
var render = function () {
|
|
365
|
-
_this.forEachStream(renderFunc);
|
|
366
|
-
_this.videoFrameUpdateInterval = setTimeout(render, 1000 / _this.renderFps);
|
|
92
|
+
renderer.bind(context.view);
|
|
93
|
+
renderer.context = {
|
|
94
|
+
renderMode: context.renderMode,
|
|
95
|
+
mirrorMode: context.mirrorMode,
|
|
367
96
|
};
|
|
368
|
-
render();
|
|
369
|
-
};
|
|
370
|
-
/**
|
|
371
|
-
* @ignore
|
|
372
|
-
*/
|
|
373
|
-
RendererManager.prototype.stopRender = function () {
|
|
374
|
-
this.isRendering = false;
|
|
375
|
-
if (this.videoFrameUpdateInterval) {
|
|
376
|
-
clearTimeout(this.videoFrameUpdateInterval);
|
|
377
|
-
this.videoFrameUpdateInterval = undefined;
|
|
378
|
-
}
|
|
379
|
-
};
|
|
380
|
-
/**
|
|
381
|
-
* @ignore
|
|
382
|
-
*/
|
|
383
|
-
RendererManager.prototype.restartRender = function () {
|
|
384
|
-
if (this.videoFrameUpdateInterval) {
|
|
385
|
-
this.stopRender();
|
|
386
|
-
this.startRenderer();
|
|
387
|
-
(0, Utils_1.logInfo)("restartRender: Fps: ".concat(this.renderFps, " restartInterval"));
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
/**
|
|
391
|
-
* @ignore
|
|
392
|
-
*/
|
|
393
|
-
RendererManager.prototype.createRenderer = function (renderMode, fallback) {
|
|
394
|
-
if (renderMode === Types_1.RENDER_MODE.SOFTWARE) {
|
|
395
|
-
return new YUVCanvasRenderer_1.YUVCanvasRenderer();
|
|
396
|
-
}
|
|
397
|
-
else {
|
|
398
|
-
return new WebGLRenderer_1.WebGLRenderer(fallback);
|
|
399
|
-
}
|
|
400
|
-
};
|
|
401
|
-
/**
|
|
402
|
-
* @ignore
|
|
403
|
-
*/
|
|
404
|
-
RendererManager.prototype.getRender = function (_a) {
|
|
405
|
-
var _b, _c;
|
|
406
|
-
var videoSourceType = _a.videoSourceType, channelId = _a.channelId, uid = _a.uid;
|
|
407
|
-
return (_c = (_b = this.renderers.get(videoSourceType)) === null || _b === void 0 ? void 0 : _b.get(channelId)) === null || _c === void 0 ? void 0 : _c.get(uid);
|
|
408
|
-
};
|
|
409
|
-
/**
|
|
410
|
-
* @ignore
|
|
411
|
-
*/
|
|
412
|
-
RendererManager.prototype.getRenderers = function (_a) {
|
|
413
|
-
var _b;
|
|
414
|
-
var videoSourceType = _a.videoSourceType, channelId = _a.channelId, uid = _a.uid;
|
|
415
|
-
return ((_b = this.getRender({ videoSourceType: videoSourceType, channelId: channelId, uid: uid })) === null || _b === void 0 ? void 0 : _b.renders) || [];
|
|
416
|
-
};
|
|
417
|
-
/**
|
|
418
|
-
* @ignore
|
|
419
|
-
*/
|
|
420
|
-
RendererManager.prototype.bindHTMLElementToRender = function (config, view) {
|
|
421
|
-
this.ensureRendererConfig(config);
|
|
422
|
-
var renderers = this.getRenderers(config);
|
|
423
|
-
var filterRenders = (renderers === null || renderers === void 0 ? void 0 : renderers.filter(function (render) { return render.equalsElement(view); })) || [];
|
|
424
|
-
var hasBeenAdd = filterRenders.length > 0;
|
|
425
|
-
if (hasBeenAdd) {
|
|
426
|
-
(0, Utils_1.logWarn)('bindHTMLElementToRender: this view has bind to render', filterRenders);
|
|
427
|
-
return filterRenders[0];
|
|
428
|
-
}
|
|
429
|
-
var renderer = this.createRenderer(this.renderMode, this.handleWebGLFallback(config));
|
|
430
|
-
renderer.bind(view);
|
|
431
|
-
renderers.push(renderer);
|
|
432
97
|
return renderer;
|
|
433
98
|
};
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
*/
|
|
437
|
-
RendererManager.prototype.forEachStream = function (callbackfn) {
|
|
438
|
-
var renders = this.renderers;
|
|
439
|
-
renders.forEach(function (channelMap, videoSourceType) {
|
|
440
|
-
channelMap.forEach(function (uidMap, channelId) {
|
|
441
|
-
uidMap.forEach(function (renderConfig, uid) {
|
|
442
|
-
callbackfn(renderConfig, { videoSourceType: videoSourceType, channelId: channelId, uid: uid }, { channelMap: channelMap, uidMap: uidMap });
|
|
443
|
-
});
|
|
444
|
-
});
|
|
445
|
-
});
|
|
446
|
-
return renders;
|
|
447
|
-
};
|
|
448
|
-
/**
|
|
449
|
-
* @ignore
|
|
450
|
-
*/
|
|
451
|
-
RendererManager.prototype.enableVideoFrameCache = function (videoFrameCacheConfig) {
|
|
452
|
-
(0, Utils_1.logDebug)("enableVideoFrameCache ".concat(JSON.stringify(videoFrameCacheConfig)));
|
|
453
|
-
this.msgBridge.EnableVideoFrameCache(videoFrameCacheConfig);
|
|
454
|
-
};
|
|
455
|
-
/**
|
|
456
|
-
* @ignore
|
|
457
|
-
*/
|
|
458
|
-
RendererManager.prototype.disableVideoFrameCache = function (videoFrameCacheConfig) {
|
|
459
|
-
(0, Utils_1.logDebug)("disableVideoFrameCache ".concat(JSON.stringify(videoFrameCacheConfig)));
|
|
460
|
-
this.msgBridge.DisableVideoFrameCache(videoFrameCacheConfig);
|
|
461
|
-
};
|
|
462
|
-
/**
|
|
463
|
-
* @ignore
|
|
464
|
-
*/
|
|
465
|
-
RendererManager.prototype.ensureRendererConfig = function (config) {
|
|
466
|
-
var videoSourceType = config.videoSourceType, uid = config.uid, channelId = config.channelId;
|
|
467
|
-
var emptyRenderConfig = {
|
|
468
|
-
renders: [],
|
|
469
|
-
shareVideoFrame: this.resizeShareVideoFrame(videoSourceType, channelId, uid),
|
|
470
|
-
};
|
|
471
|
-
var emptyUidMap = new Map([[uid, emptyRenderConfig]]);
|
|
472
|
-
var emptyChannelMap = new Map([[channelId, emptyUidMap]]);
|
|
473
|
-
var renderers = this.renderers;
|
|
474
|
-
var videoSourceMap = renderers.get(videoSourceType);
|
|
475
|
-
if (!videoSourceMap) {
|
|
476
|
-
renderers.set(videoSourceType, emptyChannelMap);
|
|
477
|
-
return emptyUidMap;
|
|
478
|
-
}
|
|
479
|
-
var channelMap = videoSourceMap.get(channelId);
|
|
480
|
-
if (!channelMap) {
|
|
481
|
-
videoSourceMap.set(channelId, emptyUidMap);
|
|
482
|
-
return emptyUidMap;
|
|
483
|
-
}
|
|
484
|
-
var renderConfig = channelMap === null || channelMap === void 0 ? void 0 : channelMap.get(uid);
|
|
485
|
-
if (!renderConfig) {
|
|
486
|
-
channelMap === null || channelMap === void 0 ? void 0 : channelMap.set(uid, emptyRenderConfig);
|
|
487
|
-
(0, Utils_1.logWarn)("ensureRendererMap uid map for channelId:".concat(channelId, " uid:").concat(uid));
|
|
488
|
-
return emptyUidMap;
|
|
489
|
-
}
|
|
490
|
-
return channelMap;
|
|
99
|
+
RendererManager.prototype.doRendering = function (rendererCache) {
|
|
100
|
+
rendererCache.draw();
|
|
491
101
|
};
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
videoSourceType: videoSourceType,
|
|
501
|
-
channelId: channelId,
|
|
502
|
-
uid: uid,
|
|
503
|
-
yBuffer: Buffer.alloc(yStride * height),
|
|
504
|
-
uBuffer: Buffer.alloc((yStride * height) / 4),
|
|
505
|
-
vBuffer: Buffer.alloc((yStride * height) / 4),
|
|
506
|
-
width: width,
|
|
507
|
-
height: height,
|
|
508
|
-
yStride: yStride,
|
|
102
|
+
RendererManager.prototype.handleWebGLFallback = function (context) {
|
|
103
|
+
var _this = this;
|
|
104
|
+
return function (renderer) {
|
|
105
|
+
var _a = renderer.context, renderMode = _a.renderMode, mirrorMode = _a.mirrorMode;
|
|
106
|
+
var renderers = _this.getRenderers(context);
|
|
107
|
+
renderer.unbind();
|
|
108
|
+
var newRenderer = _this.createRenderer(__assign(__assign({}, context), { renderMode: renderMode, mirrorMode: mirrorMode }), Types_1.RendererType.SOFTWARE);
|
|
109
|
+
renderers.splice(renderers.indexOf(renderer), 1, newRenderer);
|
|
509
110
|
};
|
|
510
111
|
};
|
|
511
|
-
/**
|
|
512
|
-
* @ignore
|
|
513
|
-
*/
|
|
514
|
-
RendererManager.prototype.updateVideoFrameCacheInMap = function (config, shareVideoFrame) {
|
|
515
|
-
var _a;
|
|
516
|
-
var rendererConfigMap = this.ensureRendererConfig(config);
|
|
517
|
-
rendererConfigMap
|
|
518
|
-
? Object.assign((_a = rendererConfigMap.get(config.uid)) !== null && _a !== void 0 ? _a : {}, {
|
|
519
|
-
shareVideoFrame: shareVideoFrame,
|
|
520
|
-
})
|
|
521
|
-
: (0, Utils_1.logWarn)("updateVideoFrameCacheInMap videoSourceType:".concat(config.videoSourceType, " channelId:").concat(config.channelId, " uid:").concat(config.uid, " rendererConfigMap is null"));
|
|
522
|
-
};
|
|
523
112
|
return RendererManager;
|
|
524
113
|
}(IRendererManager_1.IRendererManager));
|
|
525
114
|
exports.RendererManager = RendererManager;
|