ezuikit-js 0.6.2-beta.0 → 0.6.2
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 +21 -0
- package/README.md +44 -1
- package/demos/base-demo/ezuikit.js +1 -1
- package/demos/base-demo/ezuikit_static/v6/v1/css/theme.css +121 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/AudioRenderer.js +225 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/SuperRender_10.js +395 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/SystemTransform.js +22 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/SystemTransform.js.mem +0 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/jsPluginV1-1.0.0.min.js +26 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/playctrl/AudioRenderer.js +225 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/playctrl/DecodeWorker.js +618 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/playctrl/Decoder.js +1 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/playctrl/JSPlaySDKInterface.js +2052 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/playctrl/SuperRender_10.js +396 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/playctrl/SuperRender_20.js +1 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/transform/SystemTransform.js +22 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/transform/SystemTransform.js.mem +0 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/transform/systemTransform-worker.min.js +1 -0
- package/demos/base-demo/ezuikit_static/v6/v1/js/tts-v4.js +346 -0
- package/demos/base-demo/ezuikit_static/v6/v1/rec/datepicker.js +1522 -0
- package/demos/base-demo/ezuikit_static/v6/v1/rec/datepicker.min.css +27 -0
- package/demos/base-demo/ezuikit_static/v6/v1/rec/datepicker.zh-CN.js +19 -0
- package/demos/base-demo/ezuikit_static/v6/v1/rec/jquery.min.js +2 -0
- package/demos/base-demo/ezuikit_static/v6/v1/speed/speed.css +144 -0
- package/demos/base-demo/ezuikit_static/v6/v1/talk/adapeter.js +5497 -0
- package/demos/base-demo/ezuikit_static/v6/v1/talk/janus.js +3507 -0
- package/demos/base-demo/ezuikit_static/v6/v1/talk/tts-v4.js +346 -0
- package/demos/base-demo/ezuikit_static/v6/v2/css/theme.css +121 -0
- package/demos/base-demo/ezuikit_static/v6/v2/js/Decoder.js +9195 -0
- package/demos/base-demo/ezuikit_static/v6/v2/js/Decoder.wasm +0 -0
- package/demos/base-demo/ezuikit_static/v6/v2/js/jsPluginV2-2.0.1.min.js +5407 -0
- package/demos/base-demo/ezuikit_static/v6/v2/rec/datepicker.js +1522 -0
- package/demos/base-demo/ezuikit_static/v6/v2/rec/datepicker.min.css +27 -0
- package/demos/base-demo/ezuikit_static/v6/v2/rec/datepicker.zh-CN.js +19 -0
- package/demos/base-demo/ezuikit_static/v6/v2/rec/jquery.min.js +2 -0
- package/demos/base-demo/ezuikit_static/v6/v2/speed/speed.css +144 -0
- package/demos/base-demo/ezuikit_static/v6/v2/talk/adapeter.js +5497 -0
- package/demos/base-demo/ezuikit_static/v6/v2/talk/janus.js +3507 -0
- package/demos/base-demo/ezuikit_static/v6/v2/talk/tts-v4.js +343 -0
- package/demos/base-demo/index.html +1 -1
- package/demos/base-demo/localDecoder.html +118 -0
- package/demos/base-demo/themeData.html +7 -0
- package/demos/nginx-demo/html/ezuikit5/ezuikit.js +35712 -33299
- package/demos/nginx-demo/html/ezuikit5/index.html +10 -3
- package/demos/react-demo/package-lock.json +3023 -19538
- package/demos/react-demo/package.json +1 -1
- package/demos/react-demo/src/App.js +73 -13
- package/demos/vue-demo/package.json +1 -1
- package/demos/vue-demo/src/components/EZUIKitJs.vue +80 -20
- package/ezuikit.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
v 0.6.2
|
|
2
|
+
|
|
3
|
+
[feta] 支持用户通过开启谷歌实验室特性启动多线程解码
|
|
4
|
+
|
|
5
|
+
[feta] 支持用户在开放平台控制台(https://open.ys7.com/console/ezuikit/template.html)创建,修改,删除,查询多个模板
|
|
6
|
+
|
|
7
|
+
[feta] 优化模板内高清/标清切换缓慢问题。
|
|
8
|
+
|
|
9
|
+
[feta] 支持切换主题
|
|
10
|
+
|
|
11
|
+
[feta] 支持根据主题ID自定义主题
|
|
12
|
+
|
|
13
|
+
[feta] 新增pc端电子放大,移动端双指缩放功能
|
|
14
|
+
|
|
15
|
+
[feta] 新增倍速回放功能
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
v 0.6.1
|
|
19
|
+
|
|
20
|
+
[feta] 支持本地配置解码库,解决远程拉取缓慢问题。
|
|
21
|
+
|
|
1
22
|
v 0.6.0
|
|
2
23
|
|
|
3
24
|
[fix]兼容低版本火狐浏览器播放视频
|
package/README.md
CHANGED
|
@@ -62,6 +62,18 @@ import EZUIKit from 'ezuikit-js';
|
|
|
62
62
|
|
|
63
63
|
你可以通过以下地址获取到测试accessToken <a href="https://open.ys7.com/jssdk/ezopen/demo/token" target="_blank">获取测试accessToken</a> 用来播放上述测试播放地址。
|
|
64
64
|
|
|
65
|
+
#### 最佳实践tips
|
|
66
|
+
|
|
67
|
+
1. 我们在v0.6.2及以上版本持用户通过开启谷歌实验室特性启动多线程解码,多线程模式将大大提升解码效率,降低解码内存消耗。
|
|
68
|
+
|
|
69
|
+
>>[开启多线程方式1](https://open.ys7.com/help/384) (https://open.ys7.com/help/384)
|
|
70
|
+
|
|
71
|
+
>>[开启多线程方式2](https://open.ys7.com/help/385)(https://open.ys7.com/help/385)
|
|
72
|
+
|
|
73
|
+
2. 视频解码库默认从开放平台远程拉取,你可以将解码库放到本地或者你的服务内,可以提升加载解码库速度。
|
|
74
|
+
|
|
75
|
+
>> <b>使用本地解码库提升加载速度</b> <a href="https://github.com/Ezviz-OpenBiz/EZUIKit-JavaScript-npm/blob/master/demos/base-demo/localDecoder.html" target="_blank">本地解码库示例</a>
|
|
76
|
+
|
|
65
77
|
### 使用示例
|
|
66
78
|
<b>基本使用:</b> <a href="https://github.com/Ezviz-OpenBiz/EZUIKit-JavaScript-npm/blob/master/demos/base-demo/base.html" target="_blank">基本使用示例</a>
|
|
67
79
|
|
|
@@ -125,7 +137,7 @@ ezopen://open.ys7.com/${设备序列号}/{通道号}.cloud.rec?begin=yyyyMMddhhm
|
|
|
125
137
|
<tr><td>pcRec</td><td> *固定模板 按钮列表,颜色,底部头部背景色固定, 可用于pc端回放,如需<br />修改按钮配置,头部底部背景色,可参考 {{自定义themeId}},或者使用themeData<br />本地配置*</td></tr>
|
|
126
138
|
<tr><td>mobileLive</td><td> *固定模板 按钮列表,颜色,底部头部背景色固定,可用于移动端预<br />览,如需修改按钮配置,头部底部背景色,可参考 {{自定义themeId}},或者使用themeData<br />本地配置*</td></tr>
|
|
127
139
|
<tr><td>mobileRec</td><td>*固定模板 按钮列表,颜色,底部头部背景色固定, 可用于移动端回放,<br />如需修改按钮配置,头部底部背景色,可参考 {{自定义themeId}},或者使用themeData<br />本地配置*</td></tr>
|
|
128
|
-
<tr><td
|
|
140
|
+
<tr><td>自定义themeId</td><td>自定义主题,<a href="https://open.ys7.com/console/ezuikit/template.html" target="_blank">开放平台控制台配置</a><br />(v0.6.2版本及以上支持,建议使用 自定义themeId,或者使用themeData本地<br />配置);</td></tr>
|
|
129
141
|
</table>
|
|
130
142
|
|
|
131
143
|
</td></tr>
|
|
@@ -220,6 +232,13 @@ themeData将主题数据本地化,设置本地数据,需要删除template参
|
|
|
220
232
|
"memo": "对讲按钮",
|
|
221
233
|
"isrender": 1
|
|
222
234
|
},
|
|
235
|
+
{
|
|
236
|
+
"iconId": "zoom",
|
|
237
|
+
"part": "left",
|
|
238
|
+
"defaultActive": 0,
|
|
239
|
+
"memo": "电子放大",
|
|
240
|
+
"isrender": 1
|
|
241
|
+
},
|
|
223
242
|
{
|
|
224
243
|
"iconId": "hd",
|
|
225
244
|
"part": "right",
|
|
@@ -376,6 +395,29 @@ options参数说明
|
|
|
376
395
|
|begin| String | type类型为回放有效,开始时间 格式为“YYYYMMDDHHmmss” |N|
|
|
377
396
|
|end| String | type类型为回放有效,结束时间 格式为 “YYYYMMDDHHmmss” |N|
|
|
378
397
|
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
#### 切换模板主题
|
|
402
|
+
> 可用于在播放中切换模板主题,同切换播放地址一起调用
|
|
403
|
+
|
|
404
|
+
```
|
|
405
|
+
player.Theme.changeTheme(template)
|
|
406
|
+
.then(()=>{
|
|
407
|
+
console.log("切换成功")
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
// 预览切回放场景示例
|
|
411
|
+
player.changePlayUrl({type:"rec"});
|
|
412
|
+
player.Theme.changeTheme("pcRec");
|
|
413
|
+
|
|
414
|
+
```
|
|
415
|
+
template参数说明
|
|
416
|
+
|
|
417
|
+
|参数名|类型|描述|是否必选|
|
|
418
|
+
|:--|:--|:--|:--|
|
|
419
|
+
|type| String| 模板名称,详见初始化参数template| Y|
|
|
420
|
+
|
|
379
421
|
#### 设置封面
|
|
380
422
|
|
|
381
423
|
>你可以在初始化时,通过参数poster设置默认封面
|
|
@@ -389,6 +431,7 @@ options参数说明
|
|
|
389
431
|
```
|
|
390
432
|
|
|
391
433
|
#### 开启电子放大
|
|
434
|
+
>建议使用模板,模板中的电子放大功能更全
|
|
392
435
|
|
|
393
436
|
```
|
|
394
437
|
// 方式1
|
|
@@ -28963,7 +28963,7 @@ var officeTemplateList = [{
|
|
|
28963
28963
|
updateTime: '2021-06-14T08:04:37.000Z',
|
|
28964
28964
|
label: '官方',
|
|
28965
28965
|
labelPic: "https://resource.eziot.com/group1/M00/00/8A/CtwQEmLr_DmANlElAAA-xyivSaw030.png",
|
|
28966
|
-
poster: "
|
|
28966
|
+
poster: "",
|
|
28967
28967
|
header: pcLiveSimpleData.data.header,
|
|
28968
28968
|
footer: pcLiveSimpleData.data.footer
|
|
28969
28969
|
}, {
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
.footer-controls .theme-icon-item {
|
|
2
|
+
margin: 0 1%;
|
|
3
|
+
}
|
|
4
|
+
.footer-controls.themeEditing .theme-icon-item {
|
|
5
|
+
position: relative;
|
|
6
|
+
/* margin: 0 8px; */
|
|
7
|
+
}
|
|
8
|
+
.footer-controls .footer-controls-left{
|
|
9
|
+
margin-left: 12px;
|
|
10
|
+
}
|
|
11
|
+
.footer-controls.themeEditing .footer-controls-left .theme-icon-item {
|
|
12
|
+
/* margin-left: 12px; */
|
|
13
|
+
}
|
|
14
|
+
.footer-controls.themeEditing .footer-controls-right .theme-icon-item {
|
|
15
|
+
/* margin-right: 12px; */
|
|
16
|
+
}
|
|
17
|
+
.footer-controls .theme-icon-item .icon-move {
|
|
18
|
+
display: none;
|
|
19
|
+
}
|
|
20
|
+
.footer-controls.themeEditing .theme-icon-item:hover .icon-move {
|
|
21
|
+
display: block;
|
|
22
|
+
}
|
|
23
|
+
.footer-controls.themeEditing .footer-controls-left .theme-icon-item:first-child .icon-move.left{
|
|
24
|
+
display: none;
|
|
25
|
+
}
|
|
26
|
+
.footer-controls.themeEditing .footer-controls-left .theme-icon-item:nth-last-child(1) .icon-move.right{
|
|
27
|
+
display: none;
|
|
28
|
+
}
|
|
29
|
+
.footer-controls .footer-controls-right {
|
|
30
|
+
margin-right: 12px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.footer-controls.themeEditing .footer-controls-right .theme-icon-item:first-child .icon-move.left{
|
|
34
|
+
display: none;
|
|
35
|
+
}
|
|
36
|
+
.footer-controls.themeEditing .footer-controls-right .theme-icon-item:nth-last-child(1) .icon-move.right{
|
|
37
|
+
display: none;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.header-controls .theme-icon-item {
|
|
41
|
+
margin: 0 1%;
|
|
42
|
+
}
|
|
43
|
+
.header-controls.themeEditing .theme-icon-item {
|
|
44
|
+
position: relative;
|
|
45
|
+
/* margin: 0 8px; */
|
|
46
|
+
}
|
|
47
|
+
.header-controls.themeEditing .header-controls-left {
|
|
48
|
+
margin-left: 12px;
|
|
49
|
+
}
|
|
50
|
+
.header-controls.themeEditing .header-controls-right {
|
|
51
|
+
margin-right: 12px;
|
|
52
|
+
}
|
|
53
|
+
.header-controls .theme-icon-item .icon-move {
|
|
54
|
+
display: none;
|
|
55
|
+
}
|
|
56
|
+
.header-controls.themeEditing .theme-icon-item:hover .icon-move {
|
|
57
|
+
display: block;
|
|
58
|
+
}
|
|
59
|
+
.header-controls.themeEditing .header-controls-left .theme-icon-item:first-child .icon-move.left{
|
|
60
|
+
display: none;
|
|
61
|
+
}
|
|
62
|
+
.header-controls.themeEditing .header-controls-left .theme-icon-item:nth-last-child(1) .icon-move.right{
|
|
63
|
+
display: none;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.header-controls.themeEditing .header-controls-right .theme-icon-item:first-child .icon-move.left{
|
|
67
|
+
display: none;
|
|
68
|
+
}
|
|
69
|
+
.header-controls.themeEditing .header-controls-right .theme-icon-item:nth-last-child(1) .icon-move.right{
|
|
70
|
+
display: none;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
.time-area {
|
|
75
|
+
position: absolute;
|
|
76
|
+
color: #FFFFFF;
|
|
77
|
+
width: 68px;
|
|
78
|
+
height: 24px;
|
|
79
|
+
line-height: 24px;
|
|
80
|
+
background: #00000050;
|
|
81
|
+
border-radius: 12px;
|
|
82
|
+
display: none;
|
|
83
|
+
align-content: center;
|
|
84
|
+
left: calc(50% - 34px);
|
|
85
|
+
top: -30px;
|
|
86
|
+
align-items: center;
|
|
87
|
+
justify-content: space-around;
|
|
88
|
+
padding-left: 4px;
|
|
89
|
+
z-index: 9999999;
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
.time-area .dot {
|
|
93
|
+
display: inline-block;
|
|
94
|
+
width: 8px;
|
|
95
|
+
height: 8px;
|
|
96
|
+
background: red;
|
|
97
|
+
border-radius: 100%;
|
|
98
|
+
margin: 0 4px 1px 4px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
/* .footer-controls.themeEditing .theme-icon-item {
|
|
103
|
+
position: relative;
|
|
104
|
+
margin: 0 8px;
|
|
105
|
+
}
|
|
106
|
+
.footer-controls.themeEditing .footer-controls-left .theme-icon-item:nth-child(1) .ezuikit-theme-icon >span:first-child{
|
|
107
|
+
display: none!important;
|
|
108
|
+
}
|
|
109
|
+
.footer-controls.themeEditing .footer-controls-left .theme-icon-item:nth-last-child(2) .ezuikit-theme-icon >span:nth-child(3){
|
|
110
|
+
display: none!important;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.footer-controls.themeEditing .theme-icon-item:hover .ezuikit-theme-icon {
|
|
114
|
+
display: block!important;
|
|
115
|
+
}
|
|
116
|
+
.footer-controls.themeEditing .footer-controls-right .theme-icon-item:nth-child(1) .ezuikit-theme-icon >span:first-child{
|
|
117
|
+
display: none!important;
|
|
118
|
+
}
|
|
119
|
+
.footer-controls.themeEditing .footer-controls-right .theme-icon-item:nth-last-child(1) .ezuikit-theme-icon >span:nth-child(3){
|
|
120
|
+
display: none!important;
|
|
121
|
+
} */
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Created by wangweijie5 on 2016/12/16.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
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; }; }();
|
|
8
|
+
|
|
9
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
10
|
+
|
|
11
|
+
var __instance = function () {
|
|
12
|
+
var instance = void 0;
|
|
13
|
+
return function (newInstance) {
|
|
14
|
+
if (newInstance) instance = newInstance;
|
|
15
|
+
return instance;
|
|
16
|
+
};
|
|
17
|
+
}();
|
|
18
|
+
|
|
19
|
+
var AudioRenderer = function () {
|
|
20
|
+
function AudioRenderer() {
|
|
21
|
+
_classCallCheck(this, AudioRenderer);
|
|
22
|
+
|
|
23
|
+
if (__instance()) return __instance();
|
|
24
|
+
|
|
25
|
+
// 确保只有单例
|
|
26
|
+
if (AudioRenderer.unique !== undefined) {
|
|
27
|
+
return AudioRenderer.unique;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
AudioRenderer.unique = this;
|
|
31
|
+
|
|
32
|
+
this.oAudioContext = null;
|
|
33
|
+
this.currentVolume = 0.8; // 初始音量
|
|
34
|
+
this.bSetVolume = false;
|
|
35
|
+
this.gainNode = null;
|
|
36
|
+
this.iWndNum = -1; // 窗口号
|
|
37
|
+
this.mVolumes = new Map(); // 用于存储所有音量
|
|
38
|
+
|
|
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));
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
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
|
+
};
|
|
54
|
+
|
|
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;
|
|
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
|
+
}
|
|
140
|
+
|
|
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;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// this.oAudioContext.close();
|
|
156
|
+
|
|
157
|
+
// AudioRenderer.unique = undefined;
|
|
158
|
+
// __instance() = null;
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
|
|
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, iVolume);
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
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 = 0.8; // 默认音量
|
|
198
|
+
}
|
|
199
|
+
this.currentVolume = iVolume;
|
|
200
|
+
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
|
|
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 = 0.8; // 默认音量
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return iVolume;
|
|
220
|
+
}
|
|
221
|
+
}]);
|
|
222
|
+
window.AudioRenderer = AudioRenderer;
|
|
223
|
+
return AudioRenderer;
|
|
224
|
+
}();
|
|
225
|
+
//# sourceMappingURL=AudioRenderer.js.map
|