ezuikit-js 7.6.7 → 7.7.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.
Files changed (76) hide show
  1. package/README.md +3 -3
  2. package/demos/base-demo/base.html +2 -1
  3. package/demos/base-demo/ezuikit.js +1 -33480
  4. package/demos/base-demo/ezuikit_static/v65/v1/css/theme.css +0 -6
  5. package/demos/base-demo/ezuikit_static/v65/v1/js/AudioRenderer.js +7 -7
  6. package/demos/base-demo/ezuikit_static/v65/v1/js/SuperRender_10.js +11 -9
  7. package/demos/base-demo/ezuikit_static/v65/v1/js/jsPluginV1-1.0.0.min.js +18 -4
  8. package/demos/base-demo/ezuikit_static/v65/v1/js/playctrl/AudioRenderer.js +201 -225
  9. package/demos/base-demo/ezuikit_static/v65/v1/js/playctrl/DecodeWorkerString.js +2 -9
  10. package/demos/base-demo/ezuikit_static/v65/v1/js/playctrl/JSPlaySDKInterface.js +1929 -2143
  11. package/demos/base-demo/ezuikit_static/v65/v1/js/playctrl/SuperRender_10.js +386 -475
  12. package/demos/base-demo/ezuikit_static/v65/v1/speed/speed.css +6 -7
  13. package/demos/base-demo/ezuikit_static/v65/v3/js/PlayCtrlWasm/hasWorker/Decoder.js +21 -0
  14. package/{ezuikit_static/v65/v2/js → demos/base-demo/ezuikit_static/v65/v3/js/PlayCtrlWasm/hasWorker}/Decoder.wasm +0 -0
  15. package/demos/base-demo/ezuikit_static/v65/v3/js/PlayCtrlWasm/hasWorker/Decoder.worker.js +1 -0
  16. package/demos/base-demo/ezuikit_static/v65/v3/js/PlayCtrlWasm/noWorker/Decoder.js +21 -0
  17. package/demos/base-demo/ezuikit_static/v65/v3/js/PlayCtrlWasm/noWorker/Decoder.wasm +0 -0
  18. package/demos/base-demo/ezuikit_static/v65/v3/js/PlayCtrlWasm/noWorker/Decoder.worker.js +1 -0
  19. package/demos/base-demo/ezuikit_static/v65/v3/js/jsPluginV3-1.0.0.min.js +16136 -0
  20. package/demos/base-demo/ezuikit_static/v65/v3/js/wasmplayer.min.js +1 -0
  21. package/{ezuikit_static/v65/v2 → demos/base-demo/ezuikit_static/v65/v3}/speed/speed.css +2 -1
  22. package/demos/base-demo/hls.html +1 -1
  23. package/demos/base-demo/index.html +1 -1
  24. package/demos/base-demo/localDecoder.html +2 -2
  25. package/demos/base-demo/mobileLive.html +1 -1
  26. package/demos/base-demo/mobileRec.html +1 -1
  27. package/demos/base-demo/multi.html +2 -2
  28. package/demos/base-demo/pcLive.html +1 -1
  29. package/demos/base-demo/pcRec.html +1 -1
  30. package/demos/base-demo/template.html +1 -1
  31. package/demos/base-demo/themeData.html +1 -1
  32. package/demos/nginx-demo/html/ezuikit5/index.html +1 -1
  33. package/demos/react-demo/package.json +1 -1
  34. package/demos/react-demo/src/App.js +1 -1
  35. package/demos/vue-demo/package.json +1 -1
  36. package/demos/vue-demo/src/components/EZUIKitJs.vue +1 -1
  37. package/ezuikit.js +1 -49922
  38. package/ezuikit_static/v65/v1/css/theme.css +0 -6
  39. package/ezuikit_static/v65/v1/js/AudioRenderer.js +7 -7
  40. package/ezuikit_static/v65/v1/js/SuperRender_10.js +11 -9
  41. package/ezuikit_static/v65/v1/js/jsPluginV1-1.0.0.min.js +18 -4
  42. package/ezuikit_static/v65/v1/js/playctrl/AudioRenderer.js +201 -225
  43. package/ezuikit_static/v65/v1/js/playctrl/DecodeWorkerString.js +2 -9
  44. package/ezuikit_static/v65/v1/js/playctrl/JSPlaySDKInterface.js +1929 -2143
  45. package/ezuikit_static/v65/v1/js/playctrl/SuperRender_10.js +386 -475
  46. package/ezuikit_static/v65/v1/speed/speed.css +6 -7
  47. package/ezuikit_static/v65/v3/js/PlayCtrlWasm/hasWorker/Decoder.js +21 -0
  48. package/{demos/base-demo/ezuikit_static/v65/v2/js → ezuikit_static/v65/v3/js/PlayCtrlWasm/hasWorker}/Decoder.wasm +0 -0
  49. package/ezuikit_static/v65/v3/js/PlayCtrlWasm/hasWorker/Decoder.worker.js +1 -0
  50. package/ezuikit_static/v65/v3/js/PlayCtrlWasm/noWorker/Decoder.js +21 -0
  51. package/ezuikit_static/v65/v3/js/PlayCtrlWasm/noWorker/Decoder.wasm +0 -0
  52. package/ezuikit_static/v65/v3/js/PlayCtrlWasm/noWorker/Decoder.worker.js +1 -0
  53. package/ezuikit_static/v65/v3/js/jsPluginV3-1.0.0.min.js +16136 -0
  54. package/ezuikit_static/v65/v3/js/wasmplayer.min.js +1 -0
  55. package/{demos/base-demo/ezuikit_static/v65/v2 → ezuikit_static/v65/v3}/rec/jquery.min.js +1 -1
  56. package/{demos/base-demo/ezuikit_static/v65/v2 → ezuikit_static/v65/v3}/speed/speed.css +2 -1
  57. package/{demos/base-demo/ezuikit_static/v65/v2 → ezuikit_static/v65/v3}/talk/tts-v4.js +343 -343
  58. package/package.json +1 -1
  59. package/demos/base-demo/ezuikit_static/v65/v2/js/Decoder.js +0 -9198
  60. package/demos/base-demo/ezuikit_static/v65/v2/js/jsPluginV2-2.0.1.min.js +0 -15798
  61. package/ezuikit_static/v65/v2/js/Decoder.js +0 -9198
  62. package/ezuikit_static/v65/v2/js/jsPluginV2-2.0.1.min.js +0 -15798
  63. /package/demos/base-demo/ezuikit_static/v65/{v2 → v3}/css/theme.css +0 -0
  64. /package/demos/base-demo/ezuikit_static/v65/{v2 → v3}/rec/datepicker.js +0 -0
  65. /package/demos/base-demo/ezuikit_static/v65/{v2 → v3}/rec/datepicker.min.css +0 -0
  66. /package/demos/base-demo/ezuikit_static/v65/{v2 → v3}/rec/datepicker.zh-CN.js +0 -0
  67. /package/{ezuikit_static/v65/v2 → demos/base-demo/ezuikit_static/v65/v3}/rec/jquery.min.js +0 -0
  68. /package/demos/base-demo/ezuikit_static/v65/{v2 → v3}/talk/adapeter.js +0 -0
  69. /package/demos/base-demo/ezuikit_static/v65/{v2 → v3}/talk/janus.js +0 -0
  70. /package/{ezuikit_static/v65/v2 → demos/base-demo/ezuikit_static/v65/v3}/talk/tts-v4.js +0 -0
  71. /package/ezuikit_static/v65/{v2 → v3}/css/theme.css +0 -0
  72. /package/ezuikit_static/v65/{v2 → v3}/rec/datepicker.js +0 -0
  73. /package/ezuikit_static/v65/{v2 → v3}/rec/datepicker.min.css +0 -0
  74. /package/ezuikit_static/v65/{v2 → v3}/rec/datepicker.zh-CN.js +0 -0
  75. /package/ezuikit_static/v65/{v2 → v3}/talk/adapeter.js +0 -0
  76. /package/ezuikit_static/v65/{v2 → v3}/talk/janus.js +0 -0
@@ -4,246 +4,222 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- var _createClass = (function () {
8
- function defineProperties(target, props) {
9
- for (var i = 0; i < props.length; i++) {
10
- var descriptor = props[i];
11
- descriptor.enumerable = descriptor.enumerable || false;
12
- descriptor.configurable = true;
13
- if ("value" in descriptor) descriptor.writable = true;
14
- Object.defineProperty(target, descriptor.key, descriptor);
15
- }
16
- }
17
- return function (Constructor, protoProps, staticProps) {
18
- if (protoProps) defineProperties(Constructor.prototype, protoProps);
19
- if (staticProps) defineProperties(Constructor, staticProps);
20
- return Constructor;
21
- };
22
- })();
23
-
24
- function _classCallCheck(instance, Constructor) {
25
- if (!(instance instanceof Constructor)) {
26
- throw new TypeError("Cannot call a class as a function");
27
- }
28
- }
29
-
30
- var __instance = (function () {
31
- var instance = void 0;
32
- return function (newInstance) {
33
- if (newInstance) instance = newInstance;
34
- return instance;
35
- };
36
- })();
37
-
38
- var AudioRenderer = (function () {
39
- function AudioRenderer() {
40
- _classCallCheck(this, AudioRenderer);
41
-
42
- if (__instance()) return __instance();
43
-
44
- // 确保只有单例
45
- if (AudioRenderer.unique !== undefined) {
46
- return AudioRenderer.unique;
47
- }
7
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
48
8
 
49
- AudioRenderer.unique = this;
9
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
50
10
 
51
- this.oAudioContext = null;
52
- this.currentVolume = 80; // 初始音量
53
- this.bSetVolume = false;
54
- this.gainNode = null;
55
- this.iWndNum = -1; // 窗口号
56
- this.mVolumes = new Map(); // 用于存储所有音量
11
+ var __instance = function () {
12
+ var instance = void 0;
13
+ return function (newInstance) {
14
+ if (newInstance) instance = newInstance;
15
+ return instance;
16
+ };
17
+ }();
57
18
 
58
- // Init AudioContext
59
- var AudioContext = window.AudioContext || window.webkitAudioContext;
60
- this.oAudioContext = new AudioContext();
19
+ var AudioRenderer = function () {
20
+ function AudioRenderer() {
21
+ _classCallCheck(this, AudioRenderer);
61
22
 
62
- this.writeString = function (view, offset, string) {
63
- for (var i = 0; i < string.length; i++) {
64
- view.setUint8(offset + i, string.charCodeAt(i));
65
- }
66
- };
23
+ if (__instance()) return __instance();
67
24
 
68
- this.setBufferToDataview = function (output, offset, input) {
69
- for (var i = 0; i < input.length; i++, offset++) {
70
- output.setUint8(offset, input[i]);
71
- }
72
- };
25
+ // 确保只有单例
26
+ if (AudioRenderer.unique !== undefined) {
27
+ return AudioRenderer.unique;
28
+ }
29
+
30
+ AudioRenderer.unique = this;
31
+
32
+ this.oAudioContext = null;
33
+ this.currentVolume = 80; // 初始音量
34
+ this.bSetVolume = false;
35
+ this.gainNode = null;
36
+ this.iWndNum = -1; // 窗口号
37
+ this.mVolumes = new Map(); // 用于存储所有音量
73
38
 
74
- __instance(this);
75
- }
76
-
77
- /**
78
- * @synopsis 音频播放
79
- *
80
- * @param dataBuf [IN] 音频缓存
81
- * @param dataLen [IN] 缓存长度
82
- * @param audioInfo [IN] 音频参数
83
- *
84
- * @returns 状态码
85
- */
86
-
87
- _createClass(AudioRenderer, [
88
- {
89
- key: "Play",
90
- value: function Play(dataBuf, dataLen, audioInfo) {
91
- var bufferData = new ArrayBuffer(44 + dataLen);
92
- var viewTalk = new DataView(bufferData);
93
- var sampleRates = audioInfo.samplesPerSec;
94
- var channels = audioInfo.channels;
95
- var bitsPerSample = audioInfo.bitsPerSample;
96
-
97
- //console.log("audiorender sampleRates"+sampleRates+"channels:"+channels+"bitsPerSample:"+bitsPerSample);
98
-
99
- /* RIFF identifier */
100
- this.writeString(viewTalk, 0, "RIFF");
101
- /* file length */
102
- viewTalk.setUint32(4, 32 + dataLen * 2, true);
103
- /* RIFF type */
104
- this.writeString(viewTalk, 8, "WAVE");
105
- /* format chunk identifier */
106
- this.writeString(viewTalk, 12, "fmt ");
107
- /* format chunk length */
108
- viewTalk.setUint32(16, 16, true);
109
- /* sample format (raw) */
110
- viewTalk.setUint16(20, 1, true);
111
- /* channel count */
112
- viewTalk.setUint16(22, channels, true);
113
- /* sample rate */
114
- viewTalk.setUint32(24, sampleRates, true);
115
- /* byte rate (sample rate * block align) */
116
- viewTalk.setUint32(28, sampleRates * 2, true);
117
- /* block align (channel count * bytes per sample)/8 */
118
- viewTalk.setUint16(32, (channels * bitsPerSample) / 8, true);
119
- /* bits per sample */
120
- viewTalk.setUint16(34, bitsPerSample, true);
121
- /* data chunk identifier */
122
- this.writeString(viewTalk, 36, "data");
123
- /* data chunk length */
124
- viewTalk.setUint32(40, dataLen, true);
125
- this.setBufferToDataview(viewTalk, 44, dataBuf);
126
-
127
- var self = this;
128
- this.oAudioContext.decodeAudioData(
129
- viewTalk.buffer,
130
- function (buffer) {
131
- var bufferSource = self.oAudioContext.createBufferSource();
132
- if (bufferSource == null) {
133
- return -1;
39
+ // Init AudioContext
40
+ var AudioContext = window.AudioContext || window.webkitAudioContext;
41
+ this.oAudioContext = new AudioContext();
42
+
43
+ this.writeString = function (view, offset, string) {
44
+ for (var i = 0; i < string.length; i++) {
45
+ view.setUint8(offset + i, string.charCodeAt(i));
134
46
  }
47
+ };
135
48
 
136
- bufferSource.buffer = buffer;
137
- bufferSource.start(0);
49
+ this.setBufferToDataview = function (output, offset, input) {
50
+ for (var i = 0; i < input.length; i++, offset++) {
51
+ output.setUint8(offset, input[i]);
52
+ }
53
+ };
138
54
 
139
- if (self.gainNode == null || self.bSetVolume) {
140
- self.gainNode = self.oAudioContext.createGain();
141
- // self.gainNode.gain.value = self.currentVolume;
142
- // // self.currentVolume = self.gainNode.gain.value;
143
- // self.gainNode.connect(self.oAudioContext.destination);
55
+ __instance(this);
56
+ }
57
+
58
+ /**
59
+ * @synopsis 音频播放
60
+ *
61
+ * @param dataBuf [IN] 音频缓存
62
+ * @param dataLen [IN] 缓存长度
63
+ * @param audioInfo [IN] 音频参数
64
+ *
65
+ * @returns 状态码
66
+ */
67
+
68
+
69
+ _createClass(AudioRenderer, [{
70
+ key: 'Play',
71
+ value: function Play(dataBuf, dataLen, audioInfo) {
72
+ var bufferData = new ArrayBuffer(44 + dataLen);
73
+ var viewTalk = new DataView(bufferData);
74
+ var sampleRates = audioInfo.samplesPerSec;
75
+ var channels = audioInfo.channels;
76
+ var bitsPerSample = audioInfo.bitsPerSample;
77
+
78
+ //console.log("audiorender sampleRates"+sampleRates+"channels:"+channels+"bitsPerSample:"+bitsPerSample);
79
+
80
+ /* RIFF identifier */
81
+ this.writeString(viewTalk, 0, 'RIFF');
82
+ /* file length */
83
+ viewTalk.setUint32(4, 32 + dataLen * 2, true);
84
+ /* RIFF type */
85
+ this.writeString(viewTalk, 8, 'WAVE');
86
+ /* format chunk identifier */
87
+ this.writeString(viewTalk, 12, 'fmt ');
88
+ /* format chunk length */
89
+ viewTalk.setUint32(16, 16, true);
90
+ /* sample format (raw) */
91
+ viewTalk.setUint16(20, 1, true);
92
+ /* channel count */
93
+ viewTalk.setUint16(22, channels, true);
94
+ /* sample rate */
95
+ viewTalk.setUint32(24, sampleRates, true);
96
+ /* byte rate (sample rate * block align) */
97
+ viewTalk.setUint32(28, sampleRates * 2, true);
98
+ /* block align (channel count * bytes per sample)/8 */
99
+ viewTalk.setUint16(32, channels * bitsPerSample / 8, true);
100
+ /* bits per sample */
101
+ viewTalk.setUint16(34, bitsPerSample, true);
102
+ /* data chunk identifier */
103
+ this.writeString(viewTalk, 36, 'data');
104
+ /* data chunk length */
105
+ viewTalk.setUint32(40, dataLen, true);
106
+ this.setBufferToDataview(viewTalk, 44, dataBuf);
107
+
108
+ var self = this;
109
+ this.oAudioContext.decodeAudioData(viewTalk.buffer, function (buffer) {
110
+
111
+ var bufferSource = self.oAudioContext.createBufferSource();
112
+ if (bufferSource == null) {
113
+ return -1;
114
+ }
115
+
116
+ bufferSource.buffer = buffer;
117
+ bufferSource.start(0);
118
+
119
+ if (self.gainNode == null || self.bSetVolume) {
120
+ self.gainNode = self.oAudioContext.createGain();
121
+ // self.gainNode.gain.value = self.currentVolume;
122
+ // // self.currentVolume = self.gainNode.gain.value;
123
+ // self.gainNode.connect(self.oAudioContext.destination);
124
+
125
+ self.bSetVolume = false;
126
+ }
127
+
128
+ self.gainNode.gain.value = self.currentVolume/100;
129
+ // self.currentVolume = self.gainNode.gain.value;
130
+ self.gainNode.connect(self.oAudioContext.destination);
131
+
132
+ bufferSource.connect(self.gainNode);
133
+ }, function (e) {
134
+ console.log("decode error");
135
+ return -1;
136
+ });
137
+
138
+ return 0;
139
+ }
144
140
 
145
- self.bSetVolume = false;
141
+ /**
142
+ * @synopsis 停止播放
143
+ *
144
+ * @returns 返回音量
145
+ */
146
+
147
+ }, {
148
+ key: 'Stop',
149
+ value: function Stop() {
150
+ if (this.gainNode != null) {
151
+ this.gainNode.disconnect();
152
+ this.gainNode = null;
146
153
  }
147
154
 
148
- self.gainNode.gain.value = self.currentVolume / 100;
149
- // self.currentVolume = self.gainNode.gain.value;
150
- self.gainNode.connect(self.oAudioContext.destination);
151
-
152
- bufferSource.connect(self.gainNode);
153
- },
154
- function (e) {
155
- console.log("decode error");
156
- return -1;
157
- }
158
- );
159
-
160
- return 0;
161
- },
162
-
163
- /**
164
- * @synopsis 停止播放
165
- *
166
- * @returns 返回音量
167
- */
168
- },
169
- {
170
- key: "Stop",
171
- value: function Stop() {
172
- if (this.gainNode != null) {
173
- this.gainNode.disconnect();
174
- this.gainNode = null;
155
+ // this.oAudioContext.close();
156
+
157
+ // AudioRenderer.unique = undefined;
158
+ // __instance() = null;
159
+ return true;
175
160
  }
176
161
 
177
- // this.oAudioContext.close();
178
-
179
- // AudioRenderer.unique = undefined;
180
- // __instance() = null;
181
- return true;
182
- },
183
-
184
- /**
185
- * @synopsis 设置音量
186
- *
187
- * @param iVolume [IN] 音量
188
- *
189
- * @returns 状态码
190
- */
191
- },
192
- {
193
- key: "SetVolume",
194
- value: function SetVolume(iVolume) {
195
- this.bSetVolume = true;
196
- this.currentVolume = iVolume;
197
-
198
- // 储存当前窗口设置音量值
199
- this.mVolumes.set(this.iWndNum, this.currentVolume);
200
- return true;
201
- },
202
-
203
- /**
204
- * @synopsis 设置窗口号
205
- *
206
- * @param iWndNum [IN] 窗口号
207
- *
208
- * @returns 状态码
209
- */
210
- },
211
- {
212
- key: "SetWndNum",
213
- value: function SetWndNum(iWndNum) {
214
- this.iWndNum = iWndNum;
215
-
216
- // 获取当前窗口设置音量值
217
- var iVolume = this.mVolumes.get(iWndNum);
218
- if (iVolume == undefined) {
219
- iVolume = 80; // 默认音量
162
+ /**
163
+ * @synopsis 设置音量
164
+ *
165
+ * @param iVolume [IN] 音量
166
+ *
167
+ * @returns 状态码
168
+ */
169
+
170
+ }, {
171
+ key: 'SetVolume',
172
+ value: function SetVolume(iVolume) {
173
+ this.bSetVolume = true;
174
+ this.currentVolume = iVolume;
175
+
176
+ // 储存当前窗口设置音量值
177
+ this.mVolumes.set(this.iWndNum, this.currentVolume);
178
+ return true;
220
179
  }
221
- this.currentVolume = iVolume;
222
-
223
- return true;
224
- },
225
-
226
- /**
227
- * @synopsis 获取音量
228
- *
229
- * @returns 返回音量
230
- */
231
- },
232
- {
233
- key: "GetVolume",
234
- value: function GetVolume() {
235
- // 获取当前窗口设置音量值
236
- var iVolume = this.mVolumes.get(this.iWndNum);
237
- if (iVolume == undefined) {
238
- iVolume = 80; // 默认音量
180
+
181
+ /**
182
+ * @synopsis 设置窗口号
183
+ *
184
+ * @param iWndNum [IN] 窗口号
185
+ *
186
+ * @returns 状态码
187
+ */
188
+
189
+ }, {
190
+ key: 'SetWndNum',
191
+ value: function SetWndNum(iWndNum) {
192
+ this.iWndNum = iWndNum;
193
+
194
+ // 获取当前窗口设置音量值
195
+ var iVolume = this.mVolumes.get(iWndNum);
196
+ if (iVolume == undefined) {
197
+ iVolume = 80; // 默认音量
198
+ }
199
+ this.currentVolume = iVolume;
200
+
201
+ return true;
239
202
  }
240
203
 
241
- return iVolume;
242
- },
243
- },
244
- ]);
204
+ /**
205
+ * @synopsis 获取音量
206
+ *
207
+ * @returns 返回音量
208
+ */
209
+
210
+ }, {
211
+ key: 'GetVolume',
212
+ value: function GetVolume() {
213
+ // 获取当前窗口设置音量值
214
+ var iVolume = this.mVolumes.get(this.iWndNum);
215
+ if (iVolume == undefined) {
216
+ iVolume = 80; // 默认音量
217
+ }
245
218
 
246
- window.AudioRenderer = AudioRenderer;
247
- return AudioRenderer;
248
- })();
249
- //# sourceMappingURL=AudioRenderer.js.map
219
+ return iVolume;
220
+ }
221
+ }]);
222
+ window.AudioRenderer = AudioRenderer;
223
+ return AudioRenderer;
224
+ }();
225
+ //# sourceMappingURL=AudioRenderer.js.map
@@ -1,9 +1,4 @@
1
- const DecodeWorkerString = (
2
- staticPath = "https://open.ys7.com/assets/ezuikit_v3.6"
3
- ) => `
4
- /**
5
- * Created by wangweijie5 on 2016/12/5.
6
- */
1
+ const DecodeWorkerString = (staticPath = 'https://open.ys7.com/assets/ezuikit_v3.6') => `
7
2
  (function (event) {
8
3
  const AUDIO_TYPE = 0; // 音频
9
4
  const VIDEO_TYPE = 1; // 视频
@@ -618,6 +613,4 @@ const DecodeWorkerString = (
618
613
  }
619
614
  })();
620
615
  `;
621
-
622
-
623
- export default DecodeWorkerString;
616
+ export default DecodeWorkerString;