Browse Source

feat: 原生worker

shuisheng 1 năm trước cách đây
mục cha
commit
1a73525974
7 tập tin đã thay đổi với 114 bổ sung154 xóa
  1. 2 5
      package.json
  2. 38 95
      pnpm-lock.yaml
  3. 26 6
      public/worker.js
  4. 1 1
      src/constant.ts
  5. 0 6
      src/utils/localforage.ts
  6. 46 25
      src/views/push/index.vue
  7. 1 16
      test/test.vue

+ 2 - 5
package.json

@@ -40,23 +40,19 @@
     "fabric": "^5.3.0",
     "flv.js": "^1.6.2",
     "js-cookie": "^3.0.5",
-    "localforage": "^1.10.0",
     "mpegts.js": "^1.7.3",
-    "msr": "^1.3.4",
     "naive-ui": "^2.34.4",
     "pinia": "^2.0.33",
     "pinia-plugin-persistedstate": "^3.2.0",
     "qrcode": "^1.5.3",
     "socket.io-client": "^4.7.2",
     "spark-md5": "^3.0.2",
-    "trash": "^8.1.1",
     "video.js": "^8.3.0",
     "vue": "^3.3.4",
     "vue-demi": "^0.13.11",
     "vue-i18n": "9",
     "vue-router": "^4.0.13",
-    "webrtc-adapter": "^8.2.2",
-    "worker-timers": "^7.0.74"
+    "webrtc-adapter": "^8.2.2"
   },
   "devDependencies": {
     "@babel/core": "^7.14.0",
@@ -110,6 +106,7 @@
     "terser": "^5.7.0",
     "terser-webpack-plugin": "^5.3.6",
     "thread-loader": "^3.0.4",
+    "trash": "^8.1.1",
     "ts-loader": "^9.2.7",
     "ts-node": "^10.9.1",
     "typescript": "^5.1.6",

+ 38 - 95
pnpm-lock.yaml

@@ -29,15 +29,9 @@ dependencies:
   js-cookie:
     specifier: ^3.0.5
     version: 3.0.5
-  localforage:
-    specifier: ^1.10.0
-    version: 1.10.0
   mpegts.js:
     specifier: ^1.7.3
     version: 1.7.3
-  msr:
-    specifier: ^1.3.4
-    version: 1.3.4
   naive-ui:
     specifier: ^2.34.4
     version: 2.34.4(vue@3.3.4)
@@ -56,9 +50,6 @@ dependencies:
   spark-md5:
     specifier: ^3.0.2
     version: 3.0.2
-  trash:
-    specifier: ^8.1.1
-    version: 8.1.1
   video.js:
     specifier: ^8.3.0
     version: 8.3.0
@@ -77,9 +68,6 @@ dependencies:
   webrtc-adapter:
     specifier: ^8.2.2
     version: 8.2.2
-  worker-timers:
-    specifier: ^7.0.74
-    version: 7.0.74
 
 devDependencies:
   '@babel/core':
@@ -235,6 +223,9 @@ devDependencies:
   thread-loader:
     specifier: ^3.0.4
     version: 3.0.4(webpack@5.76.2)
+  trash:
+    specifier: ^8.1.1
+    version: 8.1.1
   ts-loader:
     specifier: ^9.2.7
     version: 9.4.2(typescript@5.1.6)(webpack@5.76.2)
@@ -2500,19 +2491,19 @@ packages:
   /@sindresorhus/chunkify@0.2.0:
     resolution: {integrity: sha512-mOAiwqu+bIIkNFDCXFJxZEmF9p9WHfSBbpLLmgysYnNkEs7aA0/AvU9+6zLHFqI7JnqdqwAuWu8CbGwGIszRdw==}
     engines: {node: '>=12'}
-    dev: false
+    dev: true
 
   /@sindresorhus/df@1.0.1:
     resolution: {integrity: sha512-1Hyp7NQnD/u4DSxR2DGW78TF9k7R0wZ8ev0BpMAIzA6yTQSHqNb5wTuvtcPYf4FWbVse2rW7RgDsyL8ua2vXHw==}
     engines: {node: '>=0.10.0'}
-    dev: false
+    dev: true
 
   /@sindresorhus/df@3.1.1:
     resolution: {integrity: sha512-SME/vtXaJcnQ/HpeV6P82Egy+jThn11IKfwW8+/XVoRD0rmPHVTeKMtww1oWdVnMykzVPjmrDN9S8NBndPEHCQ==}
     engines: {node: '>=8'}
     dependencies:
       execa: 2.1.0
-    dev: false
+    dev: true
 
   /@socket.io/component-emitter@3.1.0:
     resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==}
