Browse Source

update media

yanglzh 3 tháng trước cách đây
mục cha
commit
49897a8318
100 tập tin đã thay đổi với 2137 bổ sung18 xóa
  1. 0 0
      media/assets/Card-58451e7c.js
  2. 0 0
      media/assets/Card-b9d373df.js
  3. 0 0
      media/assets/Group-ea2dcc3a.js
  4. 0 0
      media/assets/LeftOutlined-492d0e43.js
  5. 10 0
      media/assets/TextArea-1376d3ad.js
  6. 0 0
      media/assets/_mock-server-12375a95.js
  7. 0 0
      media/assets/audio_decoder_hard-e133cc4e.js
  8. 2 0
      media/assets/createForOfIteratorHelper-502f0d2b.js
  9. 0 0
      media/assets/detail-9c4b8930.js
  10. 0 0
      media/assets/detail-e21d8e8d.js
  11. 1 1
      media/assets/device-88d35103.js
  12. 0 0
      media/assets/en-17a3a5d3.js
  13. 0 0
      media/assets/formily-4231418e.js
  14. 0 0
      media/assets/formily-a077fcb9.js
  15. 1 1
      media/assets/gb28281-53c246af.js
  16. 1 1
      media/assets/global-5917bbb5.js
  17. 0 0
      media/assets/hard-disk.vue_vue_type_script_setup_true_lang-334ea472.js
  18. 1 0
      media/assets/hk-list-level-dc9970c0.js
  19. 0 0
      media/assets/index-0bf3e36c.js
  20. 0 0
      media/assets/index-122302b9.js
  21. 0 0
      media/assets/index-2cdbad24.js
  22. 1 1
      media/assets/index-41409ae5.js
  23. 0 1
      media/assets/index-4a28ab24.css
  24. 0 0
      media/assets/index-4c37c34b.js
  25. 0 0
      media/assets/index-52a70d3d.js
  26. 0 0
      media/assets/index-57747c89.js
  27. 0 0
      media/assets/index-5e3ba94e.js
  28. 0 0
      media/assets/index-604a4d89.js
  29. 0 0
      media/assets/index-60ff9924.js
  30. 0 0
      media/assets/index-6a63fb8a.js
  31. 0 1
      media/assets/index-6cd9eace.css
  32. 0 0
      media/assets/index-6d58de6f.js
  33. 0 0
      media/assets/index-7af791cb.js
  34. 0 0
      media/assets/index-7b173ea7.js
  35. 0 0
      media/assets/index-7e9674b9.js
  36. 0 0
      media/assets/index-7eff1959.js
  37. 0 0
      media/assets/index-7fb8ae8b.js
  38. 1 1
      media/assets/index-868fc3c0.js
  39. 0 0
      media/assets/index-88517def.js
  40. 0 0
      media/assets/index-8c1b53c2.js
  41. 0 0
      media/assets/index-92754d13.js
  42. 0 0
      media/assets/index-94b4cdae.js
  43. 0 0
      media/assets/index-977bc6d2.js
  44. 1 0
      media/assets/index-99f624da.css
  45. 0 0
      media/assets/index-9c67e701.js
  46. 0 0
      media/assets/index-ac918f8f.js
  47. 0 0
      media/assets/index-af741fec.js
  48. 0 0
      media/assets/index-bd60fcbe.js
  49. 1 0
      media/assets/index-c13eac51.js
  50. 1 1
      media/assets/index-cc7f4b20.js
  51. 0 2
      media/assets/index-cfb53c3e.js
  52. 0 0
      media/assets/index-custom-eeb1433a.js
  53. 0 0
      media/assets/index-custom-f40139d9.js
  54. 0 0
      media/assets/index-d1fbd179.js
  55. 0 0
      media/assets/index-d2e88a73.js
  56. 0 0
      media/assets/index-da75f993.js
  57. 0 0
      media/assets/index-dc0750b5.js
  58. 0 0
      media/assets/index-f9b23daa.js
  59. 0 0
      media/assets/index-hk-3ae4014e.js
  60. 0 0
      media/assets/index-hk-8ff14e80.js
  61. 1 0
      media/assets/index-hk-bea73e7b.css
  62. 0 0
      media/assets/index-hk-de770e7f.js
  63. 0 1
      media/assets/index.vue_vue_type_script_setup_true_lang-6f6a42cc.js
  64. 1 0
      media/assets/index.vue_vue_type_script_setup_true_lang-7edaf647.js
  65. 0 0
      media/assets/index.vue_vue_type_script_setup_true_lang-e3083022.js
  66. 1 0
      media/assets/jb4-60518ffa.js
  67. 1 0
      media/assets/jb4-a8f6a6bf.css
  68. 0 1
      media/assets/jb4-ae804964.css
  69. 0 1
      media/assets/jb4-f8fd23c7.js
  70. 1 0
      media/assets/operate.vue_vue_type_script_setup_true_lang-01dc861c.js
  71. 0 0
      media/assets/preview-551cfed2.js
  72. 1 0
      media/assets/preview-fcd2eb5b.css
  73. 1 1
      media/assets/scroll-tip.vue_vue_type_script_setup_true_lang-302683f3.js
  74. 1 1
      media/assets/scrollTo-854a9ced.js
  75. 1 1
      media/assets/state-5cad7cc8.js
  76. 0 0
      media/assets/useDetail-83a3c860.js
  77. 0 0
      media/assets/useFlexGapSupport-791d0eca.js
  78. 1 1
      media/assets/useModal-3ca524ee.js
  79. 0 0
      media/assets/usePlay-29f12ad2.js
  80. 0 0
      media/assets/usePlay-843f5ae8.js
  81. 0 0
      media/assets/usePlay-db12062a.js
  82. 1 1
      media/assets/utils-b8183d44.js
  83. 1 0
      media/assets/video-view-hk-80398494.css
  84. 0 0
      media/assets/video-view-hk-e74bf143.js
  85. 0 0
      media/assets/zh_CN-383c2498.js
  86. 0 0
      media/decoder.js
  87. 13 0
      media/hk-plugins/certificate.pem
  88. 11 0
      media/hk-plugins/certrequest.csr
  89. 536 0
      media/hk-plugins/demo.html
  90. 0 0
      media/hk-plugins/demo不能双击启动使用!!!!.txt
  91. 3 0
      media/hk-plugins/demo使用说明!!!.txt
  92. 5 0
      media/hk-plugins/h5player.min.js
  93. 65 0
      media/hk-plugins/http.js
  94. 61 0
      media/hk-plugins/https.js
  95. 685 0
      media/hk-plugins/playctrl1/DecodeWorker.js
  96. 11 0
      media/hk-plugins/playctrl1/Decoder.js
  97. 695 0
      media/hk-plugins/playctrl1simd/DecodeWorker.js
  98. 11 0
      media/hk-plugins/playctrl1simd/Decoder.js
  99. 8 0
      media/hk-plugins/playctrl2/Decoder.js
  100. BIN
      media/hk-plugins/playctrl2/Decoder.wasm

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/Card-58451e7c.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/Card-b9d373df.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/Group-ea2dcc3a.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/LeftOutlined-492d0e43.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 10 - 0
media/assets/TextArea-1376d3ad.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/_mock-server-12375a95.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/audio_decoder_hard-e133cc4e.js


+ 2 - 0
media/assets/createForOfIteratorHelper-502f0d2b.js

