ezuikit-js 7.5.0 → 7.6.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/demos/base-demo/ezuikit.js +31252 -15566
- package/demos/base-demo/ezuikit_static/v65/v2/js/jsPluginV2-2.0.1.min.js +74 -11
- package/demos/base-demo/ezuikit_static/v66/v1/css/theme.css +121 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/AudioRenderer.js +225 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/SuperRender_10.js +395 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/SystemTransform.js +22 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/SystemTransform.js.mem +0 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/jsPluginV1-1.0.0.min.js +26 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/AudioRenderer.js +225 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/DecodeWorker.js +618 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/Decoder.js +1 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/JSPlaySDKInterface.js +2052 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/SuperRender_10.js +396 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/SuperRender_20.js +1 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/transform/SystemTransform.js +22 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/transform/SystemTransform.js.mem +0 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/transform/systemTransform-worker.min.js +1 -0
- package/demos/base-demo/ezuikit_static/v66/v1/js/tts-v4.js +346 -0
- package/demos/base-demo/ezuikit_static/v66/v1/rec/datepicker.js +1522 -0
- package/demos/base-demo/ezuikit_static/v66/v1/rec/datepicker.min.css +36 -0
- package/demos/base-demo/ezuikit_static/v66/v1/rec/datepicker.zh-CN.js +19 -0
- package/demos/base-demo/ezuikit_static/v66/v1/rec/jquery.min.js +2 -0
- package/demos/base-demo/ezuikit_static/v66/v1/speed/speed.css +144 -0
- package/demos/base-demo/ezuikit_static/v66/v1/talk/adapeter.js +5497 -0
- package/demos/base-demo/ezuikit_static/v66/v1/talk/janus.js +3507 -0
- package/demos/base-demo/ezuikit_static/v66/v1/talk/tts-v4.js +346 -0
- package/demos/base-demo/ezuikit_static/v66/v2/css/theme.css +121 -0
- package/demos/base-demo/ezuikit_static/v66/v2/js/Decoder.js +9198 -0
- package/demos/base-demo/ezuikit_static/v66/v2/js/Decoder.wasm +0 -0
- package/demos/base-demo/ezuikit_static/v66/v2/js/jsPluginV2-2.0.1.min.js +15968 -0
- package/demos/base-demo/ezuikit_static/v66/v2/rec/datepicker.js +1522 -0
- package/demos/base-demo/ezuikit_static/v66/v2/rec/datepicker.min.css +36 -0
- package/demos/base-demo/ezuikit_static/v66/v2/rec/datepicker.zh-CN.js +19 -0
- package/demos/base-demo/ezuikit_static/v66/v2/rec/jquery.min.js +2 -0
- package/demos/base-demo/ezuikit_static/v66/v2/speed/speed.css +144 -0
- package/demos/base-demo/ezuikit_static/v66/v2/talk/adapeter.js +5497 -0
- package/demos/base-demo/ezuikit_static/v66/v2/talk/janus.js +3507 -0
- package/demos/base-demo/ezuikit_static/v66/v2/talk/tts-v4.js +343 -0
- package/ezuikit.js +32877 -26317
- package/ezuikit_static/v66/v1/css/theme.css +121 -0
- package/ezuikit_static/v66/v1/js/AudioRenderer.js +225 -0
- package/ezuikit_static/v66/v1/js/SuperRender_10.js +395 -0
- package/ezuikit_static/v66/v1/js/SystemTransform.js +22 -0
- package/ezuikit_static/v66/v1/js/SystemTransform.js.mem +0 -0
- package/ezuikit_static/v66/v1/js/jsPluginV1-1.0.0.min.js +26 -0
- package/ezuikit_static/v66/v1/js/playctrl/AudioRenderer.js +225 -0
- package/ezuikit_static/v66/v1/js/playctrl/DecodeWorker.js +618 -0
- package/ezuikit_static/v66/v1/js/playctrl/Decoder.js +1 -0
- package/ezuikit_static/v66/v1/js/playctrl/JSPlaySDKInterface.js +2052 -0
- package/ezuikit_static/v66/v1/js/playctrl/SuperRender_10.js +396 -0
- package/ezuikit_static/v66/v1/js/playctrl/SuperRender_20.js +1 -0
- package/ezuikit_static/v66/v1/js/transform/SystemTransform.js +22 -0
- package/ezuikit_static/v66/v1/js/transform/SystemTransform.js.mem +0 -0
- package/ezuikit_static/v66/v1/js/transform/systemTransform-worker.min.js +1 -0
- package/ezuikit_static/v66/v1/js/tts-v4.js +346 -0
- package/ezuikit_static/v66/v1/rec/datepicker.js +1522 -0
- package/ezuikit_static/v66/v1/rec/datepicker.min.css +36 -0
- package/ezuikit_static/v66/v1/rec/datepicker.zh-CN.js +19 -0
- package/ezuikit_static/v66/v1/rec/jquery.min.js +2 -0
- package/ezuikit_static/v66/v1/speed/speed.css +144 -0
- package/ezuikit_static/v66/v1/talk/adapeter.js +5497 -0
- package/ezuikit_static/v66/v1/talk/janus.js +3507 -0
- package/ezuikit_static/v66/v1/talk/tts-v4.js +346 -0
- package/ezuikit_static/v66/v2/css/theme.css +121 -0
- package/ezuikit_static/v66/v2/js/Decoder.js +9198 -0
- package/ezuikit_static/v66/v2/js/Decoder.wasm +0 -0
- package/ezuikit_static/v66/v2/js/jsPluginV2-2.0.1.min.js +15968 -0
- package/ezuikit_static/v66/v2/rec/datepicker.js +1522 -0
- package/ezuikit_static/v66/v2/rec/datepicker.min.css +36 -0
- package/ezuikit_static/v66/v2/rec/datepicker.zh-CN.js +19 -0
- package/ezuikit_static/v66/v2/rec/jquery.min.js +2 -0
- package/ezuikit_static/v66/v2/speed/speed.css +144 -0
- package/ezuikit_static/v66/v2/talk/adapeter.js +5497 -0
- package/ezuikit_static/v66/v2/talk/janus.js +3507 -0
- package/ezuikit_static/v66/v2/talk/tts-v4.js +343 -0
- package/package.json +1 -1
|
@@ -3049,6 +3049,10 @@ const loadJSByBlobToHeader = (url, callback, isReady) => {
|
|
|
3049
3049
|
}
|
|
3050
3050
|
}
|
|
3051
3051
|
}
|
|
3052
|
+
if (oJSON && oJSON.errorCode) {
|
|
3053
|
+
//推流异常时返回异常信息
|
|
3054
|
+
cbMessage(oJSON);
|
|
3055
|
+
}
|
|
3052
3056
|
} else {
|
|
3053
3057
|
let dataObj = {};
|
|
3054
3058
|
let dataBuf = new Uint8Array(e.data);
|
|
@@ -3753,7 +3757,6 @@ const loadJSByBlobToHeader = (url, callback, isReady) => {
|
|
|
3753
3757
|
//宽、高
|
|
3754
3758
|
var nWidth = 0;
|
|
3755
3759
|
var nHeight = 0;
|
|
3756
|
-
var g_port;
|
|
3757
3760
|
// 录制
|
|
3758
3761
|
// var aHead = [];
|
|
3759
3762
|
function downloadFile(oData, szName) {
|
|
@@ -3901,9 +3904,26 @@ class JSPluginV2 {
|
|
|
3901
3904
|
console.log("1.获取播放库端口号 g_port:" + _this.g_port);
|
|
3902
3905
|
// 端口已经使用,设置为不可用状态
|
|
3903
3906
|
this.portAvailable = false;
|
|
3907
|
+
|
|
3908
|
+
//xuehb 开始取流 4
|
|
3909
|
+
if (_this.EventCallback && _this.EventCallback.openStreamCallback) {
|
|
3910
|
+
console.log('开始取流-----v2');
|
|
3911
|
+
_this.EventCallback.openStreamCallback();
|
|
3912
|
+
}
|
|
3904
3913
|
_this.oStreamClient.openStream(szUrl, oParams, data => {
|
|
3914
|
+
if (data.errorCode && data.errorCode != '1') {
|
|
3915
|
+
//推流异常时触发errorHandler
|
|
3916
|
+
if (_this.EventCallback && _this.EventCallback.pluginErrorHandler) {
|
|
3917
|
+
_this.EventCallback.pluginErrorHandler(iWndNum, data.errorCode, data);
|
|
3918
|
+
}
|
|
3919
|
+
}
|
|
3905
3920
|
if (data.bHead) {
|
|
3906
3921
|
//判断是否开启预览,用于初始化播放库,回放跳片段是会返回媒体头,不能只判断是否为媒体头
|
|
3922
|
+
//xuehb 完成取流返回流头 5
|
|
3923
|
+
if (_this.EventCallback && _this.EventCallback.getStreamHeaderCallback) {
|
|
3924
|
+
console.log('完成取流返回流头');
|
|
3925
|
+
_this.EventCallback.getStreamHeaderCallback();
|
|
3926
|
+
}
|
|
3907
3927
|
_this.PlayM4_openStream(_this.g_port, data.buf);
|
|
3908
3928
|
_this.aHead = new Uint8Array(data.buf);
|
|
3909
3929
|
_this.pCanvasData = Module._malloc(128); //通过emscripten分配C/C++中的堆内存
|
|
@@ -3920,6 +3940,28 @@ class JSPluginV2 {
|
|
|
3920
3940
|
aKeyData = null;
|
|
3921
3941
|
let resP = Module._JSPlayM4_Play(_this.g_port, _this.pCanvasData); //pCanvasString或pCanvasData
|
|
3922
3942
|
console.log("4.开始播放 resP:" + resP);
|
|
3943
|
+
try {
|
|
3944
|
+
const getQueryString = (name, url) => {
|
|
3945
|
+
const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
|
|
3946
|
+
const r = url.match(reg);
|
|
3947
|
+
if (r != null) {
|
|
3948
|
+
return unescape(r[2]);
|
|
3949
|
+
}
|
|
3950
|
+
return null;
|
|
3951
|
+
};
|
|
3952
|
+
const date = getQueryString('begin', oParams.playURL);
|
|
3953
|
+
const year = parseInt(date.slice(0, 4));
|
|
3954
|
+
const month = parseInt(date.slice(4, 6));
|
|
3955
|
+
const day = parseInt(date.slice(6, 8));
|
|
3956
|
+
const hour = parseInt(date.slice(9, 11));
|
|
3957
|
+
const min = parseInt(date.slice(11, 13));
|
|
3958
|
+
const second = parseInt(date.slice(13, 15)) + 3;
|
|
3959
|
+
const setRes = Module._JSPlayM4_SetGlobalBaseTime(_this.g_port, year, month, day, hour, min, second, 0);
|
|
3960
|
+
console.log('设置OSD时间: ', _this.g_port, year + ':' + month + ':' + day + ':' + hour + ':' + min + ':' + second + ':' + 0);
|
|
3961
|
+
console.log('设置OSD时间res:', setRes);
|
|
3962
|
+
} catch (error) {
|
|
3963
|
+
console.log('_JSPlayM4_SetGlobalBaseTime:', error);
|
|
3964
|
+
}
|
|
3923
3965
|
_this.bPlay = true;
|
|
3924
3966
|
_this.bPlayIng = false;
|
|
3925
3967
|
// 设置一系列回调
|
|
@@ -3933,13 +3975,32 @@ class JSPluginV2 {
|
|
|
3933
3975
|
Module._JSPlayM4_RenderPrivateData(0, 4, 0);
|
|
3934
3976
|
Module._JSPlayM4_RenderPrivateData(0, 16, 0);
|
|
3935
3977
|
this.firstFlag = true;
|
|
3978
|
+
this.firstGetData = true;
|
|
3936
3979
|
resolve(resP);
|
|
3937
3980
|
} else {
|
|
3981
|
+
if (this.firstGetData) {
|
|
3982
|
+
// 第一次获取数据
|
|
3983
|
+
this.firstGetData = false;
|
|
3984
|
+
|
|
3985
|
+
//xuehb 返回视频流(首次) 6
|
|
3986
|
+
if (_this.EventCallback && _this.EventCallback.getVideoStreamCallback) {
|
|
3987
|
+
_this.EventCallback.getVideoStreamCallback();
|
|
3988
|
+
}
|
|
3989
|
+
}
|
|
3938
3990
|
if (this.firstFlag) {
|
|
3939
3991
|
let oFrameInfo = Module._JSPlayM4_GetFrameInfo(this.g_port);
|
|
3940
3992
|
var nWidth = Module.HEAP32[oFrameInfo + 12 >> 2];
|
|
3941
3993
|
var nHeight = Module.HEAP32[oFrameInfo + 16 >> 2];
|
|
3942
3994
|
if (nWidth) {
|
|
3995
|
+
//xuehb 首屏展示 7
|
|
3996
|
+
if (_this.EventCallback && _this.EventCallback.appearFirstFrameCallback) {
|
|
3997
|
+
console.log('出现首帧画面(播放成功)------多线程');
|
|
3998
|
+
_this.EventCallback.appearFirstFrameCallback();
|
|
3999
|
+
}
|
|
4000
|
+
//xuehb 平均成功取流的出流耗时 8
|
|
4001
|
+
if (_this.EventCallback && _this.EventCallback.averageStreamSuccessCallback) {
|
|
4002
|
+
_this.EventCallback.averageStreamSuccessCallback();
|
|
4003
|
+
}
|
|
3943
4004
|
console.log("首帧展示", nWidth, nHeight);
|
|
3944
4005
|
this.firstFlag = false;
|
|
3945
4006
|
if (document.getElementById(this.szId + '-player-tmp')) {
|
|
@@ -3991,13 +4052,13 @@ class JSPluginV2 {
|
|
|
3991
4052
|
//websocket onopen事件触发
|
|
3992
4053
|
_this.szStreamUUID = id;
|
|
3993
4054
|
_this.oStreamClient.startPlay(id).then(() => {
|
|
3994
|
-
let resSSOM = Module._JSPlayM4_SetStreamOpenMode(g_port, 1);
|
|
4055
|
+
let resSSOM = Module._JSPlayM4_SetStreamOpenMode(_this.g_port, 1);
|
|
3995
4056
|
console.log("2.设置流模式 resSSOM:" + resSSOM);
|
|
3996
4057
|
}).catch(err => {
|
|
3997
4058
|
console.log("err", err);
|
|
3998
4059
|
_this._doRelease();
|
|
3999
4060
|
_this.bPlayIng = false;
|
|
4000
|
-
reject(err);
|
|
4061
|
+
reject(err.oError);
|
|
4001
4062
|
});
|
|
4002
4063
|
}, function (oError) {
|
|
4003
4064
|
//websocekt 未进入onopen
|
|
@@ -4471,8 +4532,11 @@ class JSPluginV2 {
|
|
|
4471
4532
|
}
|
|
4472
4533
|
JS_Speed(nextRate) {
|
|
4473
4534
|
this.oStreamClient.setPlayRate(this.szStreamUUID, nextRate);
|
|
4535
|
+
window.Module._JSPlayM4_SetDecodeFrameType(1);
|
|
4536
|
+
const fastRes = window.Module._JSPlayM4_Fast(this.g_port);
|
|
4474
4537
|
this.iRate = nextRate;
|
|
4475
4538
|
console.log("开启倍速播放", nextRate);
|
|
4539
|
+
console.log("开启倍速播放res:", fastRes);
|
|
4476
4540
|
}
|
|
4477
4541
|
JS_Seek(iWndNum, szStartTime, szStopTime) {
|
|
4478
4542
|
let oPromise = new Promise((resolve, reject) => {
|
|
@@ -4574,19 +4638,18 @@ class JSPluginV2 {
|
|
|
4574
4638
|
if (this.playURL.indexOf("playback") !== -1) {
|
|
4575
4639
|
this.playURL = this.playURL.replace(/begin=[0-9]{8}T[0-9]{6}Z/gi, `begin=${this.bPauseTime.slice(0, 8)}T${this.bPauseTime.slice(8, 14)}Z`);
|
|
4576
4640
|
}
|
|
4641
|
+
console.log('this.playURL:', this.playURL);
|
|
4642
|
+
console.log('this.bPauseTime:', this.bPauseTime);
|
|
4643
|
+
if (this.playURL.indexOf("cloudplayback") !== -1) {
|
|
4644
|
+
this.playURL = this.playURL.replace(/"startTime":[0-9]{13}/gi, `"startTime":${this.bPauseTime}`);
|
|
4645
|
+
}
|
|
4577
4646
|
this.bPause = false;
|
|
4578
4647
|
this.JS_Play(this.szUrl, {
|
|
4579
4648
|
playURL: this.playURL
|
|
4580
4649
|
}).then(data => {
|
|
4581
|
-
resolve(
|
|
4582
|
-
code: 1,
|
|
4583
|
-
msg: "恢复成功"
|
|
4584
|
-
});
|
|
4650
|
+
resolve(data);
|
|
4585
4651
|
}).catch(err => {
|
|
4586
|
-
reject(
|
|
4587
|
-
code: 0,
|
|
4588
|
-
msg: "恢复失败"
|
|
4589
|
-
});
|
|
4652
|
+
reject(err);
|
|
4590
4653
|
});
|
|
4591
4654
|
});
|
|
4592
4655
|
return promise;
|
|
@@ -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
|