@@ -2534,7 +2525,7 @@ packages:
   /@stroncium/procfs@1.2.1:
     resolution: {integrity: sha512-X1Iui3FUNZP18EUvysTHxt+Avu2nlVzyf90YM8OYgP6SGzTzzX/0JgObfO1AQQDzuZtNNz29bVh8h5R97JrjxA==}
     engines: {node: '>=8'}
-    dev: false
+    dev: true
 
   /@swc/core-darwin-arm64@1.3.84:
     resolution: {integrity: sha512-mqK0buOo+toF2HoJ/gWj2ApZbvbIiNq3mMwSTHCYJHlQFQfoTWnl9aaD5GSO4wfNFVYfEZ1R259o5uv5NlVtoA==}
@@ -3389,7 +3380,7 @@ packages:
     dependencies:
       clean-stack: 4.2.0
       indent-string: 5.0.0
-    dev: false
+    dev: true
 
   /ajv-formats@2.1.1(ajv@8.12.0):
     resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
@@ -3547,7 +3538,7 @@ packages:
     engines: {node: '>=0.10.0'}
     dependencies:
       array-uniq: 1.0.3
-    dev: false
+    dev: true
 
   /array-union@2.1.0:
     resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
@@ -3557,7 +3548,7 @@ packages:
   /array-uniq@1.0.3:
     resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==}
     engines: {node: '>=0.10.0'}
-    dev: false
+    dev: true
 
   /array.prototype.findlastindex@1.2.2:
     resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==}
@@ -4010,7 +4001,7 @@ packages:
     engines: {node: '>=12'}
     dependencies:
       escape-string-regexp: 5.0.0
-    dev: false
+    dev: true
 
   /cli-cursor@2.1.0:
     resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
@@ -5004,7 +4995,7 @@ packages:
     engines: {node: '>=4'}
     dependencies:
       path-type: 3.0.0
-    dev: false
+    dev: true
 
   /dir-glob@3.0.1:
     resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
@@ -5144,7 +5135,7 @@ packages:
     resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
     dependencies:
       once: 1.4.0
-    dev: false
+    dev: true
 
   /engine.io-client@6.5.2:
     resolution: {integrity: sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==}
@@ -5544,7 +5535,7 @@ packages:
   /escape-string-regexp@5.0.0:
     resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
     engines: {node: '>=12'}
-    dev: false
+    dev: true
 
   /escodegen@2.1.0:
     resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
@@ -5868,7 +5859,7 @@ packages:
       p-finally: 2.0.1
       signal-exit: 3.0.7
       strip-final-newline: 2.0.0
-    dev: false
+    dev: true
 
   /execa@5.1.1:
     resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
@@ -6002,14 +5993,6 @@ packages:
     resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
     dev: true
 
-  /fast-unique-numbers@8.0.7:
-    resolution: {integrity: sha512-I+VCWGlHB6HSqE0W0FxB5mgmgBHJiBs19kS9y6JJKXDp84IzuE7H24NRwpnZbuONK7T2r+7T0z1OZbehc5URxA==}
-    engines: {node: '>=16.1.0'}
-    dependencies:
-      '@babel/runtime': 7.22.6
-      tslib: 2.6.1
-    dev: false
-
   /fastest-levenshtein@1.0.16:
     resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
     engines: {node: '>= 4.9.1'}
@@ -6341,7 +6324,7 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       pump: 3.0.0
-    dev: false
+    dev: true
 
   /get-stream@6.0.1:
     resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
@@ -6513,7 +6496,7 @@ packages:
       ignore: 3.3.10
       pify: 3.0.0
       slash: 1.0.0
-    dev: false
+    dev: true
 
   /gopd@1.0.1:
     resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
@@ -6829,17 +6812,13 @@ packages:
 
   /ignore@3.3.10:
     resolution: {integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==}
-    dev: false
+    dev: true
 
   /ignore@5.2.4:
     resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
     engines: {node: '>= 4'}
     dev: true
 
-  /immediate@3.0.6:
-    resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
-    dev: false
-
   /immutable@4.3.0:
     resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==}
 
@@ -6872,7 +6851,7 @@ packages:
   /indent-string@5.0.0:
     resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
     engines: {node: '>=12'}
-    dev: false
+    dev: true
 
   /individual@2.0.0:
     resolution: {integrity: sha512-pWt8hBCqJsUWI/HtcfWod7+N9SgAqyPEaF7JQjwzjn5vGrpg6aQ5qeAFQ7dx//UH4J1O+7xqew+gCeeFt6xN/g==}
@@ -7096,7 +7075,7 @@ packages:
   /is-path-inside@4.0.0:
     resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==}
     engines: {node: '>=12'}
-    dev: false
+    dev: true
 
   /is-plain-obj@1.1.0:
     resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
@@ -7400,12 +7379,6 @@ packages:
       type-check: 0.4.0
     dev: true
 
-  /lie@3.1.1:
-    resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==}
-    dependencies:
-      immediate: 3.0.6
-    dev: false
-
   /lilconfig@2.0.5:
     resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==}
     engines: {node: '>=10'}
@@ -7499,12 +7472,6 @@ packages:
     engines: {node: '>=14'}
     dev: true
 
-  /localforage@1.10.0:
-    resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==}
-    dependencies:
-      lie: 3.1.1
-    dev: false
-
   /locate-path@2.0.0:
     resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
     engines: {node: '>=4'}
@@ -7862,14 +7829,14 @@ packages:
       '@sindresorhus/df': 1.0.1
       pify: 2.3.0
       pinkie-promise: 2.0.1
-    dev: false
+    dev: true
 
   /move-file@3.1.0:
     resolution: {integrity: sha512-4aE3U7CCBWgrQlQDMq8da4woBWDGHioJFiOZ8Ie6Yq2uwYQ9V2kGhTz4x3u6Wc+OU17nw0yc3rJ/lQ4jIiPe3A==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
       path-exists: 5.0.0
-    dev: false
+    dev: true
 
   /mpd-parser@1.1.1:
     resolution: {integrity: sha512-uZ/db5wQdlQn1L+OD49YXBhPI9UGeK1SeQE4D5EoaJIhf0WM9X3HDj8d+9PjoG06CgCvGZw3YW/wsHku+CH3yA==}
@@ -7901,10 +7868,6 @@ packages:
   /ms@2.1.3:
     resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
 
-  /msr@1.3.4:
-    resolution: {integrity: sha512-vx1gmfKCacOylK5YNSlWWrWcqMfOjSgQQn3rb4NA830LlBrXyWVHJQdbILG4xiK9Xz77K35ve2CLodX2gEzlKA==}
-    dev: false
-
   /multicast-dns@7.2.5:
     resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==}
     hasBin: true
@@ -8068,7 +8031,7 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       path-key: 3.1.1
-    dev: false
+    dev: true
 
   /npm-run-path@4.0.1:
     resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
@@ -8245,6 +8208,7 @@ packages:
   /os-homedir@1.0.2:
     resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==}
     engines: {node: '>=0.10.0'}
+    dev: true
 
   /os-tmpdir@1.0.2:
     resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
@@ -8254,7 +8218,7 @@ packages:
   /p-finally@2.0.1:
     resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==}
     engines: {node: '>=8'}
-    dev: false
+    dev: true
 
   /p-limit@1.3.0:
     resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
@@ -8315,7 +8279,7 @@ packages:
     engines: {node: '>=12'}
     dependencies:
       aggregate-error: 4.0.1
-    dev: false
+    dev: true
 
   /p-retry@4.6.2:
     resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==}
@@ -8398,7 +8362,7 @@ packages:
   /path-exists@5.0.0:
     resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    dev: false
+    dev: true
 
   /path-is-absolute@1.0.1:
     resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
@@ -8424,6 +8388,7 @@ packages:
     engines: {node: '>=4'}
     dependencies:
       pify: 3.0.0
+    dev: true
 
   /path-type@4.0.0:
     resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
@@ -8450,10 +8415,12 @@ packages:
   /pify@2.3.0:
     resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
     engines: {node: '>=0.10.0'}
+    dev: true
 
   /pify@3.0.0:
     resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
     engines: {node: '>=4'}
+    dev: true
 
   /pinia-plugin-persistedstate@3.2.0(pinia@2.0.33):
     resolution: {integrity: sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==}
@@ -8486,12 +8453,12 @@ packages:
     engines: {node: '>=0.10.0'}
     dependencies:
       pinkie: 2.0.4
-    dev: false
+    dev: true
 
   /pinkie@2.0.4:
     resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
     engines: {node: '>=0.10.0'}
-    dev: false
+    dev: true
 
   /pkcs7@1.0.4:
     resolution: {integrity: sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==}
@@ -9275,7 +9242,7 @@ packages:
     dependencies:
       end-of-stream: 1.4.4
       once: 1.4.0
-    dev: false
+    dev: true
 
   /punycode@2.3.0:
     resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
@@ -9958,7 +9925,7 @@ packages:
   /slash@1.0.0:
     resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==}
     engines: {node: '>=0.10.0'}
-    dev: false
+    dev: true
 
   /slash@3.0.0:
     resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
@@ -10525,7 +10492,7 @@ packages:
       p-map: 5.5.0
       uuid: 8.3.2
       xdg-trashdir: 3.1.0
-    dev: false
+    dev: true
 
   /treemate@0.3.11:
     resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
@@ -10828,6 +10795,7 @@ packages:
     engines: {node: '>=0.10.0'}
     dependencies:
       os-homedir: 1.0.2
+    dev: true
 
   /util-deprecate@1.0.2:
     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -11448,31 +11416,6 @@ packages:
     resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
     dev: true
 
-  /worker-timers-broker@6.0.94:
-    resolution: {integrity: sha512-LYo2uktzGgJW2lB/XHq0p8M3NKeC7fCaQ20o+WpmLTx0TnS/g3IkSFituBR7Fify/q1natgrJN7GUJKcgCFVmw==}
-    dependencies:
-      '@babel/runtime': 7.22.6
-      fast-unique-numbers: 8.0.7
-      tslib: 2.6.1
-      worker-timers-worker: 7.0.58
-    dev: false
-
-  /worker-timers-worker@7.0.58:
-    resolution: {integrity: sha512-tCZI7c5YgjZAS16BZNCjd5T+W+jEC+g9M74gqKVRRlZ13Y8DW3ZJR1fiXHzd9yRy9wK1PTOZOcSdDLvxNtUb8Q==}
-    dependencies:
-      '@babel/runtime': 7.22.6
-      tslib: 2.6.1
-    dev: false
-
-  /worker-timers@7.0.74:
-    resolution: {integrity: sha512-XdxJ9gTNdvM6FkStgXmjDbF/v9reoJzpLiq1YORcA1DdMYxWh+zdEgqxuoJu3rpM05CwrUsb4d03FCDfExNiQQ==}
-    dependencies:
-      '@babel/runtime': 7.22.6
-      tslib: 2.6.1
-      worker-timers-broker: 6.0.94
-      worker-timers-worker: 7.0.58
-    dev: false
-
   /wrap-ansi@6.2.0:
     resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
     engines: {node: '>=8'}
@@ -11533,7 +11476,7 @@ packages:
   /xdg-basedir@4.0.0:
     resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==}
     engines: {node: '>=8'}
-    dev: false
+    dev: true
 
   /xdg-trashdir@3.1.0:
     resolution: {integrity: sha512-N1XQngeqMBoj9wM4ZFadVV2MymImeiFfYD+fJrNlcVcOHsJFFQe7n3b+aBoTPwARuq2HQxukfzVpQmAk1gN4sQ==}
@@ -11543,7 +11486,7 @@ packages:
       mount-point: 3.0.0
       user-home: 2.0.0
       xdg-basedir: 4.0.0
-    dev: false
+    dev: true
 
   /xml-name-validator@4.0.0:
     resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}

+ 26 - 6
public/worker.js

@@ -1,11 +1,31 @@
 self.addEventListener('message', function (e) {
-  if (e.data.type === 'start-loop') {
-    setInterval(function () {
+  if (e.data.type === 'request-start-msr-loop') {
+    if (e.data.delay > 0) {
+      const timer = setInterval(function () {
+        self.postMessage({
+          type: 'response-msr-looping',
+          data: { timer },
+        });
+      }, e.data.delay);
       self.postMessage({
-        type: 'workder-msg',
-        time: new Date().toLocaleString(),
-        data: e.data,
+        type: 'response-start-msr-loop',
+        data: { timer },
       });
-    }, e.data.delay);
+    }
+  } else if (e.data.type === 'request-start-loop') {
+    if (e.data.delay > 0) {
+      const timer = setInterval(function () {
+        self.postMessage({
+          type: 'response-looping',
+          data: { timer },
+        });
+      }, e.data.delay);
+      self.postMessage({
+        type: 'response-start-loop',
+        data: { timer },
+      });
+    }
+  } else if (e.data.type === 'request-clear-loop') {
+    clearInterval(e.data.timer);
   }
 });

+ 1 - 1
src/constant.ts

@@ -20,7 +20,7 @@ export const WEBSOCKET_URL =
     : 'wss://srs-pull.hsslive.cn';
 
 export const AXIOS_BASEURL =
-  process.env.NODE_ENV === 'development'
+  process.env.NODE_ENV !== 'development'
     ? '/api'
     : 'https://live-api.hsslive.cn';
 

+ 0 - 6
src/utils/localforage.ts

@@ -1,6 +0,0 @@
-import localforage from 'localforage';
-
-export const myLs = localforage.createInstance({
-  driver: localforage.LOCALSTORAGE,
-  name: 'billdlive',
-});

+ 46 - 25
src/views/push/index.vue

@@ -386,7 +386,6 @@ import {
   watch,
 } from 'vue';
 import { useRoute } from 'vue-router';
-import * as workerTimers from 'worker-timers';
 
 import { QINIU_LIVE, mediaTypeEnumMap } from '@/constant';
 import { emojiArray } from '@/emoji';
@@ -468,6 +467,9 @@ const msgLoading = ref(false);
 const uploadRef = ref<HTMLInputElement>();
 const nullAudioStream = ref<MediaStream>();
 const showEmoji = ref(false);
+const worker = ref<Worker>();
+const workerTimerId = ref();
+const workerMsrTimerId = ref();
 
 const timeCanvasDom = ref<Raw<fabric.Text>[]>([]);
 const stopwatchCanvasDom = ref<Raw<fabric.Text>[]>([]);
@@ -475,11 +477,9 @@ const wrapSize = reactive({
   width: 0,
   height: 0,
 });
-const workerTimerId = ref(-1);
 const bodyAppendChildElArr = ref<HTMLElement[]>([]);
 const liveType = Number(route.query.liveType);
 const recorder = ref<MediaRecorder>();
-const sendBlobTimer = ref();
 const bolbId = ref(0);
 const msrDelay = ref(1000 * 1);
 const msrMaxDelay = ref(1000 * 5);
@@ -511,7 +511,6 @@ watch(
 watch(
   () => currentMaxFramerate.value,
   () => {
-    workerTimers.clearInterval(workerTimerId.value);
     renderFrame();
   }
 );
@@ -592,16 +591,6 @@ function mockClick() {
   uploadRef.value?.click();
 }
 
-function handleWait() {
-  if (!loginTip()) {
-    return;
-  }
-  if (!commentAuthTip()) {
-    return;
-  }
-  window.$message.warning('敬请期待!');
-}
-
 async function uploadChange() {
   const fileList = uploadRef.value?.files;
   if (fileList?.length) {
@@ -679,13 +668,26 @@ function handleMsr(stream: MediaStream) {
     // audioBitsPerSecond: 1000 * 2000,
   });
   recorder.value.ondataavailable = handleSendBlob;
-  sendBlobTimer.value = setInterval(function () {
-    recorder.value?.stop();
-    recorder.value?.start();
-  }, msrDelay.value);
+  worker.value?.postMessage({
+    type: 'request-clear-loop',
+    timer: workerMsrTimerId.value,
+  });
+  worker.value?.postMessage({
+    type: 'request-start-msr-loop',
+    delay: msrDelay.value,
+  });
+  worker.value?.addEventListener('message', (e) => {
+    if (e.data.type === 'response-start-msr-loop') {
+      workerMsrTimerId.value = e.data.timer;
+    } else if (e.data.type === 'response-msr-looping') {
+      recorder.value?.stop();
+      recorder.value?.start();
+    }
+  });
 }
 
 onMounted(() => {
+  worker.value = new Worker('worker.js');
   setTimeout(() => {
     scrollTo(0, 0);
   }, 100);
@@ -700,6 +702,7 @@ onUnmounted(() => {
     el.remove();
   });
   clearFrame();
+  worker.value?.terminate();
 });
 
 async function initUserMedia() {
@@ -727,9 +730,12 @@ function renderAll() {
 }
 
 function clearFrame() {
-  if (workerTimerId.value !== -1) {
-    workerTimers.clearInterval(workerTimerId.value);
-  }
+  worker.value?.postMessage({
+    type: 'request-clear-loop',
+    data: {
+      timer: workerTimerId.value,
+    },
+  });
 }
 
 function renderFrame() {
@@ -744,9 +750,21 @@ function renderFrame() {
    */
   let delay = 1000 / currentMaxFramerate.value;
   delay = (18 / 20) * delay;
-  workerTimerId.value = workerTimers.setInterval(() => {
-    renderAll();
-  }, delay);
+  worker.value?.postMessage({
+    type: 'request-clear-loop',
+    timer: workerTimerId.value,
+  });
+  worker.value?.postMessage({
+    type: 'request-start-loop',
+    delay,
+  });
+  worker.value?.addEventListener('message', (e) => {
+    if (e.data.type === 'response-start-loop') {
+      workerTimerId.value = e.data.timer;
+    } else if (e.data.type === 'response-looping') {
+      renderAll();
+    }
+  });
 }
 
 function handleNullAudio() {
@@ -845,7 +863,10 @@ function handleMixedAudio() {
 }
 
 function handleEndLive() {
-  clearInterval(sendBlobTimer.value);
+  worker.value?.postMessage({
+    type: 'request-clear-loop',
+    timer: workerMsrTimerId.value,
+  });
   recorder.value?.removeEventListener('dataavailable', handleSendBlob);
   endLive();
 }

+ 1 - 16
test/test.vue

@@ -2,21 +2,6 @@
   <div></div>
 </template>
 
-<script lang="ts" setup>
-import { onMounted, ref } from 'vue';
-
-const worker = ref<Worker>();
-
-onMounted(() => {
-  worker.value = new Worker('worker.js');
-  worker.value.addEventListener('message', (e) => {
-    console.log('从 Worker 接收到的消息:', e.data);
-  });
-  worker.value.postMessage({ type: 'start-loop', delay: 1000 / 30 }); // 发送消息到 Worker
-  // setInterval(function () {
-  //   console.log(`setInterval在工作${new Date().toLocaleString()}`);
-  // }, 100); // 设定间隔为1000毫秒,即1秒
-});
-</script>
+<script lang="ts" setup></script>
 
 <style lang="scss" scoped></style>