@@ -0,0 +1,2 @@
+import{bw as s}from"./index-122302b9.js";function y(r,l){var e=typeof Symbol<"u"&&r[Symbol.iterator]||r["@@iterator"];if(!e){if(Array.isArray(r)||(e=s(r))||l&&r&&typeof r.length=="number"){e&&(r=e);var a=0,o=function(){};return{s:o,n:function(){return a>=r.length?{done:!0}:{done:!1,value:r[a++]}},e:function(n){throw n},f:o}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i=!0,f=!1,u;return{s:function(){e=e.call(r)},n:function(){var n=e.next();return i=n.done,n},e:function(n){f=!0,u=n},f:function(){try{!i&&e.return!=null&&e.return()}finally{if(f)throw u}}}}export{y as _};

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/detail-9c4b8930.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/detail-e21d8e8d.js


+ 1 - 1
media/assets/device-c7f8658c.js → media/assets/device-88d35103.js

@@ -1 +1 @@
-import"./index-fb7a0cf7.js";import{O as v}from"./vue-18ee037d.js";import"./dayjs-4778c158.js";import{b as o}from"./gb28281-9adbd618.js";const I=v({id:"app-device-store",state:()=>({deviceList:[],deviceTree:[],deviceArr:[]}),actions:{setDeviceList(e){this.deviceList=e},setDeviceTree(e){this.deviceTree=e},setDeviceArr(e){this.deviceArr=e},async fetchDeviceList(){const e=await o();e.length>1&&e.sort((t,r)=>Number(t.ID)-Number(r.ID)),e.map(t=>{var r;return((r=t.Channels)==null?void 0:r.length)>1&&t.Channels.sort((s,n)=>Number(s.Name)-Number(n.Name)),t}),this.setDeviceList(e||[])},async fetchdeviceTree(){const e=await o();e.length>1&&e.sort((s,n)=>Number(s.ID)-Number(n.ID)),e.map(s=>{var n;return((n=s.Channels)==null?void 0:n.length)>1&&s.Channels.sort((c,i)=>Number(c.Name)-Number(i.Name)),s});const t=h(e)||[];this.setDeviceTree(t);const r=u(t);this.setDeviceArr(r)}}});function h(e){const t=[];return e!=null&&e.length&&e.map(({Channels:r,ID:s,Name:n})=>{t.push({title:n||s,key:s,ID:s,DeviceName:n,children:l(r,{ID:s,DeviceName:n})})}),t}const l=(e,t)=>{const r=[];if(e!=null&&e.length){const s=JSON.parse(JSON.stringify(e)),n=s.reduce((c,i)=>(i.children=[],c[i.DeviceID]=i,c),{});s.forEach(c=>{const i={title:c.Name||c.DeviceID,key:`${c.DeviceID}-${c.ParentID||t.ID}`,children:[],Name:c.Name,DeviceID:c.DeviceID,ID:t.ID,DeviceName:t.DeviceName,LiveStatus:c==null?void 0:c.LiveStatus,disabled:!1};let D=null;r!=null&&r.length&&!(D=r.filter(a=>a.DeviceID===a.ParentID)[0])&&(D=n[c.DeviceID]),D?(D.children.push(i),(!r.length||!r.some(a=>a.DeviceID===D.DeviceID))&&r.push(i)):r.push(i)})}return r};function u(e){return e.reduce((t,r)=>{const{children:s=[],...n}=r;return t.concat([{...n}],u(s))},[])}export{I as u};
+import"./index-122302b9.js";import{O as v}from"./vue-18ee037d.js";import"./dayjs-4778c158.js";import{b as o}from"./gb28281-53c246af.js";const I=v({id:"app-device-store",state:()=>({deviceList:[],deviceTree:[],deviceArr:[]}),actions:{setDeviceList(e){this.deviceList=e},setDeviceTree(e){this.deviceTree=e},setDeviceArr(e){this.deviceArr=e},async fetchDeviceList(){const e=await o();e.length>1&&e.sort((t,r)=>Number(t.ID)-Number(r.ID)),e.map(t=>{var r;return((r=t.Channels)==null?void 0:r.length)>1&&t.Channels.sort((s,n)=>Number(s.Name)-Number(n.Name)),t}),this.setDeviceList(e||[])},async fetchdeviceTree(){const e=await o();e.length>1&&e.sort((s,n)=>Number(s.ID)-Number(n.ID)),e.map(s=>{var n;return((n=s.Channels)==null?void 0:n.length)>1&&s.Channels.sort((c,i)=>Number(c.Name)-Number(i.Name)),s});const t=h(e)||[];this.setDeviceTree(t);const r=u(t);this.setDeviceArr(r)}}});function h(e){const t=[];return e!=null&&e.length&&e.map(({Channels:r,ID:s,Name:n})=>{t.push({title:n||s,key:s,ID:s,DeviceName:n,children:l(r,{ID:s,DeviceName:n})})}),t}const l=(e,t)=>{const r=[];if(e!=null&&e.length){const s=JSON.parse(JSON.stringify(e)),n=s.reduce((c,i)=>(i.children=[],c[i.DeviceID]=i,c),{});s.forEach(c=>{const i={title:c.Name||c.DeviceID,key:`${c.DeviceID}-${c.ParentID||t.ID}`,children:[],Name:c.Name,DeviceID:c.DeviceID,ID:t.ID,DeviceName:t.DeviceName,LiveStatus:c==null?void 0:c.LiveStatus,disabled:!1};let D=null;r!=null&&r.length&&!(D=r.filter(a=>a.DeviceID===a.ParentID)[0])&&(D=n[c.DeviceID]),D?(D.children.push(i),(!r.length||!r.some(a=>a.DeviceID===D.DeviceID))&&r.push(i)):r.push(i)})}return r};function u(e){return e.reduce((t,r)=>{const{children:s=[],...n}=r;return t.concat([{...n}],u(s))},[])}export{I as u};

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/en-17a3a5d3.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/formily-4231418e.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/formily-a077fcb9.js


+ 1 - 1
media/assets/gb28281-9adbd618.js → media/assets/gb28281-53c246af.js

@@ -1 +1 @@
-import"./dayjs-4778c158.js";import{au as s,av as t}from"./index-fb7a0cf7.js";const r=s({requestOptions:{apiUrl:()=>t("gb28181")}});function a(){return r.get({url:"/list"},{errorMessageMode:"message"})}function g(e){return r.get({url:"/invite",params:e},{errorMessageMode:"none"})}function i(e){return r.get({url:"/bye",params:e},{errorMessageMode:"message"})}function u(e){return r.get({url:"/records",params:e},{errorMessageMode:"message"})}function c(e){return r.get({url:"/control",params:e},{errorMessageMode:"message"})}export{c as a,a as b,u as g,g as i,i as s};
+import"./dayjs-4778c158.js";import{av as s,aw as t}from"./index-122302b9.js";const r=s({requestOptions:{apiUrl:()=>t("gb28181")}});function a(){return r.get({url:"/list"},{errorMessageMode:"message"})}function g(e){return r.get({url:"/invite",params:e},{errorMessageMode:"none"})}function i(e){return r.get({url:"/bye",params:e},{errorMessageMode:"message"})}function u(e){return r.get({url:"/records",params:e},{errorMessageMode:"message"})}function c(e){return r.get({url:"/control",params:e},{errorMessageMode:"message"})}export{c as a,a as b,u as g,g as i,i as s};

+ 1 - 1
media/assets/global-d75169a8.js → media/assets/global-5917bbb5.js

@@ -1 +1 @@
-import"./dayjs-4778c158.js";import{bR as s,av as a,ag as n}from"./index-fb7a0cf7.js";function i(){return s.get({url:"/sysinfo"},{errorMessageMode:"message"})}let r;function m(t){r=r||new EventSource(a()+"/summary");try{r.onmessage=e=>{if(!e.data)return{};t(JSON.parse(e.data))},r.onerror=e=>{throw e}}catch(e){n.error(`Summary EventSource failed: ${e}`)}return o}function o(){r==null||r.close(),r=null}function c(t){return s.get({url:"/stream",params:t},{errorMessageMode:"message"})}function f(){return s.get({url:"/plugins"},{errorMessageMode:"message"})}function l(t={name:"",formily:"1"}){return s.get({url:"/getconfig",params:t},{errorMessageMode:"message"})}function d(t,e){return s.post({url:"/updateconfig",params:t,data:e},{errorMessageMode:"message"})}export{l as a,i as b,m as c,c as d,f as g,d as u};
+import"./dayjs-4778c158.js";import{bS as s,aw as a,ag as n}from"./index-122302b9.js";function i(){return s.get({url:"/sysinfo"},{errorMessageMode:"message"})}let r;function m(t){r=r||new EventSource(a()+"/summary");try{r.onmessage=e=>{if(!e.data)return{};t(JSON.parse(e.data))},r.onerror=e=>{throw e}}catch(e){n.error(`Summary EventSource failed: ${e}`)}return o}function o(){r==null||r.close(),r=null}function c(t){return s.get({url:"/stream",params:t},{errorMessageMode:"message"})}function f(){return s.get({url:"/plugins"},{errorMessageMode:"message"})}function l(t={name:"",formily:"1"}){return s.get({url:"/getconfig",params:t},{errorMessageMode:"message"})}function d(t,e){return s.post({url:"/updateconfig",params:t,data:e},{errorMessageMode:"message"})}export{l as a,i as b,m as c,c as d,f as g,d as u};

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/hard-disk.vue_vue_type_script_setup_true_lang-334ea472.js


+ 1 - 0
media/assets/hk-list-level-dc9970c0.js

@@ -0,0 +1 @@
+function s(l){let t=[],n=[];return l.forEach((e,r)=>{e.regionPathName.split("/").forEach((i,h)=>{n=c(h===0?t:n,i,e)}),n.push({...e,title:e.name,key:e.indexCode,data:e})}),t}function c(l,t,n){const e=l.find(r=>r.title===t);return e?e.children:(l.push({title:t,children:[],type:"group",key:n.indexCode+"-"+t}),l[l.length-1].children)}export{s as l};

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-0bf3e36c.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-122302b9.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-2cdbad24.js


+ 1 - 1
media/assets/index-a20a1b80.js → media/assets/index-41409ae5.js

@@ -1 +1 @@
-import{l as N,j as _,b as o,bK as h,u as A,bL as T,o as j,a3 as E,P as m,bM as I,a$ as g}from"./index-fb7a0cf7.js";import{d as O,k as R,e as z,f as i,F}from"./vue-18ee037d.js";var L=function(){return o(o({},I()),{},{content:m.any,title:m.any})},M=O({compatConfig:{MODE:3},name:"APopover",props:_(L(),o(o({},h()),{},{trigger:"hover",transitionName:"zoom-big",placement:"top",mouseEnterDelay:.1,mouseLeaveDelay:.1})),setup:function(a,p){var y=p.expose,n=p.slots,v=R();y({getPopupDomNode:function(){var t,e;return(t=v.value)===null||t===void 0||(e=t.getPopupDomNode)===null||e===void 0?void 0:e.call(t)}});var u=A("popover",a),l=u.prefixCls,C=u.configProvider,$=z(function(){return C.getPrefixCls()}),b=function(){var t,e,c=a.title,r=c===void 0?g((t=n.title)===null||t===void 0?void 0:t.call(n)):c,f=a.content,s=f===void 0?g((e=n.content)===null||e===void 0?void 0:e.call(n)):f,d=!!(Array.isArray(r)?r.length:r),D=!!(Array.isArray(s)?s.length:r);if(!(!d&&!D))return i(F,null,[d&&i("div",{class:"".concat(l.value,"-title")},[r]),i("div",{class:"".concat(l.value,"-inner-content")},[s])])};return function(){return i(E,o(o({},j(a,["title","content"])),{},{prefixCls:l.value,ref:v,transitionName:T($.value,"zoom-big",a.transitionName)}),{title:b,default:n.default})}}});const K=N(M);export{K as P};
+import{l as $,j as _,b as o,bL as h,u as A,bM as T,o as j,a3 as E,P as m,bN as I,b0 as g}from"./index-122302b9.js";import{d as O,k as R,e as z,f as i,F}from"./vue-18ee037d.js";var L=function(){return o(o({},I()),{},{content:m.any,title:m.any})},M=O({compatConfig:{MODE:3},name:"APopover",props:_(L(),o(o({},h()),{},{trigger:"hover",transitionName:"zoom-big",placement:"top",mouseEnterDelay:.1,mouseLeaveDelay:.1})),setup:function(a,p){var y=p.expose,n=p.slots,v=R();y({getPopupDomNode:function(){var t,e;return(t=v.value)===null||t===void 0||(e=t.getPopupDomNode)===null||e===void 0?void 0:e.call(t)}});var u=A("popover",a),l=u.prefixCls,C=u.configProvider,b=z(function(){return C.getPrefixCls()}),N=function(){var t,e,c=a.title,r=c===void 0?g((t=n.title)===null||t===void 0?void 0:t.call(n)):c,f=a.content,s=f===void 0?g((e=n.content)===null||e===void 0?void 0:e.call(n)):f,d=!!(Array.isArray(r)?r.length:r),D=!!(Array.isArray(s)?s.length:r);if(!(!d&&!D))return i(F,null,[d&&i("div",{class:"".concat(l.value,"-title")},[r]),i("div",{class:"".concat(l.value,"-inner-content")},[s])])};return function(){return i(E,o(o({},j(a,["title","content"])),{},{prefixCls:l.value,ref:v,transitionName:T(b.value,"zoom-big",a.transitionName)}),{title:N,default:n.default})}}});const S=$(M);export{S as P};

+ 0 - 1
media/assets/index-4a28ab24.css

@@ -1 +0,0 @@
-.light .timeRuleContainer{background:#fff;box-shadow:inset 1px 1px 8px #ddd,4px 4px 4px #ddd}.dark .timeRuleContainer{background:#000;box-shadow:inset 2px 2px 8px #3d3d3d,4px 4px 5px #3d3d3d}.placeholder[data-v-ed654ca9]{border-radius:6px;width:100%;height:0;padding-bottom:56.25%;background:rgba(0,0,0,.7);color:#c2c3c3;position:relative;box-shadow:4px 4px 8px 4px #dedede}.placeholder .tip[data-v-ed654ca9]{position:absolute;top:50%;left:50%;transform:translate(-50%) translateY(-50%);text-align:center}.dark .placeholder[data-v-ed654ca9]{box-shadow:4px 4px 8px 4px #2f2f2f}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-4c37c34b.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-52a70d3d.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-57747c89.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-5e3ba94e.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-604a4d89.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-60ff9924.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-6a63fb8a.js


+ 0 - 1
media/assets/index-6cd9eace.css

@@ -1 +0,0 @@
-.box[data-v-5fb8fd98]{border-radius:6px;width:100%;height:0;padding-bottom:56.25%;position:relative;overflow:hidden}.light-col[data-v-5fb8fd98],.dark-col[data-v-5fb8fd98]{padding:2px;border-radius:6px}.light-col[data-v-5fb8fd98]:not(.isFullscreen){box-shadow:4px 4px 8px 4px #dedede}.light-col:not(.isFullscreen).active[data-v-5fb8fd98]{border:2px solid #989dfb}.dark-col[data-v-5fb8fd98]:not(.isFullscreen){box-shadow:4px 4px 8px 4px #2f2f2f}.dark-col:not(.isFullscreen).active[data-v-5fb8fd98]{border:2px solid #6b6b6b}.video-player-placeholder[data-v-5fb8fd98]{border-radius:6px;width:100%;height:0;padding-bottom:56.25%;position:relative;overflow:hidden;background:rgba(0,0,0,.7);color:#c2c3c3}.video-player-placeholder .no-stream-tip[data-v-5fb8fd98]{position:absolute;top:50%;left:50%;transform:translate(-50%) translateY(-50%);text-align:center}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-6d58de6f.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-7af791cb.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-7b173ea7.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-7e9674b9.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-7eff1959.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-7fb8ae8b.js


+ 1 - 1
media/assets/index-0799dacf.js → media/assets/index-868fc3c0.js

@@ -1 +1 @@
-import{d as p,S as f,e as o,u as t,U as u,V as d,a8 as _,W as m,X as x}from"./vue-18ee037d.js";import{N as g}from"./index-fb7a0cf7.js";const h=["xlink:href"],y=p({__name:"index",props:{prefix:{type:String,default:"icon"},icon:{type:String,required:!0},size:{type:[Number,String],default:16},infinite:{type:Boolean,default:!1}},setup(i){const s=i,r=f(),a=o(()=>`#${s.prefix}-${s.icon}`),c=o(()=>{const e=["svg-icon",t(r).class];return s.infinite&&e.push("svg-icon__infinite"),e}),l=o(()=>{const{size:e}=s,n=`${`${e}`.replace("px","")}px`;return{width:n,height:n}});return(e,n)=>(u(),d("svg",{class:m(t(c)),style:x(t(l)),"aria-hidden":"true"},[_("use",{"xlink:href":t(a)},null,8,h)],6))}}),z=g(y,[["__scopeId","data-v-2cfda6f1"]]);export{z as S};
+import{d as p,S as f,e as o,u as t,U as u,V as d,a8 as _,W as m,X as x}from"./vue-18ee037d.js";import{N as g}from"./index-122302b9.js";const h=["xlink:href"],y=p({__name:"index",props:{prefix:{type:String,default:"icon"},icon:{type:String,required:!0},size:{type:[Number,String],default:16},infinite:{type:Boolean,default:!1}},setup(i){const s=i,r=f(),a=o(()=>`#${s.prefix}-${s.icon}`),c=o(()=>{const e=["svg-icon",t(r).class];return s.infinite&&e.push("svg-icon__infinite"),e}),l=o(()=>{const{size:e}=s,n=`${`${e}`.replace("px","")}px`;return{width:n,height:n}});return(e,n)=>(u(),d("svg",{class:m(t(c)),style:x(t(l)),"aria-hidden":"true"},[_("use",{"xlink:href":t(a)},null,8,h)],6))}}),z=g(y,[["__scopeId","data-v-2cfda6f1"]]);export{z as S};

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-88517def.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-8c1b53c2.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-92754d13.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-94b4cdae.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-977bc6d2.js


+ 1 - 0
media/assets/index-99f624da.css

@@ -0,0 +1 @@
+.box[data-v-5d72656b]{border-radius:6px;width:100%;height:0;padding-bottom:56.25%;position:relative;overflow:hidden}.light-col[data-v-5d72656b],.dark-col[data-v-5d72656b]{padding:2px;border-radius:6px}.light-col[data-v-5d72656b]:not(.isFullscreen){box-shadow:4px 4px 8px 4px #dedede}.light-col:not(.isFullscreen).active[data-v-5d72656b]{border:2px solid #989dfb}.dark-col[data-v-5d72656b]:not(.isFullscreen){box-shadow:4px 4px 8px 4px #2f2f2f}.dark-col:not(.isFullscreen).active[data-v-5d72656b]{border:2px solid #6b6b6b}.video-player-placeholder[data-v-5d72656b]{border-radius:6px;width:100%;height:0;padding-bottom:56.25%;position:relative;overflow:hidden;background:rgba(0,0,0,.7);color:#c2c3c3}.video-player-placeholder .no-stream-tip[data-v-5d72656b]{position:absolute;top:50%;left:50%;transform:translate(-50%) translateY(-50%);text-align:center}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-9c67e701.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-ac918f8f.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-af741fec.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-bd60fcbe.js


+ 1 - 0
media/assets/index-c13eac51.js

@@ -0,0 +1 @@
+import{r as f,a as o,R as p}from"./Group-ea2dcc3a.js";import{u as c,b as i}from"./index-122302b9.js";import{d as m,c as C,f as v}from"./vue-18ee037d.js";const R=m({compatConfig:{MODE:3},name:"ARadioButton",props:f(),setup:function(r,s){var u=s.slots,d=c("radio-button",r),l=d.prefixCls,n=C("radioGroupContext",void 0);return function(){var a,t=i(i({},r),{},{prefixCls:l.value});return n&&(t.onChange=n.onRadioChange,t.checked=t.value===n.stateValue.value,t.disabled=t.disabled||n.props.disabled),v(o,t,{default:function(){return[(a=u.default)===null||a===void 0?void 0:a.call(u)]}})}}});o.Group=p;o.Button=R;o.install=function(e){return e.component(o.name,o),e.component(o.Group.name,o.Group),e.component(o.Button.name,o.Button),e};export{R};

+ 1 - 1
media/assets/index-18c77c93.js → media/assets/index-cc7f4b20.js

@@ -1 +1 @@
-import{l as p,u as S,d as a,b as d,f as D}from"./index-fb7a0cf7.js";import{d as _,e as r,f as v}from"./vue-18ee037d.js";var b=function(){return{prefixCls:String,type:{type:String,default:"horizontal"},dashed:{type:Boolean,default:!1},orientation:{type:String,default:"center"},plain:{type:Boolean,default:!1},orientationMargin:[String,Number]}},P=_({compatConfig:{MODE:3},name:"ADivider",props:b(),setup:function(n,g){var l=g.slots,u=S("divider",n),o=u.prefixCls,h=u.direction,c=r(function(){return n.orientation==="left"&&n.orientationMargin!=null}),f=r(function(){return n.orientation==="right"&&n.orientationMargin!=null}),m=r(function(){var t,i=n.type,x=n.dashed,M=n.plain,e=o.value;return t={},a(t,e,!0),a(t,"".concat(e,"-").concat(i),!0),a(t,"".concat(e,"-dashed"),!!x),a(t,"".concat(e,"-plain"),!!M),a(t,"".concat(e,"-rtl"),h.value==="rtl"),a(t,"".concat(e,"-no-default-orientation-margin-left"),c.value),a(t,"".concat(e,"-no-default-orientation-margin-right"),f.value),t}),y=r(function(){var t=typeof n.orientationMargin=="number"?"".concat(n.orientationMargin,"px"):n.orientationMargin;return d(d({},c.value&&{marginLeft:t}),f.value&&{marginRight:t})}),C=r(function(){return n.orientation.length>0?"-"+n.orientation:n.orientation});return function(){var t,i=D((t=l.default)===null||t===void 0?void 0:t.call(l));return v("div",{class:[m.value,i.length?"".concat(o.value,"-with-text ").concat(o.value,"-with-text").concat(C.value):""],role:"separator"},[i.length?v("span",{class:"".concat(o.value,"-inner-text"),style:y.value},[i]):null])}}});const I=p(P);export{I as D};
+import{l as p,u as S,d as a,b as d,f as D}from"./index-122302b9.js";import{d as _,e as r,f as v}from"./vue-18ee037d.js";var b=function(){return{prefixCls:String,type:{type:String,default:"horizontal"},dashed:{type:Boolean,default:!1},orientation:{type:String,default:"center"},plain:{type:Boolean,default:!1},orientationMargin:[String,Number]}},P=_({compatConfig:{MODE:3},name:"ADivider",props:b(),setup:function(n,g){var l=g.slots,u=S("divider",n),o=u.prefixCls,h=u.direction,c=r(function(){return n.orientation==="left"&&n.orientationMargin!=null}),f=r(function(){return n.orientation==="right"&&n.orientationMargin!=null}),m=r(function(){var t,i=n.type,x=n.dashed,M=n.plain,e=o.value;return t={},a(t,e,!0),a(t,"".concat(e,"-").concat(i),!0),a(t,"".concat(e,"-dashed"),!!x),a(t,"".concat(e,"-plain"),!!M),a(t,"".concat(e,"-rtl"),h.value==="rtl"),a(t,"".concat(e,"-no-default-orientation-margin-left"),c.value),a(t,"".concat(e,"-no-default-orientation-margin-right"),f.value),t}),y=r(function(){var t=typeof n.orientationMargin=="number"?"".concat(n.orientationMargin,"px"):n.orientationMargin;return d(d({},c.value&&{marginLeft:t}),f.value&&{marginRight:t})}),C=r(function(){return n.orientation.length>0?"-"+n.orientation:n.orientation});return function(){var t,i=D((t=l.default)===null||t===void 0?void 0:t.call(l));return v("div",{class:[m.value,i.length?"".concat(o.value,"-with-text ").concat(o.value,"-with-text").concat(C.value):""],role:"separator"},[i.length?v("span",{class:"".concat(o.value,"-inner-text"),style:y.value},[i]):null])}}});const I=p(P);export{I as D};

+ 0 - 2
media/assets/index-cfb53c3e.js

@@ -1,2 +0,0 @@
-import{bv as c,u as p,b as d}from"./index-fb7a0cf7.js";import{r as m,a as n,R as v}from"./Group-2a62786c.js";import{d as b,c as y,f as C}from"./vue-18ee037d.js";function _(e,f){var r=typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=c(e))||f&&e&&typeof e.length=="number"){r&&(e=r);var i=0,l=function(){};return{s:l,n:function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(a){throw a},f:l}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var s=!0,o=!1,u;return{s:function(){r=r.call(e)},n:function(){var a=r.next();return s=a.done,a},e:function(a){o=!0,u=a},f:function(){try{!s&&r.return!=null&&r.return()}finally{if(o)throw u}}}}const h=b({compatConfig:{MODE:3},name:"ARadioButton",props:m(),setup:function(f,r){var i=r.slots,l=p("radio-button",f),s=l.prefixCls,o=y("radioGroupContext",void 0);return function(){var u,t=d(d({},f),{},{prefixCls:s.value});return o&&(t.onChange=o.onRadioChange,t.checked=t.value===o.stateValue.value,t.disabled=t.disabled||o.props.disabled),C(n,t,{default:function(){return[(u=i.default)===null||u===void 0?void 0:u.call(i)]}})}}});n.Group=v;n.Button=h;n.install=function(e){return e.component(n.name,n),e.component(n.Group.name,n.Group),e.component(n.Button.name,n.Button),e};export{h as R,_};

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-custom-eeb1433a.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-custom-f40139d9.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-d1fbd179.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-d2e88a73.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-da75f993.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-dc0750b5.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-f9b23daa.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-hk-3ae4014e.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-hk-8ff14e80.js


+ 1 - 0
media/assets/index-hk-bea73e7b.css

@@ -0,0 +1 @@
+.video-container[data-v-84fe96fb]{width:100%;height:100%;position:relative;display:flex;justify-content:center;align-items:center}.video-container .container-shell[data-v-84fe96fb]{width:100%;height:100%;position:relative;background:rgba(13,14,27,.7);border-radius:6px;overflow:hidden}.video-container .player-container[data-v-84fe96fb]{height:100%!important;min-height:56.25%!important}.video-container .player-container[data-v-84fe96fb]{width:100%;padding-bottom:56.25%;position:relative}.video-container .player-container[data-v-84fe96fb] .parent-wnd{position:absolute!important}.video-container .player-container[data-v-84fe96fb] .parent-wnd{top:0;left:0;right:0;bottom:0;width:100%;height:100%}.video-container .player-container[data-v-84fe96fb] .parent-wnd .sub-wnd{width:100%!important;height:100%!important;border:none!important}.video-container .loading[data-v-84fe96fb]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:99}.dark .container-shell[data-v-84fe96fb]{box-shadow:4px 4px 8px 4px #2f2f2f}.box[data-v-7aa2323e]{border-radius:6px;width:100%;height:0;padding-bottom:56.25%;position:relative;overflow:hidden}.light-col[data-v-7aa2323e],.dark-col[data-v-7aa2323e]{padding:2px;border-radius:6px}.light-col[data-v-7aa2323e]:not(.isFullscreen){box-shadow:4px 4px 8px 4px #dedede}.light-col:not(.isFullscreen).active[data-v-7aa2323e]{border:2px solid #989dfb}.dark-col[data-v-7aa2323e]:not(.isFullscreen){box-shadow:4px 4px 8px 4px #2f2f2f}.dark-col:not(.isFullscreen).active[data-v-7aa2323e]{border:2px solid #6b6b6b}.video-player-placeholder[data-v-7aa2323e]{border-radius:6px;width:100%;height:0;padding-bottom:56.25%;position:relative;overflow:hidden;background:rgba(0,0,0,.7);color:#c2c3c3}.video-player-placeholder .no-stream-tip[data-v-7aa2323e]{position:absolute;top:50%;left:50%;transform:translate(-50%) translateY(-50%);text-align:center}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index-hk-de770e7f.js


+ 0 - 1
media/assets/index.vue_vue_type_script_setup_true_lang-6f6a42cc.js

@@ -1 +0,0 @@
-import{d as b,k as g,w as _,U as v,V as M,a4 as Y}from"./vue-18ee037d.js";import{d as N}from"./dayjs-4778c158.js";import{bN as O,bO as E,aj as S,bP as h,bQ as y}from"./index-fb7a0cf7.js";var j="[object Number]";function w(s){return typeof s=="number"||O(s)&&E(s)==j}const A="YYYY-MM-DD HH:mm:ss",H="YYYY-MM-DD",i=N,k=(s,r=A)=>i(s).format(r),B=(s,r=H)=>i(s).format(r),x=b({__name:"index",props:{value:{type:[Number,String]},step:{type:Number,default:60},mode:{type:String,default:"relative",validator:s=>["date","datetime","relative"].includes(s)}},setup(s){const r=s,l=1e3,f=l*60,m=f*60,d=m*24,c=g("");S(T,r.step*l),_(()=>r.value,()=>{T()},{immediate:!0});function p(){const{value:e}=r;let a=0;if(w(e)){const o=e.toString().length>10?e:e*1e3;a=new Date(o).getTime()}else h(e)?a=new Date(e).getTime():y(e)&&(a=e.getTime());return a}function T(){const{mode:e,value:a}=r,o=p();e==="relative"?c.value=D(o):e==="datetime"?c.value=k(a):e==="date"&&(c.value=B(a))}function D(e){const a=new Date().getTime(),o=i(e).isBefore(a);let t=a-e;o||(t=-t);let n="",u=o?"前":"后";return t<l?n="刚刚":t<f?n=parseInt(`${t/l}`)+"秒"+u:t>=f&&t<m?n=Math.floor(t/f)+"分钟"+u:t>=m&&t<d?n=Math.floor(t/m)+"小时"+u:t>=d&&t<262386e4?n=Math.floor(t/d)+"天"+u:t>=262386e4&&t<=3156786e4&&o?n=i(e).format("MM-DD-HH-mm"):n=i(e).format("YYYY"),n}return(e,a)=>(v(),M("span",null,Y(c.value),1))}});export{x as _};

+ 1 - 0
media/assets/index.vue_vue_type_script_setup_true_lang-7edaf647.js

@@ -0,0 +1 @@
+import{d as b,k as g,w as _,U as v,V as M,a4 as Y}from"./vue-18ee037d.js";import{d as O}from"./dayjs-4778c158.js";import{bO as E,bP as N,ai as S,bQ as h,bR as y}from"./index-122302b9.js";var w="[object Number]";function A(s){return typeof s=="number"||E(s)&&N(s)==w}const H="YYYY-MM-DD HH:mm:ss",R="YYYY-MM-DD",o=O,j=(s,r=H)=>o(s).format(r),k=(s,r=R)=>o(s).format(r),x=b({__name:"index",props:{value:{type:[Number,String]},step:{type:Number,default:60},mode:{type:String,default:"relative",validator:s=>["date","datetime","relative"].includes(s)}},setup(s){const r=s,l=1e3,f=l*60,m=f*60,d=m*24,c=g("");S(T,r.step*l),_(()=>r.value,()=>{T()},{immediate:!0});function p(){const{value:e}=r;let a=0;if(A(e)){const n=e.toString().length>10?e:e*1e3;a=new Date(n).getTime()}else h(e)?a=new Date(e).getTime():y(e)&&(a=e.getTime());return a}function T(){const{mode:e,value:a}=r,n=p();e==="relative"?c.value=D(n):e==="datetime"?c.value=j(a):e==="date"&&(c.value=k(a))}function D(e){const a=new Date().getTime(),n=o(e).isBefore(a);let t=a-e;n||(t=-t);let i="",u=n?"前":"后";return t<l?i="刚刚":t<f?i=parseInt(`${t/l}`)+"秒"+u:t>=f&&t<m?i=Math.floor(t/f)+"分钟"+u:t>=m&&t<d?i=Math.floor(t/m)+"小时"+u:t>=d&&t<262386e4?i=Math.floor(t/d)+"天"+u:t>=262386e4&&t<=3156786e4&&n?i=o(e).format("MM-DD-HH-mm"):i=o(e).format("YYYY"),i}return(e,a)=>(v(),M("span",null,Y(c.value),1))}});export{x as _};

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/index.vue_vue_type_script_setup_true_lang-e3083022.js


+ 1 - 0
media/assets/jb4-60518ffa.js

@@ -0,0 +1 @@
+import{d as p,k as l,o as _,w as m,x as y,U as i,V as h,a8 as u,$ as v,u as b,a3 as g,af as w}from"./vue-18ee037d.js";import"./dayjs-4778c158.js";import{af as B,aw as k,N as P}from"./index-122302b9.js";const x={class:"video-container"},V={class:"container-shell"},C=p({__name:"jb4",props:{videoShadow:null,streamPath:null,format:null},setup(c){const a=c,d=window.Jessibuca,t=l(!0),s=l(null);let e=null;const n=()=>{s.value&&(e=new d({container:s.value,videoBuffer:.2,isResize:!1,text:"",loadingText:"加载中...",debug:!1,hotKey:!1,autoWasm:!0,heartTimeout:5,timeout:10,supportDblclickFullscreen:!1,operateBtns:{fullscreen:!0,play:!0,audio:!0,screenshot:!0}}),e.on("load",()=>{t.value=!1}),e.on("error",()=>{t.value=!1}),e.play(`${k("hdl","")}/${a.streamPath}.flv`))};_(()=>{a.streamPath,a.streamPath&&r()}),m(()=>a.streamPath,o=>{o&&r()});function r(){e?e.destroy().then(n):n()}y(f);async function f(){e&&(await e.destroy(),e=null)}return(o,$)=>(i(),h("div",x,[u("div",V,[u("div",{ref_key:"playerContainer",ref:s,class:"player-container"},null,512),t.value?(i(),v(b(B),{key:0,class:"loading",size:"large"})):g("",!0),w(o.$slots,"default",{},void 0,!0)])]))}});const j=P(C,[["__scopeId","data-v-582b335d"]]);export{j as V};

+ 1 - 0
media/assets/jb4-a8f6a6bf.css

@@ -0,0 +1 @@
+.video-container[data-v-582b335d]{width:100%;height:100%;position:relative;display:flex;justify-content:center;align-items:center}.video-container .container-shell[data-v-582b335d]{width:100%;height:100%;position:relative;background:rgba(13,14,27,.7);border-radius:6px;overflow:hidden}.video-container .player-container[data-v-582b335d]{height:100%!important;min-height:56.25%!important}.video-container .player-container[data-v-582b335d]{width:100%;padding-bottom:56.25%}.video-container .loading[data-v-582b335d]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:99}.dark .container-shell[data-v-582b335d]{box-shadow:4px 4px 8px 4px #2f2f2f}

+ 0 - 1
media/assets/jb4-ae804964.css

@@ -1 +0,0 @@
-.video-container[data-v-5ebd9086]{width:100%;height:100%;position:relative;display:flex;justify-content:center;align-items:center}.video-container .container-shell[data-v-5ebd9086]{width:100%;height:100%;position:relative;background:rgba(13,14,27,.7);border-radius:6px;overflow:hidden}.video-container .player-container[data-v-5ebd9086]{height:100%!important;min-height:56.25%!important}.video-container .player-container[data-v-5ebd9086]{width:100%;padding-bottom:56.25%}.video-container .loading[data-v-5ebd9086]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:99}.dark .container-shell[data-v-5ebd9086]{box-shadow:4px 4px 8px 4px #2f2f2f}

+ 0 - 1
media/assets/jb4-f8fd23c7.js

@@ -1 +0,0 @@
-import{d,k as r,o as f,w as p,x as _,U as i,V as m,a8 as c,$ as v,u as h,a3 as y,af as g}from"./vue-18ee037d.js";import"./dayjs-4778c158.js";import{af as b,av as k,N as B}from"./index-fb7a0cf7.js";const P={class:"video-container"},w={class:"container-shell"},x=d({__name:"jb4",props:{videoShadow:null,streamPath:null,format:null},setup(u){const a=u,t=r(!0),o=r(null);let e=null;const l=()=>{o.value&&(e=new window.Jessibuca({container:o.value,videoBuffer:.2,isResize:!1,text:"",loadingText:"加载中...",debug:!1,hotKey:!1,autoWasm:!0,heartTimeout:5,timeout:10,supportDblclickFullscreen:!1}),e.on("load",()=>{t.value=!1}),e.on("error",()=>{t.value=!1}),e.play(`${k("hdl","")}/${a.streamPath}.flv`))};f(()=>{a.streamPath,a.streamPath&&l()}),p(()=>a.streamPath,s=>{s&&(n(),l())}),_(n);function n(){e&&(e.destroy(),e=null)}return(s,V)=>(i(),m("div",P,[c("div",w,[c("div",{ref_key:"playerContainer",ref:o,class:"player-container"},null,512),t.value?(i(),v(h(b),{key:0,class:"loading",size:"large"})):y("",!0),g(s.$slots,"default",{},void 0,!0)])]))}});const S=B(x,[["__scopeId","data-v-5ebd9086"]]);export{S as V};

+ 1 - 0
media/assets/operate.vue_vue_type_script_setup_true_lang-01dc861c.js

@@ -0,0 +1 @@
+import{d as u,Z as f,U as D,V as v,a8 as i,f as a,u as e,E as s,a0 as o,a4 as c,F as x,e as y}from"./vue-18ee037d.js";import"./dayjs-4778c158.js";import{J as h,ag as l}from"./index-122302b9.js";import{u as I}from"./audio_decoder_hard-e133cc4e.js";import{D as g}from"./index-cc7f4b20.js";import{D as n,a as S}from"./index-8c1b53c2.js";import{D as k,p as N}from"./index-7e9674b9.js";import{a as _}from"./gb28281-53c246af.js";const z={class:"p-16px m0 text-text"},R=u({__name:"deviceInfo",setup(b){const{getActiveInfo:t}=f(I());return(r,p)=>(D(),v(x,null,[i("h4",z,[a(e(h),{icon:"icon-park-solid:view-grid-detail",class:"v-text-bottom"}),s(" 设备信息 ")]),a(e(g),{class:"m0"}),a(e(S),{class:"p-16px p-b-0",column:1},{default:o(()=>[a(e(n),{label:"设备名称"},{default:o(()=>[s(c(e(t).DeviceName||"--"),1)]),_:1}),a(e(n),{label:"设备编号"},{default:o(()=>[s(c(e(t).ID||"--"),1)]),_:1}),a(e(n),{label:"通道名称"},{default:o(()=>[s(c(e(t).Name||"--"),1)]),_:1}),a(e(n),{label:"通道编号"},{default:o(()=>[s(c(e(t).DeviceID||"--"),1)]),_:1})]),_:1})],64))}}),B={class:"p-16px m0 text-text"},C={class:"pt-30px"},U=u({__name:"operate",setup(b){const{getActiveInfo:t}=f(I()),r=y(()=>!!t.value.ID),p=async m=>{l.destroy(),await _({id:t.value.ID,channel:t.value.DeviceID,ptzcmd:m}).then(async d=>{l.success("指令发送成功"),w()}).catch(d=>{l.success("指令发送失败")})},w=()=>{setTimeout(async()=>{await _({id:t.value.ID,channel:t.value.DeviceID,ptzcmd:N()})})};return(m,d)=>(D(),v(x,null,[i("h4",B,[a(e(h),{icon:"icon-park-solid:scan-setting",class:"v-text-bottom"}),s(" 设备操作 ")]),a(e(g),{class:"m0"}),i("div",C,[a(k,{hanldeClick:p,allowed:e(r)},null,8,["allowed"])])],64))}});export{R as _,U as a};

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/preview-551cfed2.js


+ 1 - 0
media/assets/preview-fcd2eb5b.css

@@ -0,0 +1 @@
+.box[data-v-4d8bb058]{border-radius:6px;width:100%;height:0;padding-bottom:56.25%;position:relative;overflow:hidden}.video-container[data-v-4d8bb058] .container-shell{border-radius:0!important}.video-container[data-v-4d8bb058] .player-container{width:100vw!important;height:100vh!important}

+ 1 - 1
media/assets/scroll-tip.vue_vue_type_script_setup_true_lang-220057c8.js → media/assets/scroll-tip.vue_vue_type_script_setup_true_lang-302683f3.js

@@ -1 +1 @@
-import{d as s,u as n,U as a,V as i,f as c,E as r,a3 as d}from"./vue-18ee037d.js";import"./dayjs-4778c158.js";import{bH as p,J as m}from"./index-fb7a0cf7.js";const f={key:0},b=s({__name:"scroll-tip",props:{windowWidth:{type:Number,default:1/0}},setup(e){const t=e,{width:o}=p();return(u,_)=>n(o)<t.windowWidth?(a(),i("p",f,[c(m,{icon:"ic:baseline-tips-and-updates",class:"v-text-bottom"}),r(" 当列表出现横向滚动条时,windows可通过【按住shift键+鼠标滚轮】mac通过【在鼠标上左右滑动】来快速查看 ")])):d("",!0)}});export{b as _};
+import{d as s,u as n,U as a,V as i,f as c,E as r,a3 as d}from"./vue-18ee037d.js";import"./dayjs-4778c158.js";import{bI as p,J as m}from"./index-122302b9.js";const f={key:0},b=s({__name:"scroll-tip",props:{windowWidth:{type:Number,default:1/0}},setup(e){const t=e,{width:o}=p();return(u,_)=>n(o)<t.windowWidth?(a(),i("p",f,[c(m,{icon:"ic:baseline-tips-and-updates",class:"v-text-bottom"}),r(" 当列表出现横向滚动条时,windows可通过【按住shift键+鼠标滚轮】mac通过【在鼠标上左右滑动】来快速查看 ")])):d("",!0)}});export{b as _};

+ 1 - 1
media/assets/scrollTo-d2a6c94e.js → media/assets/scrollTo-854a9ced.js

@@ -1 +1 @@
-import{an as s}from"./index-fb7a0cf7.js";function c(n){return n!=null&&n===n.window}function T(n,e){if(typeof window>"u")return 0;var i=e?"scrollTop":"scrollLeft",o=0;if(c(n)?o=n[e?"pageYOffset":"pageXOffset"]:n instanceof Document?o=n.documentElement[i]:n&&(o=n[i]),n&&!c(n)&&typeof o!="number"){var r;o=(r=(n.ownerDocument||n).documentElement)===null||r===void 0?void 0:r[i]}return o}function D(n,e,i,o){var r=i-e;return n/=o/2,n<1?r/2*n*n*n+e:r/2*((n-=2)*n*n+2)+e}function O(n){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=e.getContainer,o=i===void 0?function(){return window}:i,r=e.callback,l=e.duration,u=l===void 0?450:l,a=o(),d=T(a,!0),m=Date.now(),p=function v(){var w=Date.now(),f=w-m,t=D(f>u?u:f,d,n,u);c(a)?a.scrollTo(window.pageXOffset,t):a instanceof HTMLDocument||a.constructor.name==="HTMLDocument"?a.documentElement.scrollTop=t:a.scrollTop=t,f<u?s(v):typeof r=="function"&&r()};s(p)}export{T as g,O as s};
+import{ao as s}from"./index-122302b9.js";function c(n){return n!=null&&n===n.window}function T(n,e){if(typeof window>"u")return 0;var i=e?"scrollTop":"scrollLeft",o=0;if(c(n)?o=n[e?"pageYOffset":"pageXOffset"]:n instanceof Document?o=n.documentElement[i]:n&&(o=n[i]),n&&!c(n)&&typeof o!="number"){var r;o=(r=(n.ownerDocument||n).documentElement)===null||r===void 0?void 0:r[i]}return o}function D(n,e,i,o){var r=i-e;return n/=o/2,n<1?r/2*n*n*n+e:r/2*((n-=2)*n*n+2)+e}function O(n){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=e.getContainer,o=i===void 0?function(){return window}:i,r=e.callback,l=e.duration,u=l===void 0?450:l,a=o(),d=T(a,!0),m=Date.now(),p=function v(){var w=Date.now(),f=w-m,t=D(f>u?u:f,d,n,u);c(a)?a.scrollTo(window.pageXOffset,t):a instanceof HTMLDocument||a.constructor.name==="HTMLDocument"?a.documentElement.scrollTop=t:a.scrollTop=t,f<u?s(v):typeof r=="function"&&r()};s(p)}export{T as g,O as s};

+ 1 - 1
media/assets/state-afceff69.js → media/assets/state-5cad7cc8.js

@@ -1 +1 @@
-import{f as o,E as t}from"./vue-18ee037d.js";import"./dayjs-4778c158.js";import{J as l}from"./index-fb7a0cf7.js";const a={0:o("span",null,[o(l,{icon:"streamline:interface-page-controller-loading-half-progress-loading-load-half-wait-waiting",class:"v-text-bottom mr-8px"},null),t("等待发布者")]),1:o("span",null,[o(l,{icon:"guidance:waiting-room",class:"v-text-bottom mr-8px"},null),t("等待激活")]),2:o("span",null,[o(l,{icon:"ic:round-published-with-changes",color:"green",class:"v-text-bottom mr-8px"},null),t("发布中")]),3:o("span",null,[o(l,{icon:"bx:lock-open",class:"v-text-bottom mr-8px"},null),t("等待关闭")]),4:o("span",null,[o(l,{icon:"ic:baseline-lock",color:"red",class:"v-text-bottom mr-8px"},null),t("已关闭")])},c={0:"发布",1:"音视频轨道激活",2:"发布流长时间没有数据/长时间没有发布者发布流/等待关闭时间到",3:"发布者关闭",4:"主动关闭流",5:"最后一个订阅者离开",6:"第一个订阅者进入",7:"没有音视频轨道"},r=({state:n})=>a[n];export{c as H,r as S,a as s};
+import{f as o,E as t}from"./vue-18ee037d.js";import"./dayjs-4778c158.js";import{J as l}from"./index-122302b9.js";const a={0:o("span",null,[o(l,{icon:"streamline:interface-page-controller-loading-half-progress-loading-load-half-wait-waiting",class:"v-text-bottom mr-8px"},null),t("等待发布者")]),1:o("span",null,[o(l,{icon:"guidance:waiting-room",class:"v-text-bottom mr-8px"},null),t("等待激活")]),2:o("span",null,[o(l,{icon:"ic:round-published-with-changes",color:"green",class:"v-text-bottom mr-8px"},null),t("发布中")]),3:o("span",null,[o(l,{icon:"bx:lock-open",class:"v-text-bottom mr-8px"},null),t("等待关闭")]),4:o("span",null,[o(l,{icon:"ic:baseline-lock",color:"red",class:"v-text-bottom mr-8px"},null),t("已关闭")])},c={0:"发布",1:"音视频轨道激活",2:"发布流长时间没有数据/长时间没有发布者发布流/等待关闭时间到",3:"发布者关闭",4:"主动关闭流",5:"最后一个订阅者离开",6:"第一个订阅者进入",7:"没有音视频轨道"},r=({state:n})=>a[n];export{c as H,r as S,a as s};

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/useDetail-83a3c860.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/useFlexGapSupport-791d0eca.js


+ 1 - 1
media/assets/useModal-0673f988.js → media/assets/useModal-3ca524ee.js

@@ -1 +1 @@
-import{f as u,m as f}from"./vue-18ee037d.js";import{B as O,bI as k,bJ as v}from"./index-fb7a0cf7.js";import"./dayjs-4778c158.js";function L({content:l,props:x={},modalConfig:e}){const a=document.createDocumentFragment(),p=u(l,x),n=Object.create({okText:"确定",cancelText:"取消",visible:!0,...e});n.onCancel=async function(t){var r;await((r=e.onCancel)==null?void 0:r.call(e,t)),c()},n.onOk=async function(t){if(!(e.onOk instanceof Function)){c();return}const r=e.onOk(t);if(!(r instanceof Promise)){c();return}return o({confirmLoading:!0}),r.then(()=>{o({confirmLoading:!1}),c()}).catch(()=>{o({confirmLoading:!1})})};const{getDarkMode:b}=O(),s=u(k,n,()=>p),i=u(v,{prefixCls:b},()=>s);e.appContext&&(i.appContext=e.appContext);function o(t){Object.assign(s.component.props,t),s.component.update()}function c(){var t;n.visible=!1,o(n),(t=n==null?void 0:n.onClose)==null||t.call(n)}function m(){i&&f(null,a)}return f(i,a),{...p,close:c,destroy:m,update:o}}export{L as u};
+import{f as u,m as f}from"./vue-18ee037d.js";import{B as O,bJ as k,bK as v}from"./index-122302b9.js";import"./dayjs-4778c158.js";function L({content:l,props:x={},modalConfig:e}){const a=document.createDocumentFragment(),p=u(l,x),n=Object.create({okText:"确定",cancelText:"取消",visible:!0,...e});n.onCancel=async function(t){var r;await((r=e.onCancel)==null?void 0:r.call(e,t)),c()},n.onOk=async function(t){if(!(e.onOk instanceof Function)){c();return}const r=e.onOk(t);if(!(r instanceof Promise)){c();return}return o({confirmLoading:!0}),r.then(()=>{o({confirmLoading:!1}),c()}).catch(()=>{o({confirmLoading:!1})})};const{getDarkMode:b}=O(),s=u(k,n,()=>p),i=u(v,{prefixCls:b},()=>s);e.appContext&&(i.appContext=e.appContext);function o(t){Object.assign(s.component.props,t),s.component.update()}function c(){var t;n.visible=!1,o(n),(t=n==null?void 0:n.onClose)==null||t.call(n)}function m(){i&&f(null,a)}return f(i,a),{...p,close:c,destroy:m,update:o}}export{L as u};

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/usePlay-29f12ad2.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/usePlay-843f5ae8.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/usePlay-db12062a.js


+ 1 - 1
media/assets/utils-9125b9fd.js → media/assets/utils-b8183d44.js

@@ -1 +1 @@
-import{ak as a}from"./index-fb7a0cf7.js";import"./vue-18ee037d.js";const u=()=>a.toDateString(new Date,"HH:ss:mm");function o(t,r){return t.length>=20&&t.shift(),t.push(r),t}const f=t=>Math.round(t/1024*100)/100,h=t=>t<1024?`${t} B`:(t=t/1024,t<1024?`${Math.round(t*100)/100} KB`:(t=t/1024,t<1024?`${Math.round(t*100)/100} MB`:`${Math.round(t*100)/100} GB`));export{u as a,o as b,h as c,f as g};
+import{ak as a}from"./index-122302b9.js";import"./vue-18ee037d.js";const u=()=>a.toDateString(new Date,"HH:ss:mm");function o(t,r){return t.length>=20&&t.shift(),t.push(r),t}const f=t=>Math.round(t/1024*100)/100,h=t=>t<1024?`${t} B`:(t=t/1024,t<1024?`${Math.round(t*100)/100} KB`:(t=t/1024,t<1024?`${Math.round(t*100)/100} MB`:`${Math.round(t*100)/100} GB`));export{u as a,o as b,h as c,f as g};

+ 1 - 0
media/assets/video-view-hk-80398494.css

@@ -0,0 +1 @@
+.light .timeRuleContainer{background:#fff;box-shadow:inset 1px 1px 8px #ddd,4px 4px 4px #ddd}.dark .timeRuleContainer{background:#000;box-shadow:inset 2px 2px 8px #3d3d3d,4px 4px 5px #3d3d3d}.placeholder[data-v-ed654ca9]{border-radius:6px;width:100%;height:0;padding-bottom:56.25%;background:rgba(0,0,0,.7);color:#c2c3c3;position:relative;box-shadow:4px 4px 8px 4px #dedede}.placeholder .tip[data-v-ed654ca9]{position:absolute;top:50%;left:50%;transform:translate(-50%) translateY(-50%);text-align:center}.dark .placeholder[data-v-ed654ca9]{box-shadow:4px 4px 8px 4px #2f2f2f}.video-container[data-v-8ae8e3dc]{width:100%;height:100%;position:relative;display:flex;justify-content:center;align-items:center}.video-container .container-shell[data-v-8ae8e3dc]{width:100%;height:100%;position:relative;background:rgba(13,14,27,.7);border-radius:6px;overflow:hidden}.video-container .player-container[data-v-8ae8e3dc]{height:100%!important;min-height:56.25%!important}.video-container .player-container[data-v-8ae8e3dc]{width:100%;padding-bottom:56.25%;position:relative}.video-container .player-container[data-v-8ae8e3dc] .parent-wnd{position:absolute!important}.video-container .player-container[data-v-8ae8e3dc] .parent-wnd{top:0;left:0;right:0;bottom:0;width:100%;height:100%}.video-container .player-container[data-v-8ae8e3dc] .parent-wnd .sub-wnd{width:100%!important;height:100%!important;border:none!important}.video-container .loading[data-v-8ae8e3dc]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:99}.dark .container-shell[data-v-8ae8e3dc]{box-shadow:4px 4px 8px 4px #2f2f2f}.placeholder[data-v-586ac1aa]{border-radius:6px;width:100%;height:0;padding-bottom:56.25%;background:rgba(0,0,0,.7);color:#c2c3c3;position:relative;box-shadow:4px 4px 8px 4px #dedede}.placeholder .tip[data-v-586ac1aa]{position:absolute;top:50%;left:50%;transform:translate(-50%) translateY(-50%);text-align:center}.dark .placeholder[data-v-586ac1aa]{box-shadow:4px 4px 8px 4px #2f2f2f}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/video-view-hk-e74bf143.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/assets/zh_CN-383c2498.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
media/decoder.js


+ 13 - 0
media/hk-plugins/certificate.pem

@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIICDDCCAXUCFE1KfDCPde4zHYkL+YaxlDn2q0HcMA0GCSqGSIb3DQEBCwUAMEUx
+CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl
+cm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMjEwNzE2MDMxMDExWhcNMjEwODE1MDMx
+MDExWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE
+CgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQC9TaXCBrM+/BoSMy8iZOHKR8yU9642zxrn8wVQQIx4H+r4mCnJ+5Jn
+gg0YRuQIptHJX83/l3Ybtn5Mm37LV8596jGvDl5R5Vzreyq3qHx4dIJFW0ww4nli
+lIA9igamHtWJ5zEzEK84sZIWMdP8AysTEPae7XnnjNCVV/SJeV8oYwIDAQABMA0G
+CSqGSIb3DQEBCwUAA4GBAKZHgKQ/pzCpqVOaMaUFSKSnNHSv09ACPflfcLh3tx+h
+/e4fMQRLioVUykueC8VblimbDWoQBM7RqAnEmj3gIqRjsoGeFviCLbZpUWFWkuxm
++DW0+eDUyXu76U+3/DmlcXghuCV/UNxy9SxDBVGqcZ3FA3ZBHybPVnPV6D1ZaV1I
+-----END CERTIFICATE-----

+ 11 - 0
media/hk-plugins/certrequest.csr

@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBhDCB7gIBADBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEh
+MB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQC9TaXCBrM+/BoSMy8iZOHKR8yU9642zxrn8wVQQIx4H+r4
+mCnJ+5Jngg0YRuQIptHJX83/l3Ybtn5Mm37LV8596jGvDl5R5Vzreyq3qHx4dIJF
+W0ww4nlilIA9igamHtWJ5zEzEK84sZIWMdP8AysTEPae7XnnjNCVV/SJeV8oYwID
+AQABoAAwDQYJKoZIhvcNAQELBQADgYEAk8VvkzyFp677Ls5uK+cP3vfjm5y78Iuv
+8W+IG7hUR7Cki0JmnA7Z2kWAyaYyGNM9hHYl/+WX5BaQ11ngrHCFS2Jy59mQkCdY
+25u6ioGkvM3Tvzurrja9L/0wRmWHZRNB7vC9mMRKDo+Ev+2bFo2btqrpBRCEN9Pp
+uy9kifaxV4w=
+-----END CERTIFICATE REQUEST-----

+ 536 - 0
media/hk-plugins/demo.html

@@ -0,0 +1,536 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<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">
+  <title>H5playerVue</title>
+  <link rel="stylesheet" href="./static/css/antd.min.css">
+  <style>
+    body {
+      padding: 8px 8px 32px;
+    }
+
+    #app {
+      display: none;
+    }
+
+    .actions {
+      padding-left: 8px;
+    }
+
+    .ant-form-item {
+      margin-bottom: 8px
+    }
+
+    .ant-btn {
+      margin-right: 2px;
+    }
+
+    .icon-wrapper {
+      position: relative;
+      padding-left: 20px;
+    }
+
+    .icon-wrapper .anticon {
+      position: absolute;
+      top: -2px;
+      width: 16px;
+      height: 16px;
+      line-height: 1;
+      font-size: 16px;
+      left: 0;
+    }
+
+    ::-webkit-media-controls {
+      display: none !important;
+    }
+
+    @media screen and (max-width: 991px) {
+      #player {
+        width: calc(100vw - 16px);
+        height: calc((100vw - 16px) * 5 / 8);
+      }
+    }
+
+    @media screen and (min-width: 992px) {
+      #player {
+        width: calc(50vw - 8px);
+        height: calc((50vw - 8px) * 5 / 8);
+      }
+    }
+  </style>
+</head>
+
+<body>
+  <div id="app">
+    <a-locale-provider :locale="zh_CN">
+      <a-row>
+        <a-col :span="24" :md="12">
+          <a-affix :offset-top="8">
+            <div id="player"></div>
+          </a-affix>
+          <a-form-item>
+            分屏
+            <a-radio-group v-model="splitNum" @change="arrangeWindow">
+              <a-radio-button :value="1">1x1</a-radio-button>
+              <a-radio-button :value="2">2x2</a-radio-button>
+              <a-radio-button :value="3" v-show="!isMoveDevice">3x3</a-radio-button>
+              <a-radio-button :value="4" v-show="!isMoveDevice">4x4</a-radio-button>
+            </a-radio-group>
+            <a-button @click="wholeFullScreen" v-show="!isMoveDevice">整体全屏</a-button>
+          </a-form-item>
+        </a-col>
+        <a-col :span="24" :md="12">
+          <div class="actions">
+            <a-tabs v-model="tabActive">
+              <a-tab-pane key="mse" tab="普通模式" :disabled="!mseSupport"></a-tab-pane>
+              <a-tab-pane key="decoder" tab="高级模式"></a-tab-pane>
+              <!-- <a-tab-pane key="log" tab="日志"></a-tab-pane> -->
+            </a-tabs>
+
+            <a-form :label-col="labelCol" :wrapper-col="wrapperCol" v-show="tabActive !== 'log'">
+              <a-form-item label="预览URL">
+                <a-input v-model="urls.realplay"></a-input>
+              </a-form-item>
+              <a-form-item label="对讲URL">
+                <a-input v-model="urls.talk"></a-input>
+              </a-form-item>
+              <a-form-item label="预览&对讲">
+                <a-button id="btn-realplay" @click="realplay">开始预览</a-button>
+                <a-button id="btn-realplay-stop" @click="stopPlay">停止预览</a-button>
+                <a-button id="btn-talk-start" @click="talkStart">开始对讲</a-button>
+                <a-button id="btn-talk-stop" @click="talkStop">停止对讲</a-button>
+                <a-button id="btn-stopall" @click="stopAllPlay">停止全部窗口</a-button>
+              </a-form-item>
+
+              <a-form-item label="回放URL">
+                <a-input v-model="urls.playback"></a-input>
+                <br>
+                <a-date-picker show-time placeholder="开始时间" format="YYYY-MM-DD HH:mm:ss" v-model="playback.startTime" :value-format="playback.valueFormat">
+                </a-date-picker>
+                <a-date-picker show-time placeholder="结束时间" format="YYYY-MM-DD HH:mm:ss" v-model="playback.endTime" :value-format="playback.valueFormat">
+                </a-date-picker>
+              </a-form-item>
+              <a-form-item label="回放">
+                <a-button id="btn-playback" @click="playbackStart">开始回放</a-button>
+                <a-button id="btn-playback-pause" @click="playbackPause">暂停</a-button>
+                <a-button id="btn-playback-sesume" @click="playbackResume">恢复</a-button>
+                <a-button id="btn-playback-stop" @click="stopPlay">停止回放</a-button>
+                <br>
+                <a-row>
+                  <a-col :span="16">
+                    <a-button id="btn-playback-slow" @click="playbackSlow">慢放</a-button>
+                    <a-button id="btn-playback-fast" @click="playbackFast">快放</a-button>
+                    <a-button id="btn-playback-one" @click="frameForward" v-show="tabActive === 'decoder'">单帧</a-button>
+                    <br>
+                    <a-date-picker show-time placeholder="开始时间" format="YYYY-MM-DD HH:mm:ss" v-model="playback.seekStart" :value-format="playback.valueFormat">
+                    </a-date-picker>
+                    &nbsp;<a-button @click="seekTo">定位</a-button>
+                  </a-col>
+                  <a-col :span="8">
+                    <a-statistic title="当前播放速度" :value="playback.rate"></a-statistic>
+                  </a-col>
+                </a-row>
+              </a-form-item>
+
+              <a-form-item label="声音">
+                <a-row>
+                  <a-col :span="10">
+                    <a-button id="btn-sound-open" @click="openSound">开启</a-button>
+                    <a-button id="btn-sound-close" @click="closeSound">关闭</a-button>
+                  </a-col>
+                  <a-col :span="12">
+                    <div class="icon-wrapper">
+                      <a-icon v-if="muted" :component="volumeOffSvg"></a-icon>
+                      <a-icon v-else :component="volumeOnSvg"></a-icon>
+                      <a-slider v-model="volume" :default-value="50" :disabled="muted" @change="setVolume"></a-slider>
+                    </div>
+                  </a-col>
+                </a-row>
+              </a-form-item>
+
+              <a-form-item label="抓图&录像">
+                <a-button id="btn-capture-jpeg" @click="capture()">抓图</a-button>
+                <br>
+                <a-button id="btn-record-mp4" @click="recordStart('MP4')">录制MP4</a-button>
+                <a-button id="btn-record-ps" @click="recordStart('PS')">录制PS</a-button>
+                <a-button id="btn-record-save" @click="recordStop">停止录制并保存文件</a-button>
+              </a-form-item>
+
+              <a-form-item label="视频信息&OSD时间">
+                <a-button id="btn-video-info" @click="getvideoInfo">获取视频信息</a-button>
+                <a-button id="btn-ose-time" @click="getOSDTime">获取OSD时间</a-button>
+              </a-form-item>
+
+              <a-form-item label="电子放大&智能信息" v-show="tabActive === 'decoder'">
+                <a-button id="btn-enlarge-open" @click="enlarge">开启电子放大</a-button>
+                <a-button id="btn-enlarge-close" @click="enlargeClose">关闭电子放大</a-button>
+                <a-button id="btn-intellect-open" @click="intellectTrigger(true)">开启智能信息</a-button>
+                <a-button id="btn-intellect-close" @click="intellectTrigger(false)">关闭智能信息</a-button>
+              </a-form-item>
+            </a-form>
+          </div>
+        </a-col>
+      </a-row>
+    </a-locale-provider>
+  </div>
+
+  <template id="play-log">
+    <div></div>
+  </template>
+
+  <!-- 移动端调试 -->
+  <!-- <script src="./static/js/vconsole.min.js"></script>
+  <script>
+      const vc = new VConsole()
+  </script> -->
+
+  <script src="./static/js/moment.js"></script>
+  <script src="./static/js/vue.js"></script>
+  <script src="./static/js/antd.min.js"></script>
+  <script src="./static/js/antd-with-locales.min.js"></script>
+  <script src="./h5player.min.js"></script>
+  <script>
+    const { LocaleProvider, locales } = window.antd
+    moment.locale('./static/js/zh-cn.js')
+
+    const IS_MOVE_DEVICE = document.body.clientWidth < 992 // 是否移动设备
+    const MSE_IS_SUPPORT = !!window.MediaSource // 是否支持mse
+
+    // const Log = Vue.component('log', {
+    //   template: '#play-log',
+    //   data() {
+    //     return {
+
+    //     }
+    //   },
+    //   methods: {
+    //   }
+    // })
+
+    const app = new Vue({
+      el: '#app',
+      // components: { Log },
+      data() {
+        return {
+          zh_CN: locales.zh_CN,
+          isMoveDevice: IS_MOVE_DEVICE,
+          player: null,
+          splitNum: IS_MOVE_DEVICE ? 1 : 2,
+          mseSupport: MSE_IS_SUPPORT,
+          tabActive: MSE_IS_SUPPORT ? 'mse' : 'decoder',
+          labelCol: { span: 5 },
+          wrapperCol: { span: 18 },
+          urls: {
+            realplay: 'ws://10.19.147.22:559/EUrl/q2jQie4',
+            talk: 'wss://10.41.163.126:6014/proxy/10.41.163.126:559/EUrl/6gFx47S',
+            playback: 'wss://10.41.163.126:6014/proxy/10.41.163.126:559/EUrl/6gFx47S'
+          },
+          playback: {
+            startTime: '2021-07-26T00:00:00',
+            endTime: '2021-07-26T23:59:59',
+            valueFormat: moment.HTML5_FMT.DATETIME_LOCAL_SECONDS,
+            seekStart: '2021-07-26T12:00:00',
+            rate: ''
+          },
+          muted: true,
+          volume: 50,
+          volumeOnSvg: {
+            template: '<svg t="1624453273744" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1421" width="200" height="200"><path d="M597.994667 138.005333q130.005333 28.010667 213.994667 132.992t84.010667 241.002667-84.010667 241.002667-213.994667 132.992l0-88q93.994667-28.010667 153.002667-106.005333t59.008-180.010667-59.008-180.010667-153.002667-106.005333l0-88zM704 512q0 120-106.005333 172.010667l0-344q106.005333 52.010667 106.005333 172.010667zM128 384l170.005333 0 213.994667-213.994667 0 684.010667-213.994667-213.994667-170.005333 0 0-256z" p-id="1422"></path></svg>'
+          },
+          volumeOffSvg: {
+            template: '<svg t="1624453193279" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9147" width="200" height="200"><path d="M512 170.005333l0 180.010667-90.005333-90.005333zM181.994667 128l714.005333 714.005333-53.994667 53.994667-88-88q-74.005333 58.005333-156.010667 77.994667l0-88q50.005333-13.994667 96-50.005333l-181.994667-181.994667 0 288-213.994667-213.994667-170.005333 0 0-256 202.005333 0-202.005333-202.005333zM810.005333 512q0-101.994667-59.008-180.010667t-153.002667-106.005333l0-88q130.005333 28.010667 213.994667 132.992t84.010667 241.002667q0 96-44.010667 178.005333l-64-66.005333q21.994667-53.994667 21.994667-112zM704 512q0 18.005333-2.005333 26.005333l-104-104 0-93.994667q106.005333 52.010667 106.005333 172.010667z" p-id="9148"></path></svg>'
+          }
+        }
+      },
+      computed: {
+        mode: function () {
+          return this.tabActive === 'mse' ? 0 : 1
+        }
+      },
+      methods: {
+        init() {
+          // 设置播放容器的宽高并监听窗口大小变化
+          window.addEventListener('resize', () => {
+            this.player.JS_Resize()
+          })
+        },
+        createPlayer() {
+          this.player = new window.JSPlugin({
+            szId: 'player',
+            szBasePath: "./",
+            iMaxSplit: 4,
+            iCurrentSplit: IS_MOVE_DEVICE ? 1 : 2,
+            openDebug: true,
+            oStyle: {
+              borderSelect: IS_MOVE_DEVICE ? '#000' : '#FFCC00',
+            }
+          })
+
+          console.log({
+            szId: 'player',
+            szBasePath: "./",
+            iMaxSplit: 4,
+            iCurrentSplit: IS_MOVE_DEVICE ? 1 : 2,
+            openDebug: true,
+            oStyle: {
+              borderSelect: IS_MOVE_DEVICE ? '#000' : '#FFCC00',
+            }
+          })
+
+          // 事件回调绑定
+          this.player.JS_SetWindowControlCallback({
+            windowEventSelect: function (iWndIndex) {  //插件选中窗口回调
+              console.log('windowSelect callback: ', iWndIndex);
+            },
+            pluginErrorHandler: function (iWndIndex, iErrorCode, oError) {  //插件错误回调
+              console.log('pluginError callback: ', iWndIndex, iErrorCode, oError);
+            },
+            windowEventOver: function (iWndIndex) {  //鼠标移过回调
+              //console.log(iWndIndex);
+            },
+            windowEventOut: function (iWndIndex) {  //鼠标移出回调
+              //console.log(iWndIndex);
+            },
+            windowEventUp: function (iWndIndex) {  //鼠标mouseup事件回调
+              //console.log(iWndIndex);
+            },
+            windowFullCcreenChange: function (bFull) {  //全屏切换回调
+              console.log('fullScreen callback: ', bFull);
+            },
+            firstFrameDisplay: function (iWndIndex, iWidth, iHeight) {  //首帧显示回调
+              console.log('firstFrame loaded callback: ', iWndIndex, iWidth, iHeight);
+            },
+            performanceLack: function () {  //性能不足回调
+              console.log('performanceLack callback: ');
+            }
+          });
+        },
+        arrangeWindow() {
+          let splitNum = this.splitNum
+          this.player.JS_ArrangeWindow(splitNum).then(
+            () => { console.log(`arrangeWindow to ${splitNum}x${splitNum} success`) },
+            e => { console.error(e) }
+          )
+        },
+        wholeFullScreen() {
+          this.player.JS_FullScreenDisplay(true).then(
+            () => { console.log(`wholeFullScreen success`) },
+            e => { console.error(e) }
+          )
+        },
+        /* 预览&对讲 */
+        realplay() {
+          let { player, mode, urls } = this,
+            index = player.currentWindowIndex,
+            playURL = urls.realplay
+          console.log(mode, playURL, index)
+          player.JS_Play(playURL, { playURL, mode }, index).then(
+            () => { console.log('realplay success') },
+            e => { console.error(e) }
+          )
+        },
+        stopPlay() {
+          let { player, mode, urls } = this,
+            index = player.currentWindowIndex
+          this.player.JS_Stop(index).then(
+            () => { this.playback.rate = 0; console.log('stop realplay success') },
+            e => { console.error(e) }
+          )
+        },
+        talkStart() {
+          let url = this.urls.talk
+
+          this.player.JS_SetConnectTimeOut(0, 1000)
+          this.player.JS_StartTalk(url).then(
+            () => { console.log('talkStart success') },
+            e => { console.error(e) }
+          )
+        },
+        talkStop() {
+          this.player.JS_StopTalk().then(
+            () => { console.log('talkStop success') },
+            e => { console.error(e) }
+          )
+        },
+        stopAllPlay() {
+          this.player.JS_StopRealPlayAll().then(
+            () => { this.playback.rate = 0; console.log('stopAllPlay success') },
+            e => { console.error(e) }
+          )
+        },
+        /* 回放 */
+        playbackStart() {
+          let { player, mode, urls, playback } = this,
+            index = player.currentWindowIndex,
+            playURL = urls.playback,
+            { startTime, endTime } = playback
+
+          startTime += 'Z'
+          endTime += 'Z'
+
+          player.JS_Play(playURL, { playURL, mode }, index, startTime, endTime).then(
+            () => {
+              console.log('playbackStart success')
+              this.playback.rate = 1
+            },
+            e => { console.error(e) }
+          )
+        },
+        playbackPause() {
+          this.player.JS_Pause().then(
+            () => { console.log('playbackPause success') },
+            e => { console.error(e) }
+          )
+        },
+        playbackResume() {
+          this.player.JS_Resume().then(
+            () => { console.log('playbackResume success') },
+            e => { console.error(e) }
+          )
+        },
+        seekTo() {
+          let { seekStart, endTime } = this.playback
+          seekStart += 'Z'
+          endTime += 'Z'
+          this.player.JS_Seek(this.player.currentWindowIndex, seekStart, endTime).then(
+            () => { console.log('seekTo success') },
+            e => { console.error(e) }
+          )
+        },
+        playbackSlow() {
+          this.player.JS_Slow().then(
+            rate => {
+              this.playback.rate = rate
+            },
+            e => { console.error(e) }
+          )
+        },
+        playbackFast() {
+          this.player.JS_Fast().then(
+            rate => {
+              this.playback.rate = rate
+            },
+            e => { console.error(e) }
+          )
+        },
+        frameForward() {
+          this.player.JS_FrameForward(this.player.currentWindowIndex).then(
+            () => { this.playback.rate = 1; console.log('frameForward success') },
+            e => { console.error(e) }
+          )
+        },
+        /* 声音、抓图、录像 */
+        openSound() {
+          this.player.JS_OpenSound().then(
+            () => {
+              console.log('openSound success')
+              this.muted = false
+            },
+            e => { console.error(e) }
+          )
+        },
+        closeSound() {
+          this.player.JS_CloseSound().then(
+            () => {
+              console.log('closeSound success')
+              this.muted = true
+            },
+            e => { console.error(e) }
+          )
+        },
+        setVolume(value) {
+          let player = this.player,
+            index = player.currentWindowIndex
+          this.player.JS_SetVolume(index, value).then(
+            () => {
+              console.log('setVolume success', value)
+            },
+            e => { console.error(e) }
+          )
+        },
+        capture() {
+          let player = this.player,
+            index = player.currentWindowIndex
+
+          player.JS_CapturePicture(index, 'img', 'JPEG').then(
+            () => { console.log('capture success') },
+            e => { console.error(e) }
+          )
+        },
+        recordStart(type) {
+          const codeMap = { MP4: 5, PS: 2 }
+          let player = this.player,
+            index = player.currentWindowIndex,
+            fileName = `${moment().format('YYYYMMDDHHmm')}.mp4`
+          typeCode = codeMap[type]
+
+          player.JS_StartSaveEx(index, fileName, typeCode).then(
+            () => { console.log('record start ...') },
+            e => { console.error(e) }
+          )
+        },
+        recordStop() {
+          let player = this.player
+          index = player.currentWindowIndex
+
+          player.JS_StopSave(index).then(
+            () => { console.log('record stoped, saving ...') },
+            e => { console.error(e) }
+          )
+        },
+        /* 电子放大、智能信息 */
+        enlarge() {
+          let player = this.player,
+            index = player.currentWindowIndex
+
+          player.JS_EnableZoom(index).then(
+            () => { console.log('enlarge start..., select range...') },
+            e => { console.error(e) }
+          )
+        },
+        enlargeClose() {
+          let player = this.player,
+            index = player.currentWindowIndex
+
+          player.JS_DisableZoom(index).then(
+            () => { console.log('enlargeClose success') },
+            e => { console.error(e) }
+          )
+        },
+        intellectTrigger(openFlag) {
+          let player = this.player,
+            index = player.currentWindowIndex
+
+          let result = player.JS_RenderALLPrivateData(index, openFlag)
+          console.log(`${openFlag ? 'open' : 'close'} intellect ${result === 1 ? 'success' : 'failed'}`)
+        },
+        getvideoInfo() {
+          let player = this.player,
+            index = player.currentWindowIndex
+
+          player.JS_GetVideoInfo(index).then(function (videoInfo) {
+            console.log("videoInfo:", videoInfo);
+          });
+        },
+        getOSDTime() {
+          let player = this.player,
+            index = player.currentWindowIndex
+
+          player.JS_GetOSDTime(index).then(function (time) {
+            console.log("osdTime:", new Date(time));
+          });
+        }
+      },
+      mounted() {
+        this.$el.style.setProperty('display', 'block')
+        this.init()
+        this.createPlayer()
+      }
+    })
+  </script>
+</body>
+
+</html>

+ 0 - 0
media/hk-plugins/demo不能双击启动使用!!!!.txt


+ 3 - 0
media/hk-plugins/demo使用说明!!!.txt

@@ -0,0 +1,3 @@
+1、安装node.js, 在dos命令窗口输入命令:node https.js,启动web服务器,然后在chrome80+浏览器访问https://localhost:9091/demo.html打开demo进行测试
+2、安装node.js, 在dos命令窗口输入命令:node http.js,启动web服务器,然后在chrome80+浏览器访问http://localhost:9000/demo.html打开demo进行测试
+说明:node.js的下载路径:https://nodejs.org/en/download

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 5 - 0
media/hk-plugins/h5player.min.js


+ 65 - 0
media/hk-plugins/http.js

@@ -0,0 +1,65 @@
+const http = require('http')
+const url = require('url')
+const fs = require('fs')
+const path = require('path')
+// const mime = require('mime')
+
+const mime = {
+  map: {
+    'html': 'text/html',
+    'xhtml': 'application/xhtml+xml',
+    'xml': 'text/xml',
+    'js': 'application/javascript',
+    'wasm': 'application/wasm',
+    'map': 'magnus-internal/imagemap',
+    'css': 'text/css',
+    'png': 'image/png',
+    'jpg': 'image/jpeg',
+    'jpeg': 'image/jpeg',
+    'gif': 'image/gif',
+    'ico': 'image/vnd.microsoft.icon'
+  },
+  getType: function (ext) {
+    let conType = this.map[ext]
+    return conType || 'text/plain'
+  }
+}
+
+const httpServer = http.createServer()
+
+httpServer.on('request', (req, res) => {
+  console.log(`[receive request] ${req.method} ${req.url}`)
+
+  const urlJson = url.parse(req.url)
+  let { pathname } = urlJson
+  if (pathname === '/') pathname += 'index.html'
+  let ext = pathname.split('.').pop()
+
+  // all
+  res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin')
+  res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp')
+  res.setHeader('Cross-Origin-Opener-Policy', 'same-origin')
+  // just page file
+  // if (ext === 'html' || ext === 'htm' || ext === 'xhtml' || ext === 'js') {
+  //   res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp')
+  //   res.setHeader('Cross-Origin-Opener-Policy', 'same-origin')
+  // }
+
+  let contentType = mime.getType(ext)
+  res.setHeader('Content-Type', contentType)
+
+  fs.readFile(path.resolve(__dirname, pathname.substr(1)), (err, data) => {
+    if (err) {
+      res.writeHead(404)
+      res.end('Not found.')
+    } else {
+      res.writeHead(200)
+      res.end(data)
+    }
+  })
+})
+
+const PORT = 9000
+httpServer.listen(PORT, () => {
+  console.log(`Server running at http://localhost:${PORT}`)
+})

+ 61 - 0
media/hk-plugins/https.js

@@ -0,0 +1,61 @@
+const https = require('https')
+const fs = require('fs')
+const url = require('url')
+const path = require('path')
+
+const PORT = 9091
+
+const options = {
+  key: fs.readFileSync('./privatekey.pem'),
+  cert: fs.readFileSync('./certificate.pem')
+}
+const httpsServer = https.createServer(options)
+
+
+const mime = {
+  map: {
+    'html': 'text/html',
+    'xhtml': 'application/xhtml+xml',
+    'xml': 'text/xml',
+    'js': 'application/javascript',
+    'wasm': 'application/wasm',
+    'map': 'magnus-internal/imagemap',
+    'css': 'text/css',
+    'png': 'image/png',
+    'jpg': 'image/jpeg',
+    'jpeg': 'image/jpeg',
+    'gif': 'image/gif',
+    'ico': 'image/vnd.microsoft.icon'
+  },
+  getType: function (ext) {
+    let conType = this.map[ext]
+    return conType || 'text/plain'
+  }
+}
+httpsServer.on('request', (req, res) => {
+  console.log(`[receive request] ${req.method} ${req.url}`)
+
+  const urlJson = url.parse(req.url)
+  let { pathname } = urlJson
+  if (pathname === '/') pathname += 'index.html'
+  let ext = pathname.split('.').pop()
+  
+  res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp')
+  res.setHeader('Cross-Origin-Opener-Policy', 'same-origin')
+
+  let contentType = mime.getType(ext)
+  res.setHeader('Content-Type', contentType)
+
+  fs.readFile(path.resolve(__dirname, pathname.substr(1)), (err, data) => {
+    if (err) {
+      res.writeHead(404)
+      res.end('Not found.')
+    } else {
+      res.writeHead(200)
+      res.end(data)
+    }
+  })
+})
+
+.listen(PORT)
+console.log(`Https server running at https://localhost:${PORT}`)

+ 685 - 0
media/hk-plugins/playctrl1/DecodeWorker.js

@@ -0,0 +1,685 @@
+/**
+ * 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 });
+    }
+	
+	self.JSPlayM4_StreamInfoCallBack = function (nPort, pstStreamInfo, pUser)
+	{
+		let port = nPort;
+        let user = pUser;
+        let nSystemformat = Module.HEAP16[pstStreamInfo >> 1]; //封装类型
+        let nVideoformat = Module.HEAP16[pstStreamInfo + 2 >> 1];//视频编码类型
+        let nAudioformat = Module.HEAP16[pstStreamInfo + 4 >> 1];//音频编码类型
+        let nAudiochannels = Module.HEAP16[pstStreamInfo + 6 >> 1]; //音频通道数
+        let nAudiobitspersample = Module.HEAP32[pstStreamInfo + 8 >> 2];//音频样位率
+        let nAudiosamplesrate = Module.HEAP32[pstStreamInfo + 12 >> 2];//音频采样率
+        let nAudiobitrate = Module.HEAP32[pstStreamInfo + 16 >> 2];//音频比特率,单位:bit
+		//console.log("nSystemformat:" + nSystemformat + ",nVideoformat:" + nVideoformat + ",nAudioformat:" + nAudioformat + ",nAudiochannels:" + nAudiochannels + ",nAudiobitspersample:" + nAudiobitspersample + ",nAudiosamplesrate:" + nAudiosamplesrate + ",nAudiobitrate:" + nAudiobitrate);
+        postMessage({ 'function': "StreamInfoCallBack", 'nSystemformat': nSystemformat, 'nVideoformat': nVideoformat, 'nAudioformat': nAudioformat, 'nAudiochannels': nAudiochannels, 'nAudiobitspersample': nAudiobitspersample, 'nAudiosamplesrate': nAudiosamplesrate, 'nAudiobitrate': nAudiobitrate});
+	}
+
+    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 oBMPCropRect = eventData.rect;
+
+                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 = eventData.rect;
+
+                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":
+                let resSDM = 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;
+			case "SetStreamInfoCB":
+                Module._SetStreamInfoCallBack(g_nPort, eventData.nType, 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;
+        var iMiSecond = oFrameInfo.misecond
+
+        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;
+        }
+        let osdTime = {};
+
+        osdTime.year = iYear;
+        osdTime.month = iMonth;
+        osdTime.week = 0;
+        osdTime.day = iDay;
+        osdTime.hour = iHour;
+        osdTime.minute = iMinute;
+        osdTime.second = iSecond;
+        osdTime.milliseconds = iMiSecond;
+        return osdTime;
+        //return iYear + "-" + iMonth + "-" + iDay + " " + iHour + ":" + iMinute + ":" + iSecond;
+    }
+    // 获取帧数据
+    function getFrameData() {
+        // function getFrameData() {
+        // 获取帧数据
+        var res = Module._GetFrameData();
+        //var res = fun();
+        if (res === PLAYM4_OK) {
+            var iFrameInfo = Module._GetFrameInfo();
+            let oFrameInfo = {};
+            oFrameInfo.frameType = Module.HEAP32[iFrameInfo >> 2];
+            oFrameInfo.frameSize = Module.HEAP32[iFrameInfo + 4 >> 2];
+            oFrameInfo.width = Module.HEAP32[iFrameInfo + 8 >> 2];
+            oFrameInfo.height = Module.HEAP32[iFrameInfo + 12 >> 2];
+            oFrameInfo.timeStamp = Module.HEAP32[iFrameInfo + 16 >> 2];
+            oFrameInfo.frameRate = Module.HEAP32[iFrameInfo + 20 >> 2];
+            oFrameInfo.bitsPerSample = Module.HEAP32[iFrameInfo + 24 >> 2];
+            oFrameInfo.samplesPerSec = Module.HEAP32[iFrameInfo + 28 >> 2];
+            oFrameInfo.channels = Module.HEAP32[iFrameInfo + 32 >> 2];
+            oFrameInfo.frameNum = Module.HEAP32[iFrameInfo + 36 >> 2];
+
+            oFrameInfo.cropLeft = Module.HEAP32[iFrameInfo + 40 >> 2];
+            oFrameInfo.cropRight = Module.HEAP32[iFrameInfo + 44 >> 2];
+            oFrameInfo.cropTop = Module.HEAP32[iFrameInfo + 48 >> 2];
+            oFrameInfo.cropBottom = Module.HEAP32[iFrameInfo + 52 >> 2];
+
+            oFrameInfo.year = Module.HEAP16[iFrameInfo + 56 >> 1];
+            oFrameInfo.month = Module.HEAP16[iFrameInfo + 58 >> 1];
+            oFrameInfo.day = Module.HEAP16[iFrameInfo + 60 >> 1];
+            oFrameInfo.hour = Module.HEAP16[iFrameInfo + 62 >> 1];
+            oFrameInfo.minute = Module.HEAP16[iFrameInfo + 64 >> 1];
+            oFrameInfo.second = Module.HEAP16[iFrameInfo + 66 >> 1];
+            oFrameInfo.misecond = Module.HEAP16[iFrameInfo + 68 >> 1];
+            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;
+    }
+})();

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 11 - 0
media/hk-plugins/playctrl1/Decoder.js


+ 695 - 0
media/hk-plugins/playctrl1simd/DecodeWorker.js

@@ -0,0 +1,695 @@
+/**
+ * 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 });
+    }
+	
+	self.JSPlayM4_StreamInfoCallBack = function (nPort, pstStreamInfo, pUser)
+	{
+		let port = nPort;
+        let user = pUser;
+        let nSystemformat = Module.HEAP16[pstStreamInfo >> 1]; //封装类型
+        let nVideoformat = Module.HEAP16[pstStreamInfo + 2 >> 1];//视频编码类型
+        let nAudioformat = Module.HEAP16[pstStreamInfo + 4 >> 1];//音频编码类型
+        let nAudiochannels = Module.HEAP16[pstStreamInfo + 6 >> 1]; //音频通道数
+        let nAudiobitspersample = Module.HEAP32[pstStreamInfo + 8 >> 2];//音频样位率
+        let nAudiosamplesrate = Module.HEAP32[pstStreamInfo + 12 >> 2];//音频采样率
+        let nAudiobitrate = Module.HEAP32[pstStreamInfo + 16 >> 2];//音频比特率,单位:bit
+		//console.log("nSystemformat:" + nSystemformat + ",nVideoformat:" + nVideoformat + ",nAudioformat:" + nAudioformat + ",nAudiochannels:" + nAudiochannels + ",nAudiobitspersample:" + nAudiobitspersample + ",nAudiosamplesrate:" + nAudiosamplesrate + ",nAudiobitrate:" + nAudiobitrate);
+        postMessage({ 'function': "StreamInfoCallBack", 'nSystemformat': nSystemformat, 'nVideoformat': nVideoformat, 'nAudioformat': nAudioformat, 'nAudiochannels': nAudiochannels, 'nAudiobitspersample': nAudiobitspersample, 'nAudiosamplesrate': nAudiosamplesrate, 'nAudiobitrate': nAudiobitrate});
+	}
+
+    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 oBMPCropRect = {
+                    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":
+                let resSDM = 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;
+			case "SetStreamInfoCB":
+                Module._SetStreamInfoCallBack(g_nPort, eventData.nType, 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;
+        var iMiSecond = oFrameInfo.misecond
+
+        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;
+        }
+        let osdTime = {};
+
+        osdTime.year = iYear;
+        osdTime.month = iMonth;
+        osdTime.week = 0;
+        osdTime.day = iDay;
+        osdTime.hour = iHour;
+        osdTime.minute = iMinute;
+        osdTime.second = iSecond;
+        osdTime.milliseconds = iMiSecond;
+        return osdTime;
+        //return iYear + "-" + iMonth + "-" + iDay + " " + iHour + ":" + iMinute + ":" + iSecond;
+    }
+    // 获取帧数据
+    function getFrameData() {
+        // function getFrameData() {
+        // 获取帧数据
+        var res = Module._GetFrameData();
+        //var res = fun();
+        if (res === PLAYM4_OK) {
+            var iFrameInfo = Module._GetFrameInfo();
+            let oFrameInfo = {};
+            oFrameInfo.frameType = Module.HEAP32[iFrameInfo >> 2];
+            oFrameInfo.frameSize = Module.HEAP32[iFrameInfo + 4 >> 2];
+            oFrameInfo.width = Module.HEAP32[iFrameInfo + 8 >> 2];
+            oFrameInfo.height = Module.HEAP32[iFrameInfo + 12 >> 2];
+            oFrameInfo.timeStamp = Module.HEAP32[iFrameInfo + 16 >> 2];
+            oFrameInfo.frameRate = Module.HEAP32[iFrameInfo + 20 >> 2];
+            oFrameInfo.bitsPerSample = Module.HEAP32[iFrameInfo + 24 >> 2];
+            oFrameInfo.samplesPerSec = Module.HEAP32[iFrameInfo + 28 >> 2];
+            oFrameInfo.channels = Module.HEAP32[iFrameInfo + 32 >> 2];
+            oFrameInfo.frameNum = Module.HEAP32[iFrameInfo + 36 >> 2];
+
+            oFrameInfo.cropLeft = Module.HEAP32[iFrameInfo + 40 >> 2];
+            oFrameInfo.cropRight = Module.HEAP32[iFrameInfo + 44 >> 2];
+            oFrameInfo.cropTop = Module.HEAP32[iFrameInfo + 48 >> 2];
+            oFrameInfo.cropBottom = Module.HEAP32[iFrameInfo + 52 >> 2];
+
+            oFrameInfo.year = Module.HEAP16[iFrameInfo + 56 >> 1];
+            oFrameInfo.month = Module.HEAP16[iFrameInfo + 58 >> 1];
+            oFrameInfo.day = Module.HEAP16[iFrameInfo + 60 >> 1];
+            oFrameInfo.hour = Module.HEAP16[iFrameInfo + 62 >> 1];
+            oFrameInfo.minute = Module.HEAP16[iFrameInfo + 64 >> 1];
+            oFrameInfo.second = Module.HEAP16[iFrameInfo + 66 >> 1];
+            oFrameInfo.misecond = Module.HEAP16[iFrameInfo + 68 >> 1];
+            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;
+    }
+})();

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 11 - 0
media/hk-plugins/playctrl1simd/Decoder.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 8 - 0
media/hk-plugins/playctrl2/Decoder.js


BIN
media/hk-plugins/playctrl2/Decoder.wasm


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác