dedsudiyu 2 月之前
當前提交
afdec0ad4b
共有 100 個文件被更改,包括 47885 次插入0 次删除
  1. 41 0
      .env.production
  2. 26 0
      .env.test
  3. 26 0
      .gitignore
  4. 24 0
      README.md
  5. 5 0
      babel.config.js
  6. 19 0
      jsconfig.json
  7. 11005 0
      package-lock.json
  8. 61 0
      package.json
  9. 二進制
      public/favicon.ico
  10. 313 0
      public/h5player/h5player.min.js
  11. 642 0
      public/h5player/playctrl1/DecodeWorker.js
  12. 1 0
      public/h5player/playctrl1/Decoder.js
  13. 642 0
      public/h5player/playctrl1simd/DecodeWorker.js
  14. 1 0
      public/h5player/playctrl1simd/Decoder.js
  15. 21 0
      public/h5player/playctrl2/Decoder.js
  16. 二進制
      public/h5player/playctrl2/Decoder.wasm
  17. 1 0
      public/h5player/playctrl2/Decoder.worker.js
  18. 21 0
      public/h5player/playctrl3/Decoder.js
  19. 二進制
      public/h5player/playctrl3/Decoder.wasm
  20. 1 0
      public/h5player/playctrl3/Decoder.worker.js
  21. 8 0
      public/h5player/static/css/antd.min.css
  22. 587 0
      public/h5player/static/css/bootstrap-theme.css
  23. 1 0
      public/h5player/static/css/bootstrap-theme.css.map
  24. 6 0
      public/h5player/static/css/bootstrap-theme.min.css
  25. 1 0
      public/h5player/static/css/bootstrap-theme.min.css.map
  26. 6834 0
      public/h5player/static/css/bootstrap.css
  27. 1 0
      public/h5player/static/css/bootstrap.css.map
  28. 6 0
      public/h5player/static/css/bootstrap.min.css
  29. 1 0
      public/h5player/static/css/bootstrap.min.css.map
  30. 二進制
      public/h5player/static/fonts/glyphicons-halflings-regular.eot
  31. 288 0
      public/h5player/static/fonts/glyphicons-halflings-regular.svg
  32. 二進制
      public/h5player/static/fonts/glyphicons-halflings-regular.ttf
  33. 二進制
      public/h5player/static/fonts/glyphicons-halflings-regular.woff
  34. 二進制
      public/h5player/static/fonts/glyphicons-halflings-regular.woff2
  35. 3 0
      public/h5player/static/js/antd-with-locales.min.js
  36. 1 0
      public/h5player/static/js/antd-with-locales.min.js.map
  37. 3 0
      public/h5player/static/js/antd.min.js
  38. 1 0
      public/h5player/static/js/antd.min.js.map
  39. 2580 0
      public/h5player/static/js/bootstrap.js
  40. 6 0
      public/h5player/static/js/bootstrap.min.js
  41. 5 0
      public/h5player/static/js/jquery-1.12.4.min.js
  42. 4601 0
      public/h5player/static/js/moment.js
  43. 13 0
      public/h5player/static/js/npm.js
  44. 10 0
      public/h5player/static/js/vconsole.min.js
  45. 12014 0
      public/h5player/static/js/vue.js
  46. 6 0
      public/h5player/static/js/vue.min.js
  47. 120 0
      public/h5player/static/js/zh-cn.js
  48. 21 0
      public/h5player/talk/AudioInterCom.js
  49. 二進制
      public/h5player/talk/AudioInterCom.wasm
  50. 21 0
      public/h5player/talkW/AudioInterCom.js
  51. 二進制
      public/h5player/talkW/AudioInterCom.wasm
  52. 1 0
      public/h5player/talkW/AudioInterCom.worker.js
  53. 6525 0
      public/h5player/transform/libSystemTransform.js
  54. 二進制
      public/h5player/transform/libSystemTransform.wasm
  55. 120 0
      public/h5player/transform/systemTransform-worker.js
  56. 22 0
      public/index.html
  57. 123 0
      src/App.vue
  58. 35 0
      src/api/classifyGradeDetail.js
  59. 119 0
      src/api/http.js
  60. 430 0
      src/api/index.js
  61. 55 0
      src/api/login.js
  62. 二進制
      src/assets/ZDimages/bottom_icon.png
  63. 二進制
      src/assets/ZDimages/emergencyManagement/icon_aqtd_m.png
  64. 二進制
      src/assets/ZDimages/emergencyManagement/icon_jjck.png
  65. 二進制
      src/assets/ZDimages/emergencyManagement/icon_pmbjt_m.png
  66. 二進制
      src/assets/ZDimages/emergencyManagement/icon_pmt_ry.png
  67. 二進制
      src/assets/ZDimages/emergencyManagement/icon_shang_hs.png
  68. 二進制
      src/assets/ZDimages/emergencyManagement/icon_sjt.png
  69. 二進制
      src/assets/ZDimages/emergencyManagement/icon_xia_hs.png
  70. 二進制
      src/assets/ZDimages/emergencyManagement/icon_xjt.png
  71. 二進制
      src/assets/ZDimages/emergencyManagement/icon_you_hs.png
  72. 二進制
      src/assets/ZDimages/emergencyManagement/icon_yuo.png
  73. 二進制
      src/assets/ZDimages/emergencyManagement/icon_zou_hs.png
  74. 二進制
      src/assets/ZDimages/emergencyManagement/icon_zuo.png
  75. 二進制
      src/assets/ZDimages/emergencyManagement/img_bg_yatk.png
  76. 二進制
      src/assets/ZDimages/emergencyManagement/img_fjbj_jb@1x.png
  77. 二進制
      src/assets/ZDimages/icon_0.png
  78. 二進制
      src/assets/ZDimages/icon_1.png
  79. 二進制
      src/assets/ZDimages/icon_bg_rs@1x.png
  80. 二進制
      src/assets/ZDimages/icon_bt_yso@1x.png
  81. 二進制
      src/assets/ZDimages/icon_bt_yst@1x.png
  82. 二進制
      src/assets/ZDimages/icon_znwyyc_bg@1x.png
  83. 二進制
      src/assets/ZDimages/icon_znwyzc_bg@1x.png
  84. 二進制
      src/assets/ZDimages/img_bg_cdo@1x.png
  85. 二進制
      src/assets/ZDimages/img_bg_xz@1x.png
  86. 二進制
      src/assets/ZDimages/img_bg_zc@1x.png
  87. 二進制
      src/assets/ZDimages/img_wxy_szbg@1x.png
  88. 二進制
      src/assets/ZDimages/img_znwl_xdh@1x.png
  89. 二進制
      src/assets/ZDimages/img_znwl_xdl@1x.png
  90. 二進制
      src/assets/ZDimages/null-data-1.png
  91. 467 0
      src/assets/iconfont/iconfont.css
  92. 二進制
      src/assets/iconfont/iconfont.ttf
  93. 二進制
      src/assets/iconfont/iconfont.woff
  94. 二進制
      src/assets/iconfont/iconfont.woff2
  95. 二進制
      src/assets/image/bg.png
  96. 二進制
      src/assets/image/favicon.png
  97. 二進制
      src/assets/image/icon_fxyj_xz.png
  98. 二進制
      src/assets/image/icon_fxyj_zc.png
  99. 二進制
      src/assets/image/icon_jjck.png
  100. 0 0
      src/assets/image/icon_pmbjt_m.png

+ 41 - 0
.env.production

@@ -0,0 +1,41 @@
+# 页面标题
+VUE_APP_TITLE = 实验室安全智慧化管控系统
+
+# 开发环境配置
+NODE_ENV=production
+VUE_APP_ENV = 'production'
+
+# #######################版本编码#######################
+
+VUE_APP_RENEWAL_ENCODING = ''
+
+# ####################外网接口配置####################
+
+# 现场
+VUE_APP_BASE_API = 'labcontrol.nwafu.edu.cn/api'
+
+# 1.8外网地址
+# VUE_APP_BASE_API = 'lab.zjznai.com/labTest'
+
+# 43外网地址
+# VUE_APP_BASE_API = 'lab.zjznai.com/labapp'
+
+# 开发人员地址
+# VUE_APP_BASE_API = '192.168.1.24:8080'
+
+# ####################内网接口配置####################
+
+# 现场
+VUE_APP_BASE_LOCAL_API = '172.16.0.65/api'
+
+# 1.8内网地址
+# VUE_APP_BASE_LOCAL_API = '192.168.1.8/api'
+
+# 43内网地址
+# VUE_APP_BASE_LOCAL_API = '192.168.1.43/api'
+
+# 开发人员地址
+# VUE_APP_BASE_LOCAL_API = '192.168.1.24:8080'
+
+
+

+ 26 - 0
.env.test

@@ -0,0 +1,26 @@
+# 页面标题
+VUE_APP_TITLE = 实验室安全智慧化管控系统
+
+# 开发环境配置
+NODE_ENV=production
+VUE_APP_ENV = 'test'
+
+# ####################接口配置####################
+
+# 88服务器
+ VUE_APP_BASE_API = 'http://192.168.1.88/labSystem'
+
+
+# ####################MQTT配置####################
+
+# MQTT地址
+VUE_APP_BASE_MQTT_API = 'ws://180.76.134.43:1884'
+VUE_APP_BASE_MQTT_USERNAME = 'mqtt'
+VUE_APP_BASE_MQTT_PASSWORD = 'mqtt@zd1883'
+
+
+# #####################后台跳转地址#####################
+
+# 后台地址
+VUE_APP_ADMIN_SCREEN_CAMPUS_BASE_API = 'https://www.baidu.com'
+

+ 26 - 0
.gitignore

@@ -0,0 +1,26 @@
+.DS_Store
+node_modules
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+/bigData
+/public/version.txt
+/.env.development

+ 24 - 0
README.md

@@ -0,0 +1,24 @@
+# demo2
+
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Lints and fixes files
+```
+npm run lint
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).

+ 5 - 0
babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/cli-plugin-babel/preset'
+  ]
+}

+ 19 - 0
jsconfig.json

@@ -0,0 +1,19 @@
+{
+  "compilerOptions": {
+    "target": "es5",
+    "module": "esnext",
+    "baseUrl": "./",
+    "moduleResolution": "node",
+    "paths": {
+      "@/*": [
+        "src/*"
+      ]
+    },
+    "lib": [
+      "esnext",
+      "dom",
+      "dom.iterable",
+      "scripthost"
+    ]
+  }
+}

文件差異過大導致無法顯示
+ 11005 - 0
package-lock.json


+ 61 - 0
package.json

@@ -0,0 +1,61 @@
+{
+  "name": "labBigData",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "axios": "^1.1.3",
+    "core-js": "^3.8.3",
+    "crypto-js": "^4.2.0",
+    "echarts": "^4.4.0",
+    "element-ui": "^2.15.10",
+    "flv.js": "^1.6.2",
+    "jquery": "^3.6.1",
+    "js-cookie": "^3.0.5",
+    "js-md5": "^0.8.3",
+    "mpegts.js": "^1.7.3",
+    "mqtt": "^4.2.8",
+    "node-polyfill-webpack-plugin": "^4.1.0",
+    "node-sass": "^7.0.1",
+    "qs": "^6.11.0",
+    "sass-loader": "^13.0.2",
+    "script-ext-html-webpack-plugin": "^2.1.5",
+    "swiper": "^4.3.3",
+    "vue": "^2.6.14",
+    "vue-router": "^3.5.2"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.12.16",
+    "@babel/eslint-parser": "^7.12.16",
+    "@vue/cli-plugin-babel": "~5.0.0",
+    "@vue/cli-plugin-eslint": "~5.0.0",
+    "@vue/cli-service": "~5.0.0",
+    "eslint": "^7.32.0",
+    "eslint-plugin-vue": "^8.0.3",
+    "process": "^0.11.10",
+    "vue-template-compiler": "^2.6.14"
+  },
+  "eslintConfig": {
+    "root": true,
+    "env": {
+      "node": true
+    },
+    "extends": [
+      "plugin:vue/essential",
+      "eslint:recommended"
+    ],
+    "parserOptions": {
+      "parser": "@babel/eslint-parser"
+    },
+    "rules": {}
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not dead"
+  ]
+}

二進制
public/favicon.ico


文件差異過大導致無法顯示
+ 313 - 0
public/h5player/h5player.min.js


+ 642 - 0
public/h5player/playctrl1/DecodeWorker.js

@@ -0,0 +1,642 @@
+/**
+ * Created by wangweijie5 on 2016/12/5.
+ */
+(function (event) {
+    const AUDIO_TYPE = 0;	// 音频
+    const VIDEO_TYPE = 1;   // 视频
+    const PRIVT_TYPE = 2;  // 私有帧
+
+    const PLAYM4_AUDIO_FRAME = 100; // 音频帧
+    const PLAYM4_VIDEO_FRAME = 101; // 视频帧
+
+    const PLAYM4_OK = 1;
+    const PLAYM4_ORDER_ERROR = 2;
+    const PLAYM4_DECODE_ERROR = 44 	// 解码失败
+    const PLAYM4_NOT_KEYFRAME = 48; 	// 非关键帧
+    const PLAYM4_NEED_MORE_DATA = 31;   // 需要更多数据才能解析
+    const PLAYM4_NEED_NEET_LOOP = 35; //丢帧需要下个循环
+    const PLAYM4_SYS_NOT_SUPPORT = 16; 	// 不支持
+
+    importScripts('Decoder.js');
+    Module.addOnPostRun(function () {
+        postMessage({ 'function': "loaded" });
+    });
+
+    var iStreamMode = 0;  // 流模式
+
+    var bOpenMode = false;
+    var bOpenStream = false;
+
+    var funGetFrameData = null;
+    var funGetAudFrameData = null;
+
+    var bWorkerPrintLog = false;//worker层log开关
+
+    var g_nPort = -1;
+    var pInputData = null;
+    var inputBufferSize = 40960;
+
+    self.JSPlayM4_RunTimeInfoCallBack = function (nPort, pstRunTimeInfo, pUser) {
+        let port = nPort;
+        let user = pUser;
+        let nRunTimeModule = Module.HEAP32[pstRunTimeInfo >> 2];
+        let nStrVersion = Module.HEAP32[pstRunTimeInfo + 4 >> 2];
+        let nFrameTimeStamp = Module.HEAP32[pstRunTimeInfo + 8 >> 2];
+        let nFrameNum = Module.HEAP32[pstRunTimeInfo + 12 >> 2];
+        let nErrorCode = Module.HEAP32[pstRunTimeInfo + 16 >> 2];
+        // console.log("nRunTimeModule:"+nRunTimeModule+",nFrameNum:"+nFrameNum+",nErrorCode:"+nErrorCode);
+        postMessage({ 'function': "RunTimeInfoCallBack", 'nRunTimeModule': nRunTimeModule, 'nStrVersion': nStrVersion, 'nFrameTimeStamp': nFrameTimeStamp, 'nFrameNum': nFrameNum, 'nErrorCode': nErrorCode });
+    }
+
+    onmessage = function (event) {
+        var eventData = event.data;
+        var res = 0;
+        switch (eventData.command) {
+            case "printLog":
+                let downloadFlag = eventData.data;
+                if (downloadFlag === true) {
+                    bWorkerPrintLog = true;
+                    res = Module._SetPrintLogFlag(g_nPort, downloadFlag);
+                }
+                else {
+                    bWorkerPrintLog = false;
+                    res = Module._SetPrintLogFlag(g_nPort, downloadFlag);
+                }
+
+                if (res !== PLAYM4_OK) {
+                    console.log("DecodeWorker.js: PlayerSDK print log failed,res" + res);
+                    postMessage({ 'function': "printLog", 'errorCode': res });
+                }
+                break;
+            case "SetPlayPosition":
+                let nFrameNumOrTime = eventData.data;
+                let enPosType = eventData.type;
+                // res = Module._SetPlayPosition(nFrameNumOrTime,enPosType);
+                // if (res !== PLAYM4_OK)
+                // {
+                //     postMessage({'function': "SetPlayPosition", 'errorCode': res});
+                //     return;
+                // }
+                // //有没有buffer需要清除
+
+                break;
+            case "SetStreamOpenMode":
+                //获取端口号
+                g_nPort = Module._GetPort();
+                //设置流打开模式
+                iStreamMode = eventData.data;
+                res = Module._SetStreamOpenMode(g_nPort, iStreamMode);
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "SetStreamOpenMode", 'errorCode': res });
+                    return;
+                }
+                bOpenMode = true;
+                break;
+
+            case "OpenStream":
+                // 接收到的数据
+                var iHeadLen = eventData.dataSize;
+                var pHead = Module._malloc(iHeadLen + 4);
+                if (pHead === null) {
+                    return;
+                }
+                var aHead = Module.HEAPU8.subarray(pHead, pHead + iHeadLen);
+                aHead.set(new Uint8Array(eventData.data));
+                res = Module._OpenStream(g_nPort, pHead, iHeadLen, eventData.bufPoolSize);
+                postMessage({ 'function': "OpenStream", 'errorCode': res });
+                if (res !== PLAYM4_OK) {
+                    //释放内存
+                    Module._free(pHead);
+                    pHead = null;
+                    return;
+                }
+                bOpenStream = true;
+                break;
+            case "Play":
+                let resP = Module._Play(g_nPort);
+                if (resP !== PLAYM4_OK) {
+                    return;
+                }
+                break;
+            case "InputData":
+                // 接收到的数据
+                var iLen = eventData.dataSize;
+                if (iLen > 0) {
+                    if (pInputData == null || iLen > inputBufferSize) {
+                        if (pInputData != null) {
+                            Module._free(pInputData);
+                            pInputData = null;
+                        }
+                        if (iLen > inputBufferSize) {
+                            inputBufferSize = iLen;
+                        }
+
+                        pInputData = Module._malloc(inputBufferSize);
+                        if (pInputData === null) {
+                            return;
+                        }
+                    }
+
+                    var inputData = new Uint8Array(eventData.data);
+                    // var aInputData = Module.HEAPU8.subarray(pInputData, pInputData + iLen);
+                    // aInputData.set(inputData);
+                    Module.writeArrayToMemory(inputData, pInputData);
+                    inputData = null;
+                    res = Module._InputData(g_nPort, pInputData, iLen);
+                    if (res !== PLAYM4_OK) {
+                        let errorCode = Module._GetLastError(g_nPort);
+                        let sourceRemain = Module._GetSourceBufferRemain(g_nPort);
+                        postMessage({ 'function': "InputData", 'errorCode': errorCode, "sourceRemain": sourceRemain });
+                    }
+                    //Module._free(pInputData);
+                    //pInputData = null;
+                } else {
+                    let sourceRemain = Module._GetSourceBufferRemain(g_nPort);
+                    if (sourceRemain == 0) {
+                        postMessage({ 'function': "InputData", 'errorCode': PLAYM4_NEED_MORE_DATA });
+                        return;
+                    }
+                }
+
+                /////////////////////
+                // if (funGetFrameData === null) {
+                //     funGetFrameData = Module.cwrap('GetFrameData', 'number');
+                // }
+
+                while (bOpenMode && bOpenStream) {
+
+                    var ret = getFrameData();
+                    // 直到获取视频帧或数据不足为止
+                    if (PLAYM4_VIDEO_FRAME === ret || PLAYM4_NEED_MORE_DATA === ret || PLAYM4_ORDER_ERROR === ret)//PLAYM4_VIDEO_FRAME === ret ||  || PLAYM4_NEED_NEET_LOOP === ret
+                    {
+                        break;
+                    }
+                }
+                break;
+
+            case "SetSecretKey":
+                var keyLen = eventData.nKeyLen;
+                var pKeyData = Module._malloc(keyLen);
+                if (pKeyData === null) {
+                    return;
+                }
+                var nKeySize = eventData.data.length
+                var bufData = stringToBytes(eventData.data);
+                var aKeyData = Module.HEAPU8.subarray(pKeyData, pKeyData + keyLen);
+                let u8array = new Uint8Array(keyLen);
+                aKeyData.set(u8array, 0);
+                aKeyData.set(new Uint8Array(bufData));
+                aKeyData = null;
+                u8array = null;
+
+                res = Module._SetSecretKey(g_nPort, eventData.nKeyType, pKeyData, keyLen);//, nKeySize
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "SetSecretKey", 'errorCode': res });
+                    Module._free(pKeyData);
+                    pKeyData = null;
+                    return;
+                }
+
+                Module._free(pKeyData);
+                pKeyData = null;
+                break;
+
+            case "GetBMP":
+                var nBMPWidth = eventData.width;
+                var nBMPHeight = eventData.height;
+                var pYUVData = eventData.data;
+                var nYUVSize = nBMPWidth * nBMPHeight * 3 / 2;
+                var oJpegCropRect = {
+                    left: eventData.left,
+                    top: eventData.top,
+                    right: eventData.right,
+                    bottom: eventData.bottom
+                };
+
+                var pDataYUV = Module._malloc(nYUVSize);
+                if (pDataYUV === null) {
+                    return;
+                }
+
+                Module.writeArrayToMemory(new Uint8Array(pYUVData, 0, nYUVSize), pDataYUV);
+
+                // 分配BMP空间
+                var nBmpSize = nBMPWidth * nBMPHeight * 4 + 60;
+                var pBmpData = Module._malloc(nBmpSize);
+                var pBmpSize = Module._malloc(4);
+                if (pBmpData === null || pBmpSize === null) {
+                    Module._free(pDataYUV);
+                    pDataYUV = null;
+
+                    if (pBmpData != null) {
+                        Module._free(pBmpData);
+                        pBmpData = null;
+                    }
+
+                    if (pBmpSize != null) {
+                        Module._free(pBmpSize);
+                        pBmpSize = null;
+                    }
+                    return;
+                }
+
+                //Module._memset(pBmpSize, nBmpSize, 4); // 防止bmp截图出现输入数据过大的错误码
+                Module.setValue(pBmpSize, nBmpSize, "i32");
+                res = Module._GetBMP(g_nPort, pDataYUV, nYUVSize, pBmpData, pBmpSize,
+                    oBMPCropRect.left, oBMPCropRect.top, oBMPCropRect.right, oBMPCropRect.bottom);
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "GetBMP", 'errorCode': res });
+                    Module._free(pDataYUV);
+                    pDataYUV = null;
+                    Module._free(pBmpData);
+                    pBmpData = null;
+                    Module._free(pBmpSize);
+                    pBmpSize = null;
+                    return;
+                }
+
+                // 获取BMP图片大小
+                var nBmpDataSize = Module.getValue(pBmpSize, "i32");
+
+                // 获取BMP图片数据
+                var aBmpData = new Uint8Array(nBmpDataSize);
+                aBmpData.set(Module.HEAPU8.subarray(pBmpData, pBmpData + nBmpDataSize));
+
+                postMessage({ 'function': "GetBMP", 'data': aBmpData, 'errorCode': res }, [aBmpData.buffer]);
+                aBmpData = null;
+                if (pDataYUV != null) {
+                    Module._free(pDataYUV);
+                    pDataYUV = null;
+                }
+                if (pBmpData != null) {
+                    Module._free(pBmpData);
+                    pBmpData = null;
+                }
+                if (pBmpSize != null) {
+                    Module._free(pBmpSize);
+                    pBmpSize = null;
+                }
+                break;
+
+            case "GetJPEG":
+                var nJpegWidth = eventData.width;
+                var nJpegHeight = eventData.height;
+                var pYUVData1 = eventData.data;
+                var nYUVSize1 = nJpegWidth * nJpegHeight * 3 / 2;
+                var oJpegCropRect = {
+                    left: eventData.left,
+                    top: eventData.top,
+                    right: eventData.right,
+                    bottom: eventData.bottom
+                };
+
+                var pDataYUV1 = Module._malloc(nYUVSize1);
+                if (pDataYUV1 === null) {
+                    return;
+                }
+
+                Module.writeArrayToMemory(new Uint8Array(pYUVData1, 0, nYUVSize1), pDataYUV1);
+
+                // 分配JPEG空间
+                var pJpegData = Module._malloc(nYUVSize1);
+                var pJpegSize = Module._malloc(4);
+                if (pJpegData === null || pJpegSize === null) {
+                    if (pJpegData != null) {
+                        Module._free(pJpegData);
+                        pJpegData = null;
+                    }
+
+                    if (pJpegSize != null) {
+                        Module._free(pJpegSize);
+                        pJpegSize = null;
+                    }
+
+                    if (pDataYUV1 != null) {
+                        Module._free(pDataYUV1);
+                        pDataYUV1 = null;
+                    }
+                    return;
+                }
+
+                Module.setValue(pJpegSize, nJpegWidth * nJpegHeight * 2, "i32");    // JPEG抓图,输入缓冲长度不小于当前帧YUV大小
+
+                res = Module._GetJPEG(g_nPort, pDataYUV1, nYUVSize1, pJpegData, pJpegSize,
+                    oJpegCropRect.left, oJpegCropRect.top, oJpegCropRect.right, oJpegCropRect.bottom);
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "GetJPEG", 'errorCode': res });
+                    if (pJpegData != null) {
+                        Module._free(pJpegData);
+                        pJpegData = null;
+                    }
+
+                    if (pJpegSize != null) {
+                        Module._free(pJpegSize);
+                        pJpegSize = null;
+                    }
+
+                    if (pDataYUV1 != null) {
+                        Module._free(pDataYUV1);
+                        pDataYUV1 = null;
+                    }
+                    return;
+                }
+
+                // 获取JPEG图片大小
+                var nJpegSize = Module.getValue(pJpegSize, "i32");
+
+                // 获取JPEG图片数据
+                var aJpegData = new Uint8Array(nJpegSize);
+                aJpegData.set(Module.HEAPU8.subarray(pJpegData, pJpegData + nJpegSize));
+
+                postMessage({ 'function': "GetJPEG", 'data': aJpegData, 'errorCode': res }, [aJpegData.buffer]);
+
+                nJpegSize = null;
+                aJpegData = null;
+
+                if (pDataYUV1 != null) {
+                    Module._free(pDataYUV1);
+                    pDataYUV1 = null;
+                }
+                if (pJpegData != null) {
+                    Module._free(pJpegData);
+                    pJpegData = null;
+                }
+                if (pJpegSize != null) {
+                    Module._free(pJpegSize);
+                    pJpegSize = null;
+                }
+                break;
+
+            case "SetDecodeFrameType":
+                var nFrameType = eventData.data;
+                res = Module._SetDecodeFrameType(g_nPort, nFrameType);
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "SetDecodeFrameType", 'errorCode': res });
+                    return;
+                }
+                break;
+            case "CloseStream":
+                //stop
+                let resS = Module._Stop(g_nPort);
+                if (resS !== PLAYM4_OK) {
+                    postMessage({ 'function': "Stop", 'errorCode': res });
+                    return;
+                }
+                //closeStream
+                res = Module._CloseStream(g_nPort);
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "CloseStream", 'errorCode': res });
+                    return;
+                }
+                //freePort
+                let resF = Module._FreePort(g_nPort);
+                if (resF !== PLAYM4_OK) {
+                    postMessage({ 'function': "FreePort", 'errorCode': res });
+                    return;
+                }
+                if (pInputData != null) {
+                    Module._free(pInputData);
+                    pInputData = null;
+                }
+                break;
+            case "PlaySound":
+                let resPS = Module._PlaySound(g_nPort);
+                if (resPS !== PLAYM4_OK) {
+                    console.log("PlaySound failed");
+                    return;
+                }
+                break;
+            case "StopSound":
+                let resSS = Module._StopSound();
+                if (resSS !== PLAYM4_OK) {
+                    console.log("StopSound failed");
+                    return;
+                }
+                break;
+            case "SetVolume":
+                let resSV = Module._SetVolume(g_nPort, eventData.volume);
+                if (resSV !== PLAYM4_OK) {
+                    console.log("Audio SetVolume failed");
+                    return;
+                }
+                break;
+            case "GetVolume":
+                let volume = Module._GetVolume();
+                if (volume > 0) {
+                    postMessage({ 'function': "GetVolume", 'volume': volume });
+                }
+                else {
+                    console.log("Audio GetVolume failed");
+                    return;
+                }
+                break;
+            case "OnlyPlaySound":
+                let resOPS = Module._OnlyPlaySound(g_nPort);
+                if (resOPS !== PLAYM4_OK) {
+                    console.log("OnlyPlaySound failed");
+                    return;
+                }
+                break;
+            case "Pause":
+                let resPa = Module._Pause(g_nPort, eventData.bPlay);
+                if (resPa !== PLAYM4_OK) {
+                    console.log("Pause failed");
+                    return;
+                }
+            case "PlayRate":
+                Module._SetPlayRate(g_nPort, eventData.playRate);
+                break;
+            case "SetIFrameDecInterval":
+                Module._SetIFrameDecInterval(g_nPort, eventData.data);
+                break;
+            case "SetLostFrameMode":
+                Module._SetLostFrameMode(g_nPort, eventData.data, 0);
+                break;
+            case "SetDemuxModel":
+                Module._SetDemuxModel(g_nPort, eventData.nIdemuxType, eventData.bTrue);
+                break;
+            case "SkipErrorData":
+                Module._SkipErrorData(g_nPort, eventData.bSkip);
+                break;
+            case "SetDecodeERC":
+                Module._SetDecodeERC(g_nPort, eventData.nLevel);
+                break;
+            case "SetANRParam":
+                Module._SetANRParam(g_nPort, eventData.nEnable, eventData.nANRLevel);
+                break;
+            case "SetResampleValue":
+                Module._SetResampleValue(g_nPort, eventData.nEnable, eventData.resampleValue);
+                break;
+            case "GetLastError":
+                let errorCode = Module._GetLastError(g_nPort);
+                postMessage({ 'function': "GetLastError", 'errorCode': errorCode });
+                break;
+            case "SetGlobalBaseTime":
+                Module._SetGlobalBaseTime(g_nPort, eventData.year, eventData.month, eventData.day, eventData.hour, eventData.min, eventData.sec, eventData.ms);
+                break;
+            case "SetRunTimeInfoCB":
+                Module._SetRunTimeInfoCallBackEx(g_nPort, eventData.nModuleType, 0);
+                break;
+            default:
+                break;
+        }
+    };
+
+    function getOSDTime(oFrameInfo) {
+        var iYear = oFrameInfo.year;
+        var iMonth = oFrameInfo.month;
+        var iDay = oFrameInfo.day;
+        var iHour = oFrameInfo.hour;
+        var iMinute = oFrameInfo.minute;
+        var iSecond = oFrameInfo.second;
+
+        if (iMonth < 10) {
+            iMonth = "0" + iMonth;
+        }
+        if (iDay < 10) {
+            iDay = "0" + iDay;
+        }
+        if (iHour < 10) {
+            iHour = "0" + iHour;
+        }
+        if (iMinute < 10) {
+            iMinute = "0" + iMinute;
+        }
+        if (iSecond < 10) {
+            iSecond = "0" + iSecond;
+        }
+
+        return iYear + "-" + iMonth + "-" + iDay + " " + iHour + ":" + iMinute + ":" + iSecond;
+    }
+    // 获取帧数据
+    function getFrameData() {
+        // function getFrameData() {
+        // 获取帧数据
+        var res = Module._GetFrameData();
+        //var res = fun();
+        if (res === PLAYM4_OK) {
+            var oFrameInfo = Module._GetFrameInfo();
+            switch (oFrameInfo.frameType) {
+                case AUDIO_TYPE:
+                    var iSize = oFrameInfo.frameSize;
+                    if (0 === iSize) {
+                        return -1;
+                    }
+                    var pPCM = Module._GetFrameBuffer();
+                    // var audioBuf = new ArrayBuffer(iSize);
+                    var aPCMData = new Uint8Array(iSize);
+                    aPCMData.set(Module.HEAPU8.subarray(pPCM, pPCM + iSize));
+                    if (bWorkerPrintLog) {
+                        console.log("<<<Worker: audio media Info: nSise:" + oFrameInfo.frameSize + ",nSampleRate:" + oFrameInfo.samplesPerSec + ',channel:' + oFrameInfo.channels + ',bitsPerSample:' + oFrameInfo.bitsPerSample);
+                    }
+                    postMessage({
+                        'function': "GetFrameData", 'type': "audioType", 'data': aPCMData.buffer,
+                        'frameInfo': oFrameInfo, 'errorCode': res
+                    }, [aPCMData.buffer]);
+
+                    oFrameInfo = null;
+                    pPCM = null;
+                    aPCMData = null;
+                    return PLAYM4_AUDIO_FRAME;
+
+                case VIDEO_TYPE:
+                    var szOSDTime = getOSDTime(oFrameInfo);
+
+                    var iWidth = oFrameInfo.width;
+                    var iHeight = oFrameInfo.height;
+
+                    var iYUVSize = iWidth * iHeight * 3 / 2;
+                    if (0 === iYUVSize) {
+                        return -1;
+                    }
+
+                    var pYUV = Module._GetFrameBuffer();
+
+                    // 图像数据渲染后压回,若从主码流切到子码流,存在数组大小与图像大小不匹配现象
+                    var aYUVData = new Uint8Array(iYUVSize);
+                    aYUVData.set(Module.HEAPU8.subarray(pYUV, pYUV + iYUVSize));
+                    if (bWorkerPrintLog) {
+                        console.log("<<<Worker: video media Info: Width:" + oFrameInfo.width + ",Height:" + oFrameInfo.height + ",timeStamp:" + oFrameInfo.timeStamp);
+                    }
+
+                    postMessage({
+                        'function': "GetFrameData", 'type': "videoType", 'data': aYUVData.buffer,
+                        'dataLen': aYUVData.length, 'osd': szOSDTime, 'frameInfo': oFrameInfo, 'errorCode': res
+                    }, [aYUVData.buffer]);
+
+                    oFrameInfo = null;
+                    pYUV = null;
+                    aYUVData = null;
+                    return PLAYM4_VIDEO_FRAME;
+
+                case PRIVT_TYPE:
+                    postMessage({
+                        'function': "GetFrameData", 'type': "", 'data': null,
+                        'dataLen': -1, 'osd': 0, 'frameInfo': null, 'errorCode': PLAYM4_SYS_NOT_SUPPORT
+                    });
+                    return PLAYM4_SYS_NOT_SUPPORT;
+
+                default:
+                    postMessage({
+                        'function': "GetFrameData", 'type': "", 'data': null,
+                        'dataLen': -1, 'osd': 0, 'frameInfo': null, 'errorCode': PLAYM4_SYS_NOT_SUPPORT
+                    });
+                    return PLAYM4_SYS_NOT_SUPPORT;
+            }
+        }
+        else {
+            let errorCode = Module._GetLastError(g_nPort);
+            //解码失败返回裸数据
+            if (PLAYM4_DECODE_ERROR === errorCode) {
+                var rawInfo = Module._GetRawDataInfo();
+                var pRawData = Module._GetRawDataBuffer();
+                var aRawData = new Uint8Array(rawInfo.isize);
+                aRawData.set(Module.HEAPU8.subarray(pRawData, pRawData + rawInfo.isize));
+                postMessage({
+                    'function': "GetRawData", 'type': "", 'data': aRawData.buffer,
+                    'rawDataLen': rawInfo.isize, 'osd': 0, 'frameInfo': null, 'errorCode': errorCode
+                });
+                rawInfo = null;
+                pRawData = null;
+                aRawData = null;
+            }
+            //需要更多数据
+            if (PLAYM4_NEED_MORE_DATA === errorCode || PLAYM4_SYS_NOT_SUPPORT === errorCode || PLAYM4_NEED_NEET_LOOP === errorCode) {
+                postMessage({
+                    'function': "GetFrameData", 'type': "", 'data': null,
+                    'dataLen': -1, 'osd': 0, 'frameInfo': null, 'errorCode': errorCode
+                });
+            }
+            return errorCode;
+        }
+    }
+
+    // 开始计算时间
+    function startTime() {
+        return new Date().getTime();
+    }
+
+    // 结束计算时间
+    function endTime() {
+        return new Date().getTime();
+    }
+
+    // 字母字符串转byte数组
+    function stringToBytes(str) {
+        var ch, st, re = [];
+        for (var i = 0; i < str.length; i++) {
+            ch = str.charCodeAt(i);  // get char
+            st = [];                 // set up "stack"
+            do {
+                st.push(ch & 0xFF);  // push byte to stack
+                ch = ch >> 8;          // shift value down by 1 byte
+            }
+            while (ch);
+            // add stack contents to result
+            // done because chars have "wrong" endianness
+            re = re.concat(st.reverse());
+        }
+        // return an array of bytes
+        return re;
+    }
+})();

文件差異過大導致無法顯示
+ 1 - 0
public/h5player/playctrl1/Decoder.js


+ 642 - 0
public/h5player/playctrl1simd/DecodeWorker.js

@@ -0,0 +1,642 @@
+/**
+ * Created by wangweijie5 on 2016/12/5.
+ */
+(function (event) {
+    const AUDIO_TYPE = 0;	// 音频
+    const VIDEO_TYPE = 1;   // 视频
+    const PRIVT_TYPE = 2;  // 私有帧
+
+    const PLAYM4_AUDIO_FRAME = 100; // 音频帧
+    const PLAYM4_VIDEO_FRAME = 101; // 视频帧
+
+    const PLAYM4_OK = 1;
+    const PLAYM4_ORDER_ERROR = 2;
+    const PLAYM4_DECODE_ERROR = 44 	// 解码失败
+    const PLAYM4_NOT_KEYFRAME = 48; 	// 非关键帧
+    const PLAYM4_NEED_MORE_DATA = 31;   // 需要更多数据才能解析
+    const PLAYM4_NEED_NEET_LOOP = 35; //丢帧需要下个循环
+    const PLAYM4_SYS_NOT_SUPPORT = 16; 	// 不支持
+
+    importScripts('Decoder.js');
+    Module.addOnPostRun(function () {
+        postMessage({ 'function': "loaded" });
+    });
+
+    var iStreamMode = 0;  // 流模式
+
+    var bOpenMode = false;
+    var bOpenStream = false;
+
+    var funGetFrameData = null;
+    var funGetAudFrameData = null;
+
+    var bWorkerPrintLog = false;//worker层log开关
+
+    var g_nPort = -1;
+    var pInputData = null;
+    var inputBufferSize = 40960;
+
+    self.JSPlayM4_RunTimeInfoCallBack = function (nPort, pstRunTimeInfo, pUser) {
+        let port = nPort;
+        let user = pUser;
+        let nRunTimeModule = Module.HEAP32[pstRunTimeInfo >> 2];
+        let nStrVersion = Module.HEAP32[pstRunTimeInfo + 4 >> 2];
+        let nFrameTimeStamp = Module.HEAP32[pstRunTimeInfo + 8 >> 2];
+        let nFrameNum = Module.HEAP32[pstRunTimeInfo + 12 >> 2];
+        let nErrorCode = Module.HEAP32[pstRunTimeInfo + 16 >> 2];
+        // console.log("nRunTimeModule:"+nRunTimeModule+",nFrameNum:"+nFrameNum+",nErrorCode:"+nErrorCode);
+        postMessage({ 'function': "RunTimeInfoCallBack", 'nRunTimeModule': nRunTimeModule, 'nStrVersion': nStrVersion, 'nFrameTimeStamp': nFrameTimeStamp, 'nFrameNum': nFrameNum, 'nErrorCode': nErrorCode });
+    }
+
+    onmessage = function (event) {
+        var eventData = event.data;
+        var res = 0;
+        switch (eventData.command) {
+            case "printLog":
+                let downloadFlag = eventData.data;
+                if (downloadFlag === true) {
+                    bWorkerPrintLog = true;
+                    res = Module._SetPrintLogFlag(g_nPort, downloadFlag);
+                }
+                else {
+                    bWorkerPrintLog = false;
+                    res = Module._SetPrintLogFlag(g_nPort, downloadFlag);
+                }
+
+                if (res !== PLAYM4_OK) {
+                    console.log("DecodeWorker.js: PlayerSDK print log failed,res" + res);
+                    postMessage({ 'function': "printLog", 'errorCode': res });
+                }
+                break;
+            case "SetPlayPosition":
+                let nFrameNumOrTime = eventData.data;
+                let enPosType = eventData.type;
+                // res = Module._SetPlayPosition(nFrameNumOrTime,enPosType);
+                // if (res !== PLAYM4_OK)
+                // {
+                //     postMessage({'function': "SetPlayPosition", 'errorCode': res});
+                //     return;
+                // }
+                // //有没有buffer需要清除
+
+                break;
+            case "SetStreamOpenMode":
+                //获取端口号
+                g_nPort = Module._GetPort();
+                //设置流打开模式
+                iStreamMode = eventData.data;
+                res = Module._SetStreamOpenMode(g_nPort, iStreamMode);
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "SetStreamOpenMode", 'errorCode': res });
+                    return;
+                }
+                bOpenMode = true;
+                break;
+
+            case "OpenStream":
+                // 接收到的数据
+                var iHeadLen = eventData.dataSize;
+                var pHead = Module._malloc(iHeadLen + 4);
+                if (pHead === null) {
+                    return;
+                }
+                var aHead = Module.HEAPU8.subarray(pHead, pHead + iHeadLen);
+                aHead.set(new Uint8Array(eventData.data));
+                res = Module._OpenStream(g_nPort, pHead, iHeadLen, eventData.bufPoolSize);
+                postMessage({ 'function': "OpenStream", 'errorCode': res });
+                if (res !== PLAYM4_OK) {
+                    //释放内存
+                    Module._free(pHead);
+                    pHead = null;
+                    return;
+                }
+                bOpenStream = true;
+                break;
+            case "Play":
+                let resP = Module._Play(g_nPort);
+                if (resP !== PLAYM4_OK) {
+                    return;
+                }
+                break;
+            case "InputData":
+                // 接收到的数据
+                var iLen = eventData.dataSize;
+                if (iLen > 0) {
+                    if (pInputData == null || iLen > inputBufferSize) {
+                        if (pInputData != null) {
+                            Module._free(pInputData);
+                            pInputData = null;
+                        }
+                        if (iLen > inputBufferSize) {
+                            inputBufferSize = iLen;
+                        }
+
+                        pInputData = Module._malloc(inputBufferSize);
+                        if (pInputData === null) {
+                            return;
+                        }
+                    }
+
+                    var inputData = new Uint8Array(eventData.data);
+                    // var aInputData = Module.HEAPU8.subarray(pInputData, pInputData + iLen);
+                    // aInputData.set(inputData);
+                    Module.writeArrayToMemory(inputData, pInputData);
+                    inputData = null;
+                    res = Module._InputData(g_nPort, pInputData, iLen);
+                    if (res !== PLAYM4_OK) {
+                        let errorCode = Module._GetLastError(g_nPort);
+                        let sourceRemain = Module._GetSourceBufferRemain(g_nPort);
+                        postMessage({ 'function': "InputData", 'errorCode': errorCode, "sourceRemain": sourceRemain });
+                    }
+                    //Module._free(pInputData);
+                    //pInputData = null;
+                } else {
+                    let sourceRemain = Module._GetSourceBufferRemain(g_nPort);
+                    if (sourceRemain == 0) {
+                        postMessage({ 'function': "InputData", 'errorCode': PLAYM4_NEED_MORE_DATA });
+                        return;
+                    }
+                }
+
+                /////////////////////
+                // if (funGetFrameData === null) {
+                //     funGetFrameData = Module.cwrap('GetFrameData', 'number');
+                // }
+
+                while (bOpenMode && bOpenStream) {
+
+                    var ret = getFrameData();
+                    // 直到获取视频帧或数据不足为止
+                    if (PLAYM4_VIDEO_FRAME === ret || PLAYM4_NEED_MORE_DATA === ret || PLAYM4_ORDER_ERROR === ret)//PLAYM4_VIDEO_FRAME === ret ||  || PLAYM4_NEED_NEET_LOOP === ret
+                    {
+                        break;
+                    }
+                }
+                break;
+
+            case "SetSecretKey":
+                var keyLen = eventData.nKeyLen;
+                var pKeyData = Module._malloc(keyLen);
+                if (pKeyData === null) {
+                    return;
+                }
+                var nKeySize = eventData.data.length
+                var bufData = stringToBytes(eventData.data);
+                var aKeyData = Module.HEAPU8.subarray(pKeyData, pKeyData + keyLen);
+                let u8array = new Uint8Array(keyLen);
+                aKeyData.set(u8array, 0);
+                aKeyData.set(new Uint8Array(bufData));
+                aKeyData = null;
+                u8array = null;
+
+                res = Module._SetSecretKey(g_nPort, eventData.nKeyType, pKeyData, keyLen);//, nKeySize
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "SetSecretKey", 'errorCode': res });
+                    Module._free(pKeyData);
+                    pKeyData = null;
+                    return;
+                }
+
+                Module._free(pKeyData);
+                pKeyData = null;
+                break;
+
+            case "GetBMP":
+                var nBMPWidth = eventData.width;
+                var nBMPHeight = eventData.height;
+                var pYUVData = eventData.data;
+                var nYUVSize = nBMPWidth * nBMPHeight * 3 / 2;
+                var oJpegCropRect = {
+                    left: eventData.left,
+                    top: eventData.top,
+                    right: eventData.right,
+                    bottom: eventData.bottom
+                };
+
+                var pDataYUV = Module._malloc(nYUVSize);
+                if (pDataYUV === null) {
+                    return;
+                }
+
+                Module.writeArrayToMemory(new Uint8Array(pYUVData, 0, nYUVSize), pDataYUV);
+
+                // 分配BMP空间
+                var nBmpSize = nBMPWidth * nBMPHeight * 4 + 60;
+                var pBmpData = Module._malloc(nBmpSize);
+                var pBmpSize = Module._malloc(4);
+                if (pBmpData === null || pBmpSize === null) {
+                    Module._free(pDataYUV);
+                    pDataYUV = null;
+
+                    if (pBmpData != null) {
+                        Module._free(pBmpData);
+                        pBmpData = null;
+                    }
+
+                    if (pBmpSize != null) {
+                        Module._free(pBmpSize);
+                        pBmpSize = null;
+                    }
+                    return;
+                }
+
+                //Module._memset(pBmpSize, nBmpSize, 4); // 防止bmp截图出现输入数据过大的错误码
+                Module.setValue(pBmpSize, nBmpSize, "i32");
+                res = Module._GetBMP(g_nPort, pDataYUV, nYUVSize, pBmpData, pBmpSize,
+                    oBMPCropRect.left, oBMPCropRect.top, oBMPCropRect.right, oBMPCropRect.bottom);
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "GetBMP", 'errorCode': res });
+                    Module._free(pDataYUV);
+                    pDataYUV = null;
+                    Module._free(pBmpData);
+                    pBmpData = null;
+                    Module._free(pBmpSize);
+                    pBmpSize = null;
+                    return;
+                }
+
+                // 获取BMP图片大小
+                var nBmpDataSize = Module.getValue(pBmpSize, "i32");
+
+                // 获取BMP图片数据
+                var aBmpData = new Uint8Array(nBmpDataSize);
+                aBmpData.set(Module.HEAPU8.subarray(pBmpData, pBmpData + nBmpDataSize));
+
+                postMessage({ 'function': "GetBMP", 'data': aBmpData, 'errorCode': res }, [aBmpData.buffer]);
+                aBmpData = null;
+                if (pDataYUV != null) {
+                    Module._free(pDataYUV);
+                    pDataYUV = null;
+                }
+                if (pBmpData != null) {
+                    Module._free(pBmpData);
+                    pBmpData = null;
+                }
+                if (pBmpSize != null) {
+                    Module._free(pBmpSize);
+                    pBmpSize = null;
+                }
+                break;
+
+            case "GetJPEG":
+                var nJpegWidth = eventData.width;
+                var nJpegHeight = eventData.height;
+                var pYUVData1 = eventData.data;
+                var nYUVSize1 = nJpegWidth * nJpegHeight * 3 / 2;
+                var oJpegCropRect = {
+                    left: eventData.left,
+                    top: eventData.top,
+                    right: eventData.right,
+                    bottom: eventData.bottom
+                };
+
+                var pDataYUV1 = Module._malloc(nYUVSize1);
+                if (pDataYUV1 === null) {
+                    return;
+                }
+
+                Module.writeArrayToMemory(new Uint8Array(pYUVData1, 0, nYUVSize1), pDataYUV1);
+
+                // 分配JPEG空间
+                var pJpegData = Module._malloc(nYUVSize1);
+                var pJpegSize = Module._malloc(4);
+                if (pJpegData === null || pJpegSize === null) {
+                    if (pJpegData != null) {
+                        Module._free(pJpegData);
+                        pJpegData = null;
+                    }
+
+                    if (pJpegSize != null) {
+                        Module._free(pJpegSize);
+                        pJpegSize = null;
+                    }
+
+                    if (pDataYUV1 != null) {
+                        Module._free(pDataYUV1);
+                        pDataYUV1 = null;
+                    }
+                    return;
+                }
+
+                Module.setValue(pJpegSize, nJpegWidth * nJpegHeight * 2, "i32");    // JPEG抓图,输入缓冲长度不小于当前帧YUV大小
+
+                res = Module._GetJPEG(g_nPort, pDataYUV1, nYUVSize1, pJpegData, pJpegSize,
+                    oJpegCropRect.left, oJpegCropRect.top, oJpegCropRect.right, oJpegCropRect.bottom);
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "GetJPEG", 'errorCode': res });
+                    if (pJpegData != null) {
+                        Module._free(pJpegData);
+                        pJpegData = null;
+                    }
+
+                    if (pJpegSize != null) {
+                        Module._free(pJpegSize);
+                        pJpegSize = null;
+                    }
+
+                    if (pDataYUV1 != null) {
+                        Module._free(pDataYUV1);
+                        pDataYUV1 = null;
+                    }
+                    return;
+                }
+
+                // 获取JPEG图片大小
+                var nJpegSize = Module.getValue(pJpegSize, "i32");
+
+                // 获取JPEG图片数据
+                var aJpegData = new Uint8Array(nJpegSize);
+                aJpegData.set(Module.HEAPU8.subarray(pJpegData, pJpegData + nJpegSize));
+
+                postMessage({ 'function': "GetJPEG", 'data': aJpegData, 'errorCode': res }, [aJpegData.buffer]);
+
+                nJpegSize = null;
+                aJpegData = null;
+
+                if (pDataYUV1 != null) {
+                    Module._free(pDataYUV1);
+                    pDataYUV1 = null;
+                }
+                if (pJpegData != null) {
+                    Module._free(pJpegData);
+                    pJpegData = null;
+                }
+                if (pJpegSize != null) {
+                    Module._free(pJpegSize);
+                    pJpegSize = null;
+                }
+                break;
+
+            case "SetDecodeFrameType":
+                var nFrameType = eventData.data;
+                res = Module._SetDecodeFrameType(g_nPort, nFrameType);
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "SetDecodeFrameType", 'errorCode': res });
+                    return;
+                }
+                break;
+            case "CloseStream":
+                //stop
+                let resS = Module._Stop(g_nPort);
+                if (resS !== PLAYM4_OK) {
+                    postMessage({ 'function': "Stop", 'errorCode': res });
+                    return;
+                }
+                //closeStream
+                res = Module._CloseStream(g_nPort);
+                if (res !== PLAYM4_OK) {
+                    postMessage({ 'function': "CloseStream", 'errorCode': res });
+                    return;
+                }
+                //freePort
+                let resF = Module._FreePort(g_nPort);
+                if (resF !== PLAYM4_OK) {
+                    postMessage({ 'function': "FreePort", 'errorCode': res });
+                    return;
+                }
+                if (pInputData != null) {
+                    Module._free(pInputData);
+                    pInputData = null;
+                }
+                break;
+            case "PlaySound":
+                let resPS = Module._PlaySound(g_nPort);
+                if (resPS !== PLAYM4_OK) {
+                    console.log("PlaySound failed");
+                    return;
+                }
+                break;
+            case "StopSound":
+                let resSS = Module._StopSound();
+                if (resSS !== PLAYM4_OK) {
+                    console.log("StopSound failed");
+                    return;
+                }
+                break;
+            case "SetVolume":
+                let resSV = Module._SetVolume(g_nPort, eventData.volume);
+                if (resSV !== PLAYM4_OK) {
+                    console.log("Audio SetVolume failed");
+                    return;
+                }
+                break;
+            case "GetVolume":
+                let volume = Module._GetVolume();
+                if (volume > 0) {
+                    postMessage({ 'function': "GetVolume", 'volume': volume });
+                }
+                else {
+                    console.log("Audio GetVolume failed");
+                    return;
+                }
+                break;
+            case "OnlyPlaySound":
+                let resOPS = Module._OnlyPlaySound(g_nPort);
+                if (resOPS !== PLAYM4_OK) {
+                    console.log("OnlyPlaySound failed");
+                    return;
+                }
+                break;
+            case "Pause":
+                let resPa = Module._Pause(g_nPort, eventData.bPlay);
+                if (resPa !== PLAYM4_OK) {
+                    console.log("Pause failed");
+                    return;
+                }
+            case "PlayRate":
+                Module._SetPlayRate(g_nPort, eventData.playRate);
+                break;
+            case "SetIFrameDecInterval":
+                Module._SetIFrameDecInterval(g_nPort, eventData.data);
+                break;
+            case "SetLostFrameMode":
+                Module._SetLostFrameMode(g_nPort, eventData.data, 0);
+                break;
+            case "SetDemuxModel":
+                Module._SetDemuxModel(g_nPort, eventData.nIdemuxType, eventData.bTrue);
+                break;
+            case "SkipErrorData":
+                Module._SkipErrorData(g_nPort, eventData.bSkip);
+                break;
+            case "SetDecodeERC":
+                Module._SetDecodeERC(g_nPort, eventData.nLevel);
+                break;
+            case "SetANRParam":
+                Module._SetANRParam(g_nPort, eventData.nEnable, eventData.nANRLevel);
+                break;
+            case "SetResampleValue":
+                Module._SetResampleValue(g_nPort, eventData.nEnable, eventData.resampleValue);
+                break;
+            case "GetLastError":
+                let errorCode = Module._GetLastError(g_nPort);
+                postMessage({ 'function': "GetLastError", 'errorCode': errorCode });
+                break;
+            case "SetGlobalBaseTime":
+                Module._SetGlobalBaseTime(g_nPort, eventData.year, eventData.month, eventData.day, eventData.hour, eventData.min, eventData.sec, eventData.ms);
+                break;
+            case "SetRunTimeInfoCB":
+                Module._SetRunTimeInfoCallBackEx(g_nPort, eventData.nModuleType, 0);
+                break;
+            default:
+                break;
+        }
+    };
+
+    function getOSDTime(oFrameInfo) {
+        var iYear = oFrameInfo.year;
+        var iMonth = oFrameInfo.month;
+        var iDay = oFrameInfo.day;
+        var iHour = oFrameInfo.hour;
+        var iMinute = oFrameInfo.minute;
+        var iSecond = oFrameInfo.second;
+
+        if (iMonth < 10) {
+            iMonth = "0" + iMonth;
+        }
+        if (iDay < 10) {
+            iDay = "0" + iDay;
+        }
+        if (iHour < 10) {
+            iHour = "0" + iHour;
+        }
+        if (iMinute < 10) {
+            iMinute = "0" + iMinute;
+        }
+        if (iSecond < 10) {
+            iSecond = "0" + iSecond;
+        }
+
+        return iYear + "-" + iMonth + "-" + iDay + " " + iHour + ":" + iMinute + ":" + iSecond;
+    }
+    // 获取帧数据
+    function getFrameData() {
+        // function getFrameData() {
+        // 获取帧数据
+        var res = Module._GetFrameData();
+        //var res = fun();
+        if (res === PLAYM4_OK) {
+            var oFrameInfo = Module._GetFrameInfo();
+            switch (oFrameInfo.frameType) {
+                case AUDIO_TYPE:
+                    var iSize = oFrameInfo.frameSize;
+                    if (0 === iSize) {
+                        return -1;
+                    }
+                    var pPCM = Module._GetFrameBuffer();
+                    // var audioBuf = new ArrayBuffer(iSize);
+                    var aPCMData = new Uint8Array(iSize);
+                    aPCMData.set(Module.HEAPU8.subarray(pPCM, pPCM + iSize));
+                    if (bWorkerPrintLog) {
+                        console.log("<<<Worker: audio media Info: nSise:" + oFrameInfo.frameSize + ",nSampleRate:" + oFrameInfo.samplesPerSec + ',channel:' + oFrameInfo.channels + ',bitsPerSample:' + oFrameInfo.bitsPerSample);
+                    }
+                    postMessage({
+                        'function': "GetFrameData", 'type': "audioType", 'data': aPCMData.buffer,
+                        'frameInfo': oFrameInfo, 'errorCode': res
+                    }, [aPCMData.buffer]);
+
+                    oFrameInfo = null;
+                    pPCM = null;
+                    aPCMData = null;
+                    return PLAYM4_AUDIO_FRAME;
+
+                case VIDEO_TYPE:
+                    var szOSDTime = getOSDTime(oFrameInfo);
+
+                    var iWidth = oFrameInfo.width;
+                    var iHeight = oFrameInfo.height;
+
+                    var iYUVSize = iWidth * iHeight * 3 / 2;
+                    if (0 === iYUVSize) {
+                        return -1;
+                    }
+
+                    var pYUV = Module._GetFrameBuffer();
+
+                    // 图像数据渲染后压回,若从主码流切到子码流,存在数组大小与图像大小不匹配现象
+                    var aYUVData = new Uint8Array(iYUVSize);
+                    aYUVData.set(Module.HEAPU8.subarray(pYUV, pYUV + iYUVSize));
+                    if (bWorkerPrintLog) {
+                        console.log("<<<Worker: video media Info: Width:" + oFrameInfo.width + ",Height:" + oFrameInfo.height + ",timeStamp:" + oFrameInfo.timeStamp);
+                    }
+
+                    postMessage({
+                        'function': "GetFrameData", 'type': "videoType", 'data': aYUVData.buffer,
+                        'dataLen': aYUVData.length, 'osd': szOSDTime, 'frameInfo': oFrameInfo, 'errorCode': res
+                    }, [aYUVData.buffer]);
+
+                    oFrameInfo = null;
+                    pYUV = null;
+                    aYUVData = null;
+                    return PLAYM4_VIDEO_FRAME;
+
+                case PRIVT_TYPE:
+                    postMessage({
+                        'function': "GetFrameData", 'type': "", 'data': null,
+                        'dataLen': -1, 'osd': 0, 'frameInfo': null, 'errorCode': PLAYM4_SYS_NOT_SUPPORT
+                    });
+                    return PLAYM4_SYS_NOT_SUPPORT;
+
+                default:
+                    postMessage({
+                        'function': "GetFrameData", 'type': "", 'data': null,
+                        'dataLen': -1, 'osd': 0, 'frameInfo': null, 'errorCode': PLAYM4_SYS_NOT_SUPPORT
+                    });
+                    return PLAYM4_SYS_NOT_SUPPORT;
+            }
+        }
+        else {
+            let errorCode = Module._GetLastError(g_nPort);
+            //解码失败返回裸数据
+            if (PLAYM4_DECODE_ERROR === errorCode) {
+                var rawInfo = Module._GetRawDataInfo();
+                var pRawData = Module._GetRawDataBuffer();
+                var aRawData = new Uint8Array(rawInfo.isize);
+                aRawData.set(Module.HEAPU8.subarray(pRawData, pRawData + rawInfo.isize));
+                postMessage({
+                    'function': "GetRawData", 'type': "", 'data': aRawData.buffer,
+                    'rawDataLen': rawInfo.isize, 'osd': 0, 'frameInfo': null, 'errorCode': errorCode
+                });
+                rawInfo = null;
+                pRawData = null;
+                aRawData = null;
+            }
+            //需要更多数据
+            if (PLAYM4_NEED_MORE_DATA === errorCode || PLAYM4_SYS_NOT_SUPPORT === errorCode || PLAYM4_NEED_NEET_LOOP === errorCode) {
+                postMessage({
+                    'function': "GetFrameData", 'type': "", 'data': null,
+                    'dataLen': -1, 'osd': 0, 'frameInfo': null, 'errorCode': errorCode
+                });
+            }
+            return errorCode;
+        }
+    }
+
+    // 开始计算时间
+    function startTime() {
+        return new Date().getTime();
+    }
+
+    // 结束计算时间
+    function endTime() {
+        return new Date().getTime();
+    }
+
+    // 字母字符串转byte数组
+    function stringToBytes(str) {
+        var ch, st, re = [];
+        for (var i = 0; i < str.length; i++) {
+            ch = str.charCodeAt(i);  // get char
+            st = [];                 // set up "stack"
+            do {
+                st.push(ch & 0xFF);  // push byte to stack
+                ch = ch >> 8;          // shift value down by 1 byte
+            }
+            while (ch);
+            // add stack contents to result
+            // done because chars have "wrong" endianness
+            re = re.concat(st.reverse());
+        }
+        // return an array of bytes
+        return re;
+    }
+})();

文件差異過大導致無法顯示
+ 1 - 0
public/h5player/playctrl1simd/Decoder.js


文件差異過大導致無法顯示
+ 21 - 0
public/h5player/playctrl2/Decoder.js


二進制
public/h5player/playctrl2/Decoder.wasm


文件差異過大導致無法顯示
+ 1 - 0
public/h5player/playctrl2/Decoder.worker.js


文件差異過大導致無法顯示
+ 21 - 0
public/h5player/playctrl3/Decoder.js


二進制
public/h5player/playctrl3/Decoder.wasm


文件差異過大導致無法顯示
+ 1 - 0
public/h5player/playctrl3/Decoder.worker.js


文件差異過大導致無法顯示
+ 8 - 0
public/h5player/static/css/antd.min.css


+ 587 - 0
public/h5player/static/css/bootstrap-theme.css

@@ -0,0 +1,587 @@
+/*!
+ * Bootstrap v3.4.1 (https://getbootstrap.com/)
+ * Copyright 2011-2019 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+.btn-default,
+.btn-primary,
+.btn-success,
+.btn-info,
+.btn-warning,
+.btn-danger {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+.btn-default:active,
+.btn-primary:active,
+.btn-success:active,
+.btn-info:active,
+.btn-warning:active,
+.btn-danger:active,
+.btn-default.active,
+.btn-primary.active,
+.btn-success.active,
+.btn-info.active,
+.btn-warning.active,
+.btn-danger.active {
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+.btn-default.disabled,
+.btn-primary.disabled,
+.btn-success.disabled,
+.btn-info.disabled,
+.btn-warning.disabled,
+.btn-danger.disabled,
+.btn-default[disabled],
+.btn-primary[disabled],
+.btn-success[disabled],
+.btn-info[disabled],
+.btn-warning[disabled],
+.btn-danger[disabled],
+fieldset[disabled] .btn-default,
+fieldset[disabled] .btn-primary,
+fieldset[disabled] .btn-success,
+fieldset[disabled] .btn-info,
+fieldset[disabled] .btn-warning,
+fieldset[disabled] .btn-danger {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.btn-default .badge,
+.btn-primary .badge,
+.btn-success .badge,
+.btn-info .badge,
+.btn-warning .badge,
+.btn-danger .badge {
+  text-shadow: none;
+}
+.btn:active,
+.btn.active {
+  background-image: none;
+}
+.btn-default {
+  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+  background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
+  background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #dbdbdb;
+  text-shadow: 0 1px 0 #fff;
+  border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus {
+  background-color: #e0e0e0;
+  background-position: 0 -15px;
+}
+.btn-default:active,
+.btn-default.active {
+  background-color: #e0e0e0;
+  border-color: #dbdbdb;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+  background-color: #e0e0e0;
+  background-image: none;
+}
+.btn-primary {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
+  background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
+  background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #245580;
+}
+.btn-primary:hover,
+.btn-primary:focus {
+  background-color: #265a88;
+  background-position: 0 -15px;
+}
+.btn-primary:active,
+.btn-primary.active {
+  background-color: #265a88;
+  border-color: #245580;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+  background-color: #265a88;
+  background-image: none;
+}
+.btn-success {
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
+  background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
+  background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #3e8f3e;
+}
+.btn-success:hover,
+.btn-success:focus {
+  background-color: #419641;
+  background-position: 0 -15px;
+}
+.btn-success:active,
+.btn-success.active {
+  background-color: #419641;
+  border-color: #3e8f3e;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+  background-color: #419641;
+  background-image: none;
+}
+.btn-info {
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+  background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
+  background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #28a4c9;
+}
+.btn-info:hover,
+.btn-info:focus {
+  background-color: #2aabd2;
+  background-position: 0 -15px;
+}
+.btn-info:active,
+.btn-info.active {
+  background-color: #2aabd2;
+  border-color: #28a4c9;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+  background-color: #2aabd2;
+  background-image: none;
+}
+.btn-warning {
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+  background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
+  background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #e38d13;
+}
+.btn-warning:hover,
+.btn-warning:focus {
+  background-color: #eb9316;
+  background-position: 0 -15px;
+}
+.btn-warning:active,
+.btn-warning.active {
+  background-color: #eb9316;
+  border-color: #e38d13;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+  background-color: #eb9316;
+  background-image: none;
+}
+.btn-danger {
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+  background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
+  background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #b92c28;
+}
+.btn-danger:hover,
+.btn-danger:focus {
+  background-color: #c12e2a;
+  background-position: 0 -15px;
+}
+.btn-danger:active,
+.btn-danger.active {
+  background-color: #c12e2a;
+  border-color: #b92c28;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+  background-color: #c12e2a;
+  background-image: none;
+}
+.thumbnail,
+.img-thumbnail {
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+  background-repeat: repeat-x;
+  background-color: #e8e8e8;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+  background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+  background-repeat: repeat-x;
+  background-color: #2e6da4;
+}
+.navbar-default {
+  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
+  background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));
+  background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .active > a {
+  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+  background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
+  background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
+  background-repeat: repeat-x;
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
+}
+.navbar-brand,
+.navbar-nav > li > a {
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
+}
+.navbar-inverse {
+  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
+  background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
+  background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  border-radius: 4px;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .active > a {
+  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+  background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
+  background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
+  background-repeat: repeat-x;
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
+  box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
+}
+.navbar-inverse .navbar-brand,
+.navbar-inverse .navbar-nav > li > a {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  border-radius: 0;
+}
+@media (max-width: 767px) {
+  .navbar .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #fff;
+    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+    background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+    background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+    background-repeat: repeat-x;
+  }
+}
+.alert {
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+.alert-success {
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+  background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
+  background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #b2dba1;
+}
+.alert-info {
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+  background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
+  background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #9acfea;
+}
+.alert-warning {
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+  background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
+  background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #f5e79e;
+}
+.alert-danger {
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+  background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
+  background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #dca7a7;
+}
+.progress {
+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+  background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
+  background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
+  background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
+  background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-success {
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+  background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
+  background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-info {
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+  background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
+  background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-warning {
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+  background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
+  background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-danger {
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+  background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
+  background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-striped {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.list-group {
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  text-shadow: 0 -1px 0 #286090;
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+  background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
+  background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #2b669a;
+}
+.list-group-item.active .badge,
+.list-group-item.active:hover .badge,
+.list-group-item.active:focus .badge {
+  text-shadow: none;
+}
+.panel {
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+.panel-default > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-primary > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+  background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-success > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+  background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
+  background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-info > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+  background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
+  background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-warning > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+  background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
+  background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-danger > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+  background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
+  background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
+  background-repeat: repeat-x;
+}
+.well {
+  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+  background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
+  background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #dcdcdc;
+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
+  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
+}
+/*# sourceMappingURL=bootstrap-theme.css.map */

文件差異過大導致無法顯示
+ 1 - 0
public/h5player/static/css/bootstrap-theme.css.map


文件差異過大導致無法顯示
+ 6 - 0
public/h5player/static/css/bootstrap-theme.min.css


文件差異過大導致無法顯示
+ 1 - 0
public/h5player/static/css/bootstrap-theme.min.css.map


文件差異過大導致無法顯示
+ 6834 - 0
public/h5player/static/css/bootstrap.css


文件差異過大導致無法顯示
+ 1 - 0
public/h5player/static/css/bootstrap.css.map


文件差異過大導致無法顯示
+ 6 - 0
public/h5player/static/css/bootstrap.min.css


文件差異過大導致無法顯示
+ 1 - 0
public/h5player/static/css/bootstrap.min.css.map


二進制
public/h5player/static/fonts/glyphicons-halflings-regular.eot


文件差異過大導致無法顯示
+ 288 - 0
public/h5player/static/fonts/glyphicons-halflings-regular.svg


二進制
public/h5player/static/fonts/glyphicons-halflings-regular.ttf


二進制
public/h5player/static/fonts/glyphicons-halflings-regular.woff


二進制
public/h5player/static/fonts/glyphicons-halflings-regular.woff2


文件差異過大導致無法顯示
+ 3 - 0
public/h5player/static/js/antd-with-locales.min.js


文件差異過大導致無法顯示
+ 1 - 0
public/h5player/static/js/antd-with-locales.min.js.map


文件差異過大導致無法顯示
+ 3 - 0
public/h5player/static/js/antd.min.js


文件差異過大導致無法顯示
+ 1 - 0
public/h5player/static/js/antd.min.js.map


文件差異過大導致無法顯示
+ 2580 - 0
public/h5player/static/js/bootstrap.js


文件差異過大導致無法顯示
+ 6 - 0
public/h5player/static/js/bootstrap.min.js


文件差異過大導致無法顯示
+ 5 - 0
public/h5player/static/js/jquery-1.12.4.min.js


文件差異過大導致無法顯示
+ 4601 - 0
public/h5player/static/js/moment.js


+ 13 - 0
public/h5player/static/js/npm.js

@@ -0,0 +1,13 @@
+// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
+require('../../js/transition.js')
+require('../../js/alert.js')
+require('../../js/button.js')
+require('../../js/carousel.js')
+require('../../js/collapse.js')
+require('../../js/dropdown.js')
+require('../../js/modal.js')
+require('../../js/tooltip.js')
+require('../../js/popover.js')
+require('../../js/scrollspy.js')
+require('../../js/tab.js')
+require('../../js/affix.js')

文件差異過大導致無法顯示
+ 10 - 0
public/h5player/static/js/vconsole.min.js


文件差異過大導致無法顯示
+ 12014 - 0
public/h5player/static/js/vue.js


文件差異過大導致無法顯示
+ 6 - 0
public/h5player/static/js/vue.min.js


+ 120 - 0
public/h5player/static/js/zh-cn.js

@@ -0,0 +1,120 @@
+//! moment.js locale configuration
+//! locale : Chinese (China) [zh-cn]
+//! author : suupic : https://github.com/suupic
+//! author : Zeno Zeng : https://github.com/zenozeng
+//! author : uu109 : https://github.com/uu109
+
+import moment from '../moment';
+
+export default moment.defineLocale('zh-cn', {
+    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
+        '_'
+    ),
+    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
+        '_'
+    ),
+    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+    weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
+    weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
+    longDateFormat: {
+        LT: 'HH:mm',
+        LTS: 'HH:mm:ss',
+        L: 'YYYY/MM/DD',
+        LL: 'YYYY年M月D日',
+        LLL: 'YYYY年M月D日Ah点mm分',
+        LLLL: 'YYYY年M月D日ddddAh点mm分',
+        l: 'YYYY/M/D',
+        ll: 'YYYY年M月D日',
+        lll: 'YYYY年M月D日 HH:mm',
+        llll: 'YYYY年M月D日dddd HH:mm',
+    },
+    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+    meridiemHour: function (hour, meridiem) {
+        if (hour === 12) {
+            hour = 0;
+        }
+        if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+            return hour;
+        } else if (meridiem === '下午' || meridiem === '晚上') {
+            return hour + 12;
+        } else {
+            // '中午'
+            return hour >= 11 ? hour : hour + 12;
+        }
+    },
+    meridiem: function (hour, minute, isLower) {
+        var hm = hour * 100 + minute;
+        if (hm < 600) {
+            return '凌晨';
+        } else if (hm < 900) {
+            return '早上';
+        } else if (hm < 1130) {
+            return '上午';
+        } else if (hm < 1230) {
+            return '中午';
+        } else if (hm < 1800) {
+            return '下午';
+        } else {
+            return '晚上';
+        }
+    },
+    calendar: {
+        sameDay: '[今天]LT',
+        nextDay: '[明天]LT',
+        nextWeek: function (now) {
+            if (now.week() !== this.week()) {
+                return '[下]dddLT';
+            } else {
+                return '[本]dddLT';
+            }
+        },
+        lastDay: '[昨天]LT',
+        lastWeek: function (now) {
+            if (this.week() !== now.week()) {
+                return '[上]dddLT';
+            } else {
+                return '[本]dddLT';
+            }
+        },
+        sameElse: 'L',
+    },
+    dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
+    ordinal: function (number, period) {
+        switch (period) {
+            case 'd':
+            case 'D':
+            case 'DDD':
+                return number + '日';
+            case 'M':
+                return number + '月';
+            case 'w':
+            case 'W':
+                return number + '周';
+            default:
+                return number;
+        }
+    },
+    relativeTime: {
+        future: '%s后',
+        past: '%s前',
+        s: '几秒',
+        ss: '%d 秒',
+        m: '1 分钟',
+        mm: '%d 分钟',
+        h: '1 小时',
+        hh: '%d 小时',
+        d: '1 天',
+        dd: '%d 天',
+        w: '1 周',
+        ww: '%d 周',
+        M: '1 个月',
+        MM: '%d 个月',
+        y: '1 年',
+        yy: '%d 年',
+    },
+    week: {
+        // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+        dow: 1, // Monday is the first day of the week.
+        doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+});

文件差異過大導致無法顯示
+ 21 - 0
public/h5player/talk/AudioInterCom.js


二進制
public/h5player/talk/AudioInterCom.wasm


文件差異過大導致無法顯示
+ 21 - 0
public/h5player/talkW/AudioInterCom.js


二進制
public/h5player/talkW/AudioInterCom.wasm


文件差異過大導致無法顯示
+ 1 - 0
public/h5player/talkW/AudioInterCom.worker.js


文件差異過大導致無法顯示
+ 6525 - 0
public/h5player/transform/libSystemTransform.js


二進制
public/h5player/transform/libSystemTransform.wasm


+ 120 - 0
public/h5player/transform/systemTransform-worker.js

@@ -0,0 +1,120 @@
+importScripts('libSystemTransform.js');
+    const RECORDRTP = 0;  //录制一份未经过转封装的码流原始数据,用于定位问题
+    let dataType = 1;
+    
+    // 转封装库回调函数
+    self.STCallBack = function (fileIndex,indexLen, data, dataLen)
+    {
+        //stFrameInfo的类型见DETAIL_FRAME_INFO
+		let stFrameInfo = Module._GetDetialFrameInfo();
+        let nIsMp4Index = stFrameInfo.nIsMp4Index;
+		//console.log("FrameType is " , stFrameInfo);	
+		//console.log("nIsMp4Index is " + nIsMp4Index);
+        //debugger
+        var pData = null;
+        pData = new Uint8Array(dataLen);
+        pData.set(Module.HEAPU8.subarray(data, data + dataLen));
+        if (dataType === 1) {
+            if (pData[0] == 0x49 && pData[1] == 0x4d && pData[2] == 0x4b && pData[3] == 0x48) {//码流头丢掉
+                return;
+            }
+            postMessage({type: "outputData", buf: pData, dType: 1});
+            dataType = 2;
+        } else {
+            if (nIsMp4Index) {
+                postMessage({type: "outputData", buf: pData, dType: 6}); //6:索引类型
+            } else {
+                postMessage({type: "outputData", buf: pData, dType: 2}); //2:码流
+            }
+        }
+
+        //stFrameInfo的类型见DETAIL_FRAME_INFO
+		//let stFrameInfo = Module._GetDetialFrameInfo();
+		//let stFrameType = stFrameInfo.nFrameType;
+		//let nFrameNum = stFrameInfo.nFrameNum;
+		//let nTimeStamp = stFrameInfo.nTimeStamp;
+        //let nIsMp4Index = stFrameInfo.nIsMp4Index;
+		
+		//console.log("FrameType is " + stFrameType);	
+		//console.log("nIsMp4Index is " + nIsMp4Index);	
+        
+    }
+
+    // self.Module = { memoryInitializerRequest: loadMemInitFile(), TOTAL_MEMORY: 128*1024*1024 };
+    // importScripts('SystemTransform.js');
+
+    self.Module['onRuntimeInitialized'] = function (){
+        postMessage({type: "loaded"});
+    }
+    onmessage = function (e) {
+        var data = e.data;
+        if ("create" === data.type) {
+            if (RECORDRTP) {
+                postMessage({type: "created"});
+                postMessage({type: "outputData", buf: data.buf, dType: 1});
+            } else {
+                var iHeadLen = data.len;
+                var pHead = Module._malloc(iHeadLen);
+    
+                self.writeArrayToMemory(new Uint8Array(data.buf), pHead);
+                var iTransType = data.packType;//目标格式
+                var iRet = Module._CreatHandle(pHead, iTransType, 4096);
+                if (iRet != 0) {
+                    console.log("_CreatHandle failed!" + iRet);
+                } else {
+                    iRet = Module._SysTransRegisterDataCallBack();			
+                    if(iRet != 0)
+                    {
+                        console.log("_SysTransRegisterDataCallBack Failed:" + iRet);
+                    }
+
+                    iRet = Module._SysTransStart(null, null);
+                    if(iRet != 0)
+                    {
+                        console.log("_SysTransStart Failed:" + iRet);
+                    }
+                    postMessage({type: "created"});
+                }
+            }
+
+        } else if ("inputData" === data.type) {
+            if (RECORDRTP) {
+                var aFileData = new Uint8Array(data.buf);  // 拷贝一份
+                var iBufferLen = aFileData.length;
+                var szBufferLen = iBufferLen.toString(16);
+                if (szBufferLen.length === 1) {
+                    szBufferLen = "000" + szBufferLen;
+                } else if (szBufferLen.length === 2) {
+                    szBufferLen = "00" + szBufferLen;
+                } else if (szBufferLen.length === 3) {
+                    szBufferLen = "0" + szBufferLen;
+                }
+                var aData = [0, 0, parseInt(szBufferLen.substring(0, 2), 16), parseInt(szBufferLen.substring(2, 4), 16)];
+                for(var iIndex = 0, iDataLength = aFileData.length; iIndex < iDataLength; iIndex++) {
+                    aData[iIndex + 4] = aFileData[iIndex]
+                }
+                var dataUint8 = new Uint8Array(aData);
+                postMessage({type: "outputData", buf: dataUint8.buffer, dType: 2});
+            } else {
+                let pInputDataBuf = Module._malloc(data.len);
+                var idataLen = data.len;
+                self.writeArrayToMemory(new Uint8Array(data.buf), pInputDataBuf);
+                    // 输入数据,每次最多2m
+                let pp = Module._SysTransInputData(0, pInputDataBuf, idataLen);
+                if(pp != 0) {
+                    //console.log("InputData Failed:" + pp);
+                }
+                Module._free(pInputDataBuf);
+            }
+        } else if ("release" === data.type) {
+            var iRet = Module._SysTransStop();
+            if (iRet != 0) {
+                console.log("_SysTransStop Failed:", iRet);
+            }
+            Module._SysTransRelease();
+            if (iRet != 0) {
+                console.log("_SysTransRelease Failed:", iRet);
+            }
+            close();
+        }
+    };

+ 22 - 0
public/index.html

@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <title><%= htmlWebpackPlugin.options.title %></title>
+    <meta name="buildUser" content="<%= htmlWebpackPlugin.options.buildUser %>">
+    <meta name="buildTime" content="<%= htmlWebpackPlugin.options.buildTime %>">
+    <meta name="buildEdition" content="<%= htmlWebpackPlugin.options.buildEdition %>">
+    <meta name="renewalEncoding" content="<%= htmlWebpackPlugin.options.renewalEncoding %>">
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+  <script src="./h5player/h5player.min.js" charset="utf-8"></script>
+</html>

+ 123 - 0
src/App.vue

@@ -0,0 +1,123 @@
+<template>
+    <div id="app">
+        <transition name="fade"
+                    mode="out-in">
+            <router-view></router-view>
+        </transition>
+    </div>
+</template>
+
+<script>
+    import axios from 'axios'
+    import { MessageBox } from 'element-ui'
+    export default {
+        name: 'App',
+        data() {
+            return {
+                innerHeight: window.innerHeight,
+                innerWidth: window.innerWidth,
+            }
+        },
+        mounted() {
+            document.title = process.env.VUE_APP_TITLE;
+            this.banZoom();
+            //根据当前浏览器宽度与额定尺寸计算transform缩放值
+            document.getElementById('app').style.transform = `scale(${document.documentElement.clientWidth / 1920})`;
+            //根据当前浏览器宽度与额定尺寸计算当前浏览器可观看尺寸高度
+            document.getElementById('app').style.height = (window.innerHeight / (document.documentElement.clientWidth / 1920 * 100)) * 100 + 'px';
+            //当尺寸改变后从新计算
+            window.onresize = () => {
+                return (() => {
+                    document.getElementById('app').style.transform = `scale(${document.documentElement.clientWidth / 1920})`;
+                    document.getElementById('app').style.height = (window.innerHeight / (document.documentElement.clientWidth / 1920 * 100)) * 100 + 'px';
+
+                })();
+            };
+            // this.inspectRenewal();
+        },
+        methods: {
+            banZoom() {
+                // 禁止通过 ctrl + +/- 和  ctrl + 滚轮 对页面进行缩放
+                document.addEventListener('keydown', function (event) {
+                    if ((event.ctrlKey === true || event.metaKey === true) &&
+                        (event.which === 61 || event.which === 107 ||
+                            event.which === 173 || event.which === 109 ||
+                            event.which === 187 || event.which === 189)) {
+                        event.preventDefault()
+                    }
+                }, false)
+                // Chrome IE 360
+                window.addEventListener('mousewheel', function (event) {
+                    if (event.ctrlKey === true || event.metaKey) {
+                        event.preventDefault()
+                    }
+                }, {
+                    passive: false
+                })
+                // firefox
+                window.addEventListener('DOMMouseScroll', function (event) {
+                    if (event.ctrlKey === true || event.metaKey) {
+                        event.preventDefault()
+                    }
+                }, {
+                    passive: false
+                })
+            },
+            //更新检查
+            inspectRenewal(){
+                const self = this;
+                const intervalTime = 300000;
+                checkForUpdates();
+                self.timer = window.setInterval(checkForUpdates, intervalTime);
+                async function checkForUpdates() {
+                    let xhr = new XMLHttpRequest();
+                    xhr.open('GET', 'version.txt', true); // 替换为你要读取的txt文件路径
+                    xhr.onreadystatechange = function() {
+                        if (xhr.readyState === 4 && xhr.status === 200) {
+                            let version = xhr.responseText;
+                            if (version !== process.env.VUE_APP_RENEWAL_ENCODING){
+                                MessageBox.confirm('发现新版本,是否立即刷新页面?', '系统提示', {
+                                        confirmButtonText: '确定',
+                                        showCancelButton:true,
+                                        closeOnClickModal:false,
+                                        cancelButtonText: '取消',
+                                        type: 'warning'
+                                    }
+                                ).then(() => {
+                                    clearInterval(self.timer);
+                                    location.reload(true);
+                                }).catch(() => {});
+                            }
+                        }
+                    };
+                    xhr.send();
+                }
+            },
+        },
+        beforeDestroy() {
+            //清除定时器
+            clearInterval(this.timer);
+        },
+    }
+</script>
+<style>
+    html{
+        background-color: #062338;
+        overflow: hidden;
+    }
+    #app {
+        overflow: hidden;
+        height: 100%;
+        transform-origin: left top;
+        width: 1920px;
+        display: flex;
+        flex-direction: column;
+        flex: 1;
+    }
+    .el-loading-mask{
+        background-color: rgba(255, 255, 255, 0)!important;
+    }
+    .el-loading-spinner{
+        display: none;
+    }
+</style>

+ 35 - 0
src/api/classifyGradeDetail.js

@@ -0,0 +1,35 @@
+import axios from "../utilsDemo/request";
+let {get, post,baseUrl} = axios
+
+//基础
+export const requestUrl = baseUrl;
+
+//获取楼栋数据(无权限)
+export const getNoAuthTreeList = data => get(
+    "/laboratory/buildFloor/getNoAuthTreeList",
+    data
+);
+
+//获取楼层数据(无权限)
+export const getBuildOrFloorDetailList = data => get(
+    "/laboratory/buildFloor/getBuildOrFloorDetailList",
+    data
+);
+
+//获取实验室列表数据(无权限)
+export const getNoAuthList = data => get(
+    "/laboratory/buildFloorLayout/getNoAuthList",
+    data
+);
+
+//获取分类数据(无权限)
+export const classIfIedListAll = data => get(
+    "/laboratory/classified/listAll",
+    data
+);
+
+//获取分级数据(无权限)
+export const classTypeListAll = data => get(
+    "/laboratory/classtype/listAll",
+    data
+);

+ 119 - 0
src/api/http.js

@@ -0,0 +1,119 @@
+import axios from "../utilsDemo/request";
+let {get, post,baseUrl} = axios
+
+//基础
+export const requestUrl = baseUrl;
+//根据名称查询实验室列表
+export const systemSubjectGetList = data => post("/system/subject/getList",data)
+//获取logo图片
+export const getLogoInfo = data => get("/system/logo/config/getLogoInfo",data)
+
+//安全隐患统计
+export const optionCharts = data => get("/laboratory/bigview/check/option/charts",data)
+//安全隐患统计-按实验室
+export const optionLabCharts = data => get("/laboratory/bigview/pitfallSubColumn",data)
+//人员违规统计
+export const newStatistics = data => get("/laboratory/violation/bigData/newStatistics",data)
+//安全准入办理统计
+export const listCollegeApplyColumn = data => get("/laboratory/apply/listCollegeApplyColumn",data)
+//预案执行统计
+export const getYearControlInfo = data => get("/laboratory/control/getYearControlInfo",data)
+//危险源统计
+export const queryHazardColumnar = data => get("/laboratory/hazard/queryBigViewHazardList",data)
+//实验室分类
+export const getTypeCount = data => get("/laboratory/subject/getTypeCount",data)
+//实验室分级
+export const getFiedCount = data => get("/laboratory/subject/getFiedCount",data)
+
+//实验室人员
+export const onlineSumByBigView = data => get("/laboratory/bigview/sub/onlineSumByBigView",data)
+//分级管控
+export const workInfo = data => get("/laboratory/bigview/manage/work/info",data)
+//安全检查批次
+export const indexListRelease = data => get("/laboratory/release/indexListRelease",data)
+//实验室信息
+export const mySub = data => get("/laboratory/bigview/my/sub",data)
+//工作通知
+export const listCollegeTz = data => get("/laboratory/notifyplan/listCollegeTz",data)
+//工作计划
+export const listCollegeJh = data => get("/laboratory/notifyplan/listCollegeTz",data)
+//安全检查
+export const safetyInspectTitle = data => get("/zd-security/DataStatistics/bigViewCount",data)
+//安全检查
+export const indexCollegeListCheck = data => get("/zd-security/DataStatistics/bigViewList",data)
+
+//获取报警信息
+export const groupGetList = data => get("/laboratory/plan/group/getList",data)
+//安全准入办理
+export const applyListCollege = data => get("/laboratory/apply/listCollege",data)
+//安全准入办理-图表
+export const applyListCollegeColumn = data => get("/laboratory/apply/listCollegeColumn",data)
+//安全准入办理-查询院系列表
+export const departmentsList = data => get("/system/dept/departments/list",data)
+//安全准入办理-查询实验室
+export const getSubjectDict = data => get("/laboratory/subject/getSubjectDict",data)
+//分级管控
+export const chartDetails = data => get("/laboratory/bigview/manage/work/chartDetails",data)
+//分级管控-图表
+export const workCharts = data => get("/laboratory/bigview/manage/work/charts",data)
+//安全隐患统计
+export const optionChartDetails = data => get("/laboratory/bigview/check/option/chartDetails",data)
+//安全隐患统计-隐患类型
+export const checkOptionList = data => get("/laboratory/checkOption/list",data)
+//人员违规统计
+export const detailSubList = data => get("/laboratory/violation/bigData/detail/subList",data)
+//人员违规统计-图表
+export const detailColumnar = data => get("/laboratory/violation/bigData/detail/columnar",data)
+//查询违规原因
+export const getDictViolation = data => get("/laboratory/violationScoreSite/getDictViolation",data)
+//安全检查-遗留问题
+export const indexCheckDetalsWzg = data => get("/zd-security/DataStatistics/remainList",data)
+//安全检查-本次检查问题
+export const indexCheckDetalsYzg = data => get("/zd-security/DataStatistics/rectificationList",data)
+//进入实验室人员
+export const onlineByBigView = data => get("/laboratory/bigview/sub/onlineByBigView",data)
+//进入实验室人员tip列表查询
+export const onlineDetail = data => get("laboratory/bigview/sub/onlineDetail",data)
+//安全分级
+export const classifiedListAll = data => get("/laboratory/classified/listAll",data)
+//安全分类
+export const classtypeListAll = data => get("/laboratory/classtype/listAll",data)
+//预案执行统计
+export const getRiskPlanList = data => get("/laboratory/control/getRiskPlanList",data)
+//危险源统计
+export const queryHazardList = data => get("/laboratory/hazard/queryHazardList",data)
+//危险源统计-图表
+export const queryHazardColumnarTop = data => get("/laboratory/hazard/queryHazardColumnarTop",data)
+//危险源统计-查询危险源
+export const queryHazardOption = data => get("/laboratory/hazard/queryHazardOption",data)
+//工作通知
+export const notifyplan = data => get("/laboratory/notifyplan/"+data,)
+//工作计划
+export const listIndexJhDetals = data => get("/laboratory/notifyplan/listIndexJhDetals",data)
+
+//预案- 开关给后台传输返回结果 需要MQTT监听是否成功
+export const mangerControl = data => post("/laboratory/subject/manger/control/"+data.id+'/'+data.command,)
+//预案- 获取开关状态
+export const controllerList = data => get("/laboratory/onemachine/"+data+'/controller/list',)
+//预案-获取摄像头列表
+export const startListDeviceIds = data => get("/algorithm/api/play/startList",data,'video')
+//预案-获取报警详情
+export const abnormalLogOrderByList = data => get("/laboratory/plan/log/abnormalLogOrderByList",data)
+//预案-实验室简要信息
+export const bigviewSub = data => get("/laboratory/bigview/"+data+'/sub',)
+//预案-传感器信息
+export const bigviewFunctionList = data => get("/laboratory/onemachine/"+data+'/function/list',)
+//预案-传感器信息
+export const bigviewWarnMessage = data => get("/laboratory/bigview/"+data+'/warn/message',)
+
+
+//查询开发配置
+export const getUrlConfig = data => get("/system/urlConfig",data)
+
+
+
+//验证验证码
+export const verifyCaptcha = data => post("/captcha/verify",data)
+
+//注册(修改密码)
+export const register = data => post("/register/cellphone",data)

+ 430 - 0
src/api/index.js

@@ -0,0 +1,430 @@
+import request from '@/utils/request'
+
+/*                分类获取公共配置
+* category        1.系统参数 2.公共配置
+* configType      1.基础配置 2.管控一体机 3.化学品终端 4.小程序配置 5.开发配置 6.首页配置
+*/
+export function getConfigByType(data) {
+    return request({
+        url: '/system/config/info/getConfigByType',
+        method: 'post',
+        data: data
+    })
+}
+// 院校通知/工作通知列表
+// notifyType 3.工作通知 2.校院通知
+export function systemNotifyList(data) {
+    return request({
+        url: '/system/notify/list',
+        method: 'post',
+        data: data
+    })
+}
+// 分级管控列表
+export function laboratoryGradeManageList(data) {
+    return request({
+        url: '/laboratory/gradeManage/list',
+        method: 'post',
+        data: data
+    })
+}
+// 查询安全分级列表(不带分页)
+export function laboratoryLevelConfigGetLevelTitleList(data) {
+    return request({
+        url: '/laboratory/levelConfig/getLevelTitleList',
+        method: 'post',
+        data: data
+    })
+}
+
+// 查询安全分类列表(不带分页)
+export function laboratoryClassTypeGetList(data) {
+    return request({
+        url: '/laboratory/classType/getList',
+        method: 'post',
+        data: data
+    })
+}
+// 实验室人员-列表
+export function laboratoryBigViewSubUserCount(data) {
+    return request({
+        url: '/laboratory/bigView/subUserCount',
+        method: 'post',
+        data: data
+    })
+}
+// 实验室人员-总数
+export function laboratoryBigViewSubTotalUserCount(data) {
+    return request({
+        url: '/laboratory/bigView/subTotalUserCount',
+        method: 'post',
+        data: data
+    })
+}
+//实验室分类分级统计
+export function laboratoryBigViewsSubTypeLevelCount(data) {
+    return request({
+        url: '/laboratory/bigView/subTypeLevelCount',
+        method: 'post',
+        data: data
+    })
+}
+//危险源统计
+export function laboratoryBigViewSubHazardCount(data) {
+    return request({
+        url: '/laboratory/bigView/subHazardCount',
+        method: 'post',
+        data: data
+    })
+}
+//危险源统计
+export function laboratoryBigViewSubHazardBarChartCount(data) {
+    return request({
+        url: '/laboratory/bigView/subHazardBarChartCount',
+        method: 'post',
+        data: data
+    })
+}
+//危险源统计
+export function laboratoryBigViewSubHazardList(data) {
+    return request({
+        url: '/laboratory/bigView/subHazardList',
+        method: 'post',
+        data: data
+    })
+}
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType) {
+    return request({
+        url: '/system/dict/item/option?dictCode=' + dictType,
+        method: 'get'
+    })
+}
+//本月隐患统计
+export function securityBigViewCheckOptionCharts(data) {
+    return request({
+        url: '/security/bigView/checkOptionCharts',
+        method: 'post',
+        data: data
+    })
+}
+//隐患统计
+export function securityBigViewCheckOptionChartDetails(data) {
+    return request({
+        url: '/security/bigView/checkOptionChartDetails',
+        method: 'post',
+        data: data
+    })
+}
+//隐患统计-隐患类型
+export function securityCheckOptionList(data) {
+    return request({
+        url: '/security/checkOption/list',
+        method: 'post',
+        data: data
+    })
+}
+//实验室-传感器
+export function laboratoryBigViewFindSubSensor(data) {
+    return request({
+        url: '/laboratory/bigView/findSubSensor',
+        method: 'post',
+        data: data
+    })
+}
+//查询当前正在发生的预案
+export function laboratoryBigViewSelectTriggerInfo(query) {
+    return request({
+        url: '/laboratory/bigView/selectTriggerInfo',
+        method: 'get',
+        params: query
+    })
+}
+//首页-风险预警统计
+export function laboratoryBigViewCollegeEventStatistics(query) {
+    return request({
+        url: '/laboratory/bigView/collegeEventStatistics',
+        method: 'get',
+        params: query
+    })
+}
+//首页-安全准入办理统计
+export function laboratoryBigViewListCollegeApplyColumn(query) {
+    return request({
+        url: '/laboratory/bigView/listCollegeApplyColumn',
+        method: 'get',
+        params: query
+    })
+}
+//安全准入办理列表
+export function laboratoryBigViewListCollege(data) {
+    return request({
+        url: '/laboratory/bigView/listCollege',
+        method: 'post',
+        data: data
+    })
+}
+
+//首页-人员违规统计
+export function examBigViewNewStatistics(data) {
+    return request({
+        url: '/exam/bigView/newStatistics',
+        method: 'post',
+        data: data
+    })
+}
+//首页-人员违规统计-柱状图
+export function examBigViewDetailColumnar(data) {
+    return request({
+        url: '/exam/bigView/detail/columnar',
+        method: 'post',
+        data: data
+    })
+}
+//首页-人员违规统计-列表
+export function examBigViewDetailSubList(data) {
+    return request({
+        url: '/exam/bigView/detail/subList',
+        method: 'post',
+        data: data
+    })
+}
+//首页-安全检查-列表
+export function securityBigViewList(data) {
+    return request({
+        url: '/security/bigView/list',
+        method: 'post',
+        data: data
+    })
+}
+//风险预警统计列表
+export function laboratoryBigViewCollegeEventStatisticsList(data) {
+    return request({
+        url: '/laboratory/bigView/collegeEventStatisticsList',
+        method: 'post',
+        data: data
+    })
+}
+//风险预警统计列表
+export function laboratoryRiskDeviceTypeGetList(query) {
+    return request({
+        url: '/laboratory/riskDeviceType/getList',
+        method: 'get',
+        params: query
+    })
+}
+//首页-安全检查-统计数量
+export function securityBigViewPlanStatistics(data) {
+    return request({
+        url: '/security/bigView/planStatistics',
+        method: 'post',
+        data: data
+    })
+}
+//首页-人员违规统计-违规原因
+export function examViolationSiteGetListByType(query) {
+    return request({
+        url: '/exam/violationSite/getListByType',
+        method: 'get',
+        params: query
+    })
+}
+//楼栋下楼层数据
+export function laboratoryBigViewGetFloorListByBigView(data) {
+    return request({
+        url: '/laboratory/bigView/getFloorListByBigView',
+        method: 'post',
+        data: data
+    })
+}
+//校区-楼栋
+export function systemBuildingGetTreeList(data) {
+    return request({
+        url: '/system/building/getTreeList',
+        method: 'post',
+        data: data
+    })
+}
+//应急处置-获取楼层-智能物联设备列表
+export function iotBigViewDeviceFindByType(data) {
+    return request({
+        url: '/iot/bigView/device/findByType',
+        method: 'post',
+        data: data
+    })
+}
+//预警事件-列表
+export function systemWarningNoticeNoMenuList(data) {
+    return request({
+        url: '/system/warningNotice/noMenuList',
+        method: 'post',
+        data: data
+    })
+}
+//预警事件-详情
+export function systemWarningNoticeDetail(query) {
+    return request({
+        url: '/system/warningNotice/detail',
+        method: 'get',
+        params: query
+    })
+}
+//预警事件-视频回放地址查询
+export function iotCameraGetPlaybackURLs(query) {
+    return request({
+        url: '/iot/camera/getPlaybackURLs',
+        method: 'get',
+        params: query
+    })
+}
+
+/*
+应急处置-指定物联设备查询列表
+typeKey:'camera'//摄像头
+楼层或实验室 floorId 楼层ID  subjectId  实验室ID
+*/
+export function iotBigViewDeviceList(data) {
+    return request({
+        url: '/iot/bigView/device/list',
+        method: 'post',
+        data: data
+    })
+}
+
+//应急处置-查询实验室传感器列表
+export function iotBigViewDeviceFindBySubId(query) {
+    return request({
+        url: '/iot/bigView/device/findBySubId',
+        method: 'get',
+        params: query
+    })
+}
+//执行记录-详情
+export function laboratoryEventFindByEventId(query) {
+    return request({
+        url: '/laboratory/event/findByEventId',
+        method: 'get',
+        params: query
+    })
+}
+//实验室-详情
+export function laboratorySubRelInfoGetDetailInfo(query) {
+    return request({
+        url: '/laboratory/subRelInfo/getDetailInfo',
+        method: 'get',
+        params: query
+    })
+}
+//应急处置-喇叭播放文本
+export function iotBigViewSpeakerPlayText(query) {
+    return request({
+        url: '/iot/bigView/speaker/playText',
+        method: 'get',
+        params: query
+    })
+}
+
+//应急处置-结束预案
+export function laboratoryPlanCloseRiskPlan(query) {
+    return request({
+        url: '/laboratory/plan/closeRiskPlan',
+        method: 'get',
+        params: query
+    })
+}
+
+/********************* 视频/应急 *********************/
+
+
+
+//校级-校区-楼栋-楼层-列表
+export function laboratoryLabDeptTreeGetTreeList (data) {
+    return request({
+        url: '/laboratory/labDeptTree/getTreeList',
+        method: 'post',
+        data: data
+    })
+}
+export function laboratoryLabDeptTreeGetRoomList (data) {
+    return request({
+        url: '/laboratory/labDeptTree/getRoomList',
+        method: 'post',
+        data: data
+    })
+}
+/*
+* 获取楼栋楼层实验室打卡在线记录
+* buildId-楼栋
+* floorId-楼层/楼道
+* subId-实验室
+*/
+export function laboratorySubPassOutGetCountByBuildId (data) {
+    return request({
+        url: '/laboratory/subPassOut/getCountByBuildId',
+        method: 'post',
+        data: data
+    })
+}
+
+//获取摄像头流地址
+export function iotCameraFindByCondition(data) {
+    return request({
+        url: '/iot/camera/findByCondition',
+        method: 'post',
+        data: data
+    })
+}
+//根据设备ID获取摄像头流地址
+export function iotCameraGetPreviewURLs(query) {
+    return request({
+        url: '/iot/camera/getPreviewURLs',
+        method: 'get',
+        params: query
+    })
+}
+
+//应急处置-获取楼层布局数据
+export function laboratoryBigViewGetFloorByBigView(query) {
+    return request({
+        url: '/laboratory/bigView/getFloorByBigView',
+        method: 'get',
+        params: query
+    })
+}
+/*
+* 查询楼层-危险源数据
+* floorId-楼层
+*/
+export function laboratoryBigViewHazardStatistics (query) {
+    return request({
+        url: '/laboratory/bigView/hazardStatistics',
+        method: 'get',
+        params: query
+    })
+}
+
+//新楼栋-楼层树结构
+export function laboratoryLabDeptTreeLargeTree (data) {
+    return request({
+        url: '/laboratory/labDeptTree/large/tree',
+        method: 'post',
+        data: data
+    })
+}
+//楼层下查询房间列表
+export function laboratoryLabDeptTreeLargeRooms (data) {
+    return request({
+        url: '/laboratory/labDeptTree/large/rooms',
+        method: 'post',
+        data: data
+    })
+}
+
+//根据过滤条件获取摄像头流地址
+export function iotCameraLargeFindByCondition(data) {
+    return request({
+        url: '/iot/camera/large/findByCondition',
+        method: 'post',
+        data: data
+    })
+}

+ 55 - 0
src/api/login.js

@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+
+// 登录方法
+export function login(account, password, code, uuid, userType) {
+    return request({
+        url: '/auth/login',
+        method: 'post',
+        data: { account, password, code, uuid,userType }
+    })
+}
+//获取认证信息
+export function authInfo(query) {
+    return request({
+        url: '/auth/info',
+        method: 'get',
+        params: query
+    })
+}
+
+// 获取验证码
+export function getCodeImg() {
+    return request({
+        url: '/auth/captcha',
+        method: 'get'
+    })
+}
+/*                分类获取公共配置
+* category        1.系统参数 2.公共配置
+* configType      1.基础配置 2.管控一体机 3.化学品终端 4.小程序配置 5.开发配置 6.首页配置
+*/
+export function getConfigByType(data) {
+    return request({
+        url: '/system/config/info/getConfigByType',
+        method: 'post',
+        data: data
+    })
+}
+
+// 查询公共配置
+export function configInfo(data) {
+    return request({
+        url: '/auth/configInfo',
+        method: 'get',
+        params: data
+    })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+    return request({
+        url: '/system/user/permission',
+        method: 'get'
+    })
+}

二進制
src/assets/ZDimages/bottom_icon.png


二進制
src/assets/ZDimages/emergencyManagement/icon_aqtd_m.png


二進制
src/assets/ZDimages/emergencyManagement/icon_jjck.png


二進制
src/assets/ZDimages/emergencyManagement/icon_pmbjt_m.png


二進制
src/assets/ZDimages/emergencyManagement/icon_pmt_ry.png


二進制
src/assets/ZDimages/emergencyManagement/icon_shang_hs.png


二進制
src/assets/ZDimages/emergencyManagement/icon_sjt.png


二進制
src/assets/ZDimages/emergencyManagement/icon_xia_hs.png


二進制
src/assets/ZDimages/emergencyManagement/icon_xjt.png


二進制
src/assets/ZDimages/emergencyManagement/icon_you_hs.png


二進制
src/assets/ZDimages/emergencyManagement/icon_yuo.png


二進制
src/assets/ZDimages/emergencyManagement/icon_zou_hs.png


二進制
src/assets/ZDimages/emergencyManagement/icon_zuo.png


二進制
src/assets/ZDimages/emergencyManagement/img_bg_yatk.png


二進制
src/assets/ZDimages/emergencyManagement/img_fjbj_jb@1x.png


二進制
src/assets/ZDimages/icon_0.png


二進制
src/assets/ZDimages/icon_1.png


二進制
src/assets/ZDimages/icon_bg_rs@1x.png


二進制
src/assets/ZDimages/icon_bt_yso@1x.png


二進制
src/assets/ZDimages/icon_bt_yst@1x.png


二進制
src/assets/ZDimages/icon_znwyyc_bg@1x.png


二進制
src/assets/ZDimages/icon_znwyzc_bg@1x.png


二進制
src/assets/ZDimages/img_bg_cdo@1x.png


二進制
src/assets/ZDimages/img_bg_xz@1x.png


二進制
src/assets/ZDimages/img_bg_zc@1x.png


二進制
src/assets/ZDimages/img_wxy_szbg@1x.png


二進制
src/assets/ZDimages/img_znwl_xdh@1x.png


二進制
src/assets/ZDimages/img_znwl_xdl@1x.png


二進制
src/assets/ZDimages/null-data-1.png


+ 467 - 0
src/assets/iconfont/iconfont.css

@@ -0,0 +1,467 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 4287712 */
+  src: url('iconfont.woff2?t=1732669861872') format('woff2'),
+       url('iconfont.woff?t=1732669861872') format('woff'),
+       url('iconfont.ttf?t=1732669861872') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-guangqi:before {
+  content: "\e68e";
+}
+
+.icon-eryanghualiu:before {
+  content: "\e68f";
+}
+
+.icon-yiyanghuadan:before {
+  content: "\e690";
+}
+
+.icon-jiawan:before {
+  content: "\e683";
+}
+
+.icon-yangqi:before {
+  content: "\e684";
+}
+
+.icon-lvqi:before {
+  content: "\e685";
+}
+
+.icon-qingqi:before {
+  content: "\e686";
+}
+
+.icon-VOC:before {
+  content: "\e687";
+}
+
+.icon-yichun:before {
+  content: "\e688";
+}
+
+.icon-tVOC:before {
+  content: "\e689";
+}
+
+.icon-eryanghuatan:before {
+  content: "\e68a";
+}
+
+.icon-jiaquan:before {
+  content: "\e68b";
+}
+
+.icon-guangqi11:before {
+  content: "\e682";
+}
+
+.icon-wendu1:before {
+  content: "\e68d";
+}
+
+.icon-yangan1:before {
+  content: "\e691";
+}
+
+.icon-daqiyali:before {
+  content: "\e692";
+}
+
+.icon-shidu:before {
+  content: "\e68c";
+}
+
+.icon-a-suoxiao1:before {
+  content: "\e680";
+}
+
+.icon-a-fangda2:before {
+  content: "\e681";
+}
+
+.icon-a-guanbi1:before {
+  content: "\e678";
+}
+
+.icon-shiyanshi:before {
+  content: "\e679";
+}
+
+.icon-fangxingxuanzhong-fill:before {
+  content: "\e67a";
+}
+
+.icon-weixian:before {
+  content: "\e67b";
+}
+
+.icon-shoujihaoma:before {
+  content: "\e67c";
+}
+
+.icon-loudong:before {
+  content: "\e67d";
+}
+
+.icon-xiala-shuangjiantou:before {
+  content: "\e67e";
+}
+
+.icon-yinhuan:before {
+  content: "\e67f";
+}
+
+.icon-shishirenshu:before {
+  content: "\e664";
+}
+
+.icon-a-xiangshangyuanjiantouxiajiantou:before {
+  content: "\e665";
+}
+
+.icon-gongsi:before {
+  content: "\e666";
+}
+
+.icon-a-gengduo3:before {
+  content: "\e667";
+}
+
+.icon-weixiantixing:before {
+  content: "\e668";
+}
+
+.icon-geren:before {
+  content: "\e669";
+}
+
+.icon-tianjiarenyuan:before {
+  content: "\e66a";
+}
+
+.icon-xueyuanguanli:before {
+  content: "\e66b";
+}
+
+.icon-a-xiangzuoyuanjiantouzuojiantou:before {
+  content: "\e66c";
+}
+
+.icon-weihu:before {
+  content: "\e66d";
+}
+
+.icon-duanxin:before {
+  content: "\e66e";
+}
+
+.icon-a-xiangzuoyuanjiantouyoujiantou:before {
+  content: "\e66f";
+}
+
+.icon-pdf:before {
+  content: "\e670";
+}
+
+.icon-a-gengduo4:before {
+  content: "\e671";
+}
+
+.icon-weixin:before {
+  content: "\e672";
+}
+
+.icon-youxiang:before {
+  content: "\e673";
+}
+
+.icon-dingding:before {
+  content: "\e674";
+}
+
+.icon-yingjianshebei:before {
+  content: "\e675";
+}
+
+.icon-wulian:before {
+  content: "\e676";
+}
+
+.icon-kaoshishijian:before {
+  content: "\e677";
+}
+
+.icon-xuanzhong:before {
+  content: "\e650";
+}
+
+.icon-shenpiren:before {
+  content: "\e651";
+}
+
+.icon-xiaji:before {
+  content: "\e652";
+}
+
+.icon-xiaoxi:before {
+  content: "\e653";
+}
+
+.icon-a-renyuanguanli1:before {
+  content: "\e654";
+}
+
+.icon-shouye-xuanzhong:before {
+  content: "\e655";
+}
+
+.icon-xiazai:before {
+  content: "\e656";
+}
+
+.icon-xitongxiaoxi:before {
+  content: "\e657";
+}
+
+.icon-yiwen:before {
+  content: "\e658";
+}
+
+.icon-gouxuanxuanzhong:before {
+  content: "\e659";
+}
+
+.icon-huiyuan:before {
+  content: "\e65a";
+}
+
+.icon-huoyanjiance:before {
+  content: "\e65b";
+}
+
+.icon-tianjia:before {
+  content: "\e65c";
+}
+
+.icon-wendu:before {
+  content: "\e65d";
+}
+
+.icon-yangan:before {
+  content: "\e65e";
+}
+
+.icon-baojing:before {
+  content: "\e65f";
+}
+
+.icon-jiankong:before {
+  content: "\e660";
+}
+
+.icon-weixianyuan:before {
+  content: "\e661";
+}
+
+.icon-zhinengjiance:before {
+  content: "\e662";
+}
+
+.icon-wuwangluo:before {
+  content: "\e663";
+}
+
+.icon-xiala:before {
+  content: "\e63c";
+}
+
+.icon-renyuanrenyuanleibie:before {
+  content: "\e63d";
+}
+
+.icon-fangda:before {
+  content: "\e63e";
+}
+
+.icon-shiyanshineirenyuan:before {
+  content: "\e63f";
+}
+
+.icon-loudongguanli:before {
+  content: "\e640";
+}
+
+.icon-a-shanchu:before {
+  content: "\e641";
+}
+
+.icon-zhinengkongzhi:before {
+  content: "\e642";
+}
+
+.icon-daochu:before {
+  content: "\e643";
+}
+
+.icon-yanzhengma:before {
+  content: "\e644";
+}
+
+.icon-mima:before {
+  content: "\e645";
+}
+
+.icon-renyuanguanli:before {
+  content: "\e646";
+}
+
+.icon-zhanghao:before {
+  content: "\e647";
+}
+
+.icon-riqi:before {
+  content: "\e648";
+}
+
+.icon-tixing:before {
+  content: "\e649";
+}
+
+.icon-chengyuanliebiao:before {
+  content: "\e64a";
+}
+
+.icon-shenfenxinxi:before {
+  content: "\e64b";
+}
+
+.icon-a-gengduo1:before {
+  content: "\e64c";
+}
+
+.icon-suoxiao:before {
+  content: "\e64d";
+}
+
+.icon-jiaoshi:before {
+  content: "\e64e";
+}
+
+.icon-daoru:before {
+  content: "\e64f";
+}
+
+.icon-danxuankuang:before {
+  content: "\e62e";
+}
+
+.icon-xuesheng:before {
+  content: "\e62c";
+}
+
+.icon-gengduo:before {
+  content: "\e630";
+}
+
+.icon-a-xiala:before {
+  content: "\e631";
+}
+
+.icon-bianji:before {
+  content: "\e632";
+}
+
+.icon-sousuo:before {
+  content: "\e62d";
+}
+
+.icon-wulianshebei:before {
+  content: "\e62a";
+}
+
+.icon-a-gengduo2:before {
+  content: "\e62b";
+}
+
+.icon-yuyinguangbo:before {
+  content: "\e633";
+}
+
+.icon-yichang_weixian:before {
+  content: "\e634";
+}
+
+.icon-yangqiping:before {
+  content: "\e628";
+}
+
+.icon-shiyanshiguanli:before {
+  content: "\e635";
+}
+
+.icon-yinhuanshu:before {
+  content: "\e636";
+}
+
+.icon-a-kaoshishijian2:before {
+  content: "\e637";
+}
+
+.icon-guanbi:before {
+  content: "\e638";
+}
+
+.icon-dianhua:before {
+  content: "\e639";
+}
+
+.icon-a-xiangshangyuanjiantoushangjiantoumianxing:before {
+  content: "\e63a";
+}
+
+.icon-xiaoxitongzhi:before {
+  content: "\e63b";
+}
+
+.icon-xuanzhong2:before {
+  content: "\e62f";
+}
+
+.icon-xinbiaoliebiao:before {
+  content: "\e629";
+}
+
+.icon-chukujilu:before {
+  content: "\e625";
+}
+
+.icon-qipingshezhi:before {
+  content: "\e626";
+}
+
+.icon-shiyongjilu:before {
+  content: "\e627";
+}
+
+.icon-rukujilu:before {
+  content: "\e622";
+}
+
+.icon-kucunxinxi:before {
+  content: "\e623";
+}
+
+.icon-xinxijilu:before {
+  content: "\e624";
+}
+

二進制
src/assets/iconfont/iconfont.ttf


二進制
src/assets/iconfont/iconfont.woff


二進制
src/assets/iconfont/iconfont.woff2


二進制
src/assets/image/bg.png


二進制
src/assets/image/favicon.png


二進制
src/assets/image/icon_fxyj_xz.png


二進制
src/assets/image/icon_fxyj_zc.png


二進制
src/assets/image/icon_jjck.png


+ 0 - 0
src/assets/image/icon_pmbjt_m.png


部分文件因文件數量過多而無法顯示