zhangjie 2 năm trước cách đây
mục cha
commit
6fd3624caa

+ 1 - 0
package.json

@@ -34,6 +34,7 @@
     "moment": "^2.27.0",
     "query-string": "^6.13.1",
     "register-service-worker": "^1.7.1",
+    "tcplayer.js": "^4.7.0",
     "trtc-js-sdk": "^4.12.1",
     "vue": "^2.6.11",
     "vue-awesome": "^4.1.0",

+ 14 - 0
src/features/invigilation/OnlinePatrol/PatrolWarningDetail.vue

@@ -21,6 +21,20 @@
             <span>科目(代码):</span
             ><span>{{ detailInfo.courseNameCode }}</span>
           </p>
+          <p>
+            <span>考试时间:</span
+            ><span
+              >{{ detailInfo.examActivityStartTime | datetimeFilter }}~{{
+                detailInfo.examActivityEndTime | datetimeFilter
+              }}</span
+            >
+          </p>
+          <p>
+            <span>考场:</span><span>{{ detailInfo.roomName }}</span>
+          </p>
+          <p>
+            <span>监考员:</span><span>{{ detailInfo.invigilateUsers }}</span>
+          </p>
         </div>
         <div class="detail-body-head-right">
           <el-button

+ 33 - 11
src/features/invigilation/common/FlvMedia.vue

@@ -5,7 +5,14 @@
     element-loading-text="加载中"
     element-loading-background="rgba(0, 0, 0, 0.8)"
   >
-    <video ref="VideoMedia" muted @ended="destroyPlayer"></video>
+    <video
+      ref="VideoMedia"
+      :id="videoId"
+      muted
+      @ended="destroyPlayer"
+      @pause="playerPaused"
+      @play="playerPlaying"
+    ></video>
     <div v-if="result.error" class="media-error" @click.stop="() => {}">
       <div class="media-error-content">
         <span>{{ result.message }},</span>
@@ -24,6 +31,15 @@
     >
       <i :class="['icon', !muted ? 'icon-audio-act' : 'icon-audio']"></i>
     </div>
+    <div
+      v-if="liveUrl && !result.error && !loading && flvPlayer"
+      class="media-video-play"
+      @click.stop="playOrPausePlayer"
+    >
+      <i
+        :class="[this.paused ? 'el-icon-video-play' : 'el-icon-video-pause']"
+      ></i>
+    </div>
   </div>
 </template>
 
@@ -50,8 +66,11 @@ export default {
   },
   data() {
     return {
+      videoId: `video${this._uid}`,
+      videoElement: null,
       flvPlayer: null,
       muted: true,
+      paused: false,
       retryCount: 0,
       loading: false,
       result: {
@@ -104,7 +123,7 @@ export default {
       this.flvPlayer.on(flvjs.Events.ERROR, this.playError);
       this.flvPlayer.on(flvjs.Events.METADATA_ARRIVED, () => {
         this.loading = false;
-        console.log("正常播放");
+        console.log("视频信息获取成功");
         this.retryCount = 0;
       });
       this.flvPlayer.on(
@@ -117,10 +136,7 @@ export default {
         this.lastDecodedFrames = res.decodedFrames;
         return;
       }
-      if (
-        this.lastDecodedFrames === res.decodedFrames &&
-        !this.flvPlayer.paused
-      ) {
+      if (this.lastDecodedFrames === res.decodedFrames && !this.paused) {
         this.lastDecodedFrames = 0;
         console.log("卡住了,准备重试!");
         this.retryPlay();
@@ -164,11 +180,9 @@ export default {
         console.log("已重新播放");
       }, 1000);
     },
-    playPlayer() {
-      this.flvPlayer.play();
-    },
-    pausePlayer() {
-      this.flvPlayer.pause();
+    playOrPausePlayer() {
+      if (!this.flvPlayer) return;
+      this.paused ? this.flvPlayer.play() : this.flvPlayer.pause();
     },
     destroyPlayer() {
       if (!this.flvPlayer) return;
@@ -203,6 +217,14 @@ export default {
         this.retryCount++;
       });
     },
+    playerPaused() {
+      this.paused = true;
+      console.log(this.paused);
+    },
+    playerPlaying() {
+      this.paused = false;
+      console.log(this.paused);
+    },
   },
   beforeDestroy() {
     this.destroyPlayer();

+ 214 - 0
src/features/invigilation/common/FlvMedia2.vue

@@ -0,0 +1,214 @@
+<template>
+  <div
+    class="flv-media"
+    v-loading="loading"
+    element-loading-text="加载中"
+    element-loading-background="rgba(0, 0, 0, 0.8)"
+  >
+    <video
+      ref="VideoMedia"
+      :id="videoId"
+      muted
+      @pause="playerPaused"
+      @play="playerPlaying"
+    ></video>
+    <div v-if="result.error" class="media-error" @click.stop="() => {}">
+      <div class="media-error-content">
+        <span>{{ result.message }},</span>
+        <el-button type="text" @click="reloadVideo">点击刷新</el-button>
+      </div>
+    </div>
+    <div v-if="!liveUrl" class="media-error" @click.stop="() => {}">
+      <div class="media-error-content">
+        <span>无视频源</span>
+      </div>
+    </div>
+    <div
+      v-if="liveUrl && !result.error && !loading && !hideAudioIcon"
+      class="media-video-muted"
+      @click.stop="videoMuted"
+    >
+      <i :class="['icon', !muted ? 'icon-audio-act' : 'icon-audio']"></i>
+    </div>
+    <div
+      v-if="liveUrl && !result.error && !loading && flvPlayer"
+      class="media-video-play"
+      @click.stop="playOrPausePlayer"
+    >
+      <i
+        :class="[this.paused ? 'el-icon-video-play' : 'el-icon-video-pause']"
+      ></i>
+    </div>
+  </div>
+</template>
+
+<script>
+import TCPlayer from "tcplayer.js";
+// doc: https://cloud.tencent.com/document/product/881/30820
+import timeMixin from "../../../mixins/timeMixin";
+
+export default {
+  name: "flv-media",
+  mixins: [timeMixin],
+  props: {
+    liveUrl: {
+      type: String,
+    },
+    maxRetryCount: {
+      type: Number,
+      default: 3,
+    },
+    hideAudioIcon: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      videoId: `video${this._uid}`,
+      flvPlayer: null,
+      muted: true,
+      paused: false,
+      retryCount: 0,
+      loading: false,
+      result: {
+        error: false,
+        message: "",
+      },
+      lastDecodedFrames: 0,
+    };
+  },
+  watch: {
+    muted: {
+      handler() {
+        this.$emit("media-muted-change", this.muted);
+      },
+      immediate: true,
+    },
+  },
+  mounted() {
+    this.initVideo();
+    this.retryCount++;
+  },
+  methods: {
+    initVideo() {
+      if (!this.liveUrl) return;
+      this.loading = true;
+
+      this.flvPlayer = TCPlayer(this.videoId, {
+        controls: false,
+        autoplay: true,
+        muted: true,
+        bigPlayButton: false,
+      });
+      this.flvPlayer.src(this.liveUrl);
+      this.flvPlayer.ready(() => {
+        this.loading = false;
+        console.log(this.flvPlayer.muted);
+      });
+      this.flvPlayer.on("error", this.playError);
+      this.flvPlayer.on("ended", this.destroyPlayer);
+    },
+    playError(code) {
+      switch (code) {
+        case 1:
+          console.log("媒体问题,准备重试!");
+          this.retryPlay();
+          break;
+        case 2:
+          console.log("网络问题,准备重试!");
+          this.retryPlay();
+          break;
+        case 3:
+          console.log("解码问题,准备重试!");
+          this.retryPlay();
+          break;
+        default:
+          console.log(code + "未知问题,无法播放!");
+          this.retryPlay();
+          break;
+      }
+    },
+    statisticsInfoEventHandle(res) {
+      if (this.lastDecodedFrames === 0) {
+        this.lastDecodedFrames = res.decodedFrames;
+        return;
+      }
+      if (
+        this.lastDecodedFrames === res.decodedFrames &&
+        !this.flvPlayer.paused
+      ) {
+        this.lastDecodedFrames = 0;
+        console.log("卡住了,准备重试!");
+        this.retryPlay();
+      } else {
+        this.lastDecodedFrames = res.decodedFrames;
+      }
+    },
+    retryPlay() {
+      if (this.retryCount >= this.maxRetryCount) {
+        console.log("已尝试最大次数重新播放!");
+        this.result = {
+          error: true,
+          message: "播放失败",
+        };
+        this.retryCount = 0;
+        this.loading = false;
+        return;
+      }
+
+      this.addSetTime(() => {
+        this.reloadVideo();
+        console.log("已重新播放");
+      }, 1000);
+    },
+    destroyPlayer() {
+      if (!this.flvPlayer) return;
+      this.flvPlayer.pause();
+      this.flvPlayer.dispose();
+      this.flvPlayer = null;
+      this.clearSetTs();
+    },
+    mutedPlayer(muted) {
+      if (!this.flvPlayer) return;
+      this.flvPlayer.muted = muted;
+      this.muted = this.flvPlayer.muted;
+    },
+    videoMuted() {
+      if (!this.flvPlayer) return;
+      const muted = this.flvPlayer.volume();
+      console.log(muted);
+      this.$emit("muted-change");
+      this.flvPlayer.muted = !muted;
+      this.muted = this.flvPlayer.muted;
+    },
+    reloadVideo() {
+      this.result = {
+        error: false,
+        message: "",
+      };
+      this.loading = true;
+      this.$nextTick(() => {
+        this.destroyPlayer();
+        this.initVideo();
+        this.retryCount++;
+      });
+    },
+    playOrPausePlayer() {
+      if (!this.flvPlayer) return;
+      this.paused ? this.flvPlayer.play() : this.flvPlayer.pause();
+    },
+    playerPaused() {
+      this.paused = true;
+      console.log(this.paused);
+    },
+    playerPlaying() {
+      this.paused = false;
+      console.log(this.paused);
+    },
+  },
+  beforeDestroy() {
+    this.destroyPlayer();
+  },
+};
+</script>

+ 1 - 0
src/main.js

@@ -26,6 +26,7 @@ import "./styles/icons.scss";
 import "./styles/base.scss";
 import "./styles/element-ui-custom.scss";
 // styles end
+// import "tcplayer.js/dist/tcplayer.min.css";
 
 Vue.config.productionTip = false;
 

+ 21 - 1
src/styles/base.scss

@@ -1652,7 +1652,8 @@ body {
   position: relative;
   height: 100%;
 
-  > video {
+  > video,
+  .video-js {
     display: block;
     width: 100%;
     height: 100%;
@@ -1702,6 +1703,25 @@ body {
     border-radius: 50%;
     cursor: pointer;
 
+    &:hover {
+      transform: scale(1.1, 1.1);
+    }
+  }
+  .media-video-play {
+    position: absolute;
+    width: 28px;
+    height: 28px;
+    bottom: 10px;
+    right: 43px;
+    z-index: 100;
+    text-align: center;
+    line-height: 28px;
+    font-size: 20px;
+    color: #ddd;
+    background-color: rgba(255, 255, 255, 0.3);
+    border-radius: 50%;
+    cursor: pointer;
+
     &:hover {
       transform: scale(1.1, 1.1);
     }

+ 171 - 2
yarn.lock

@@ -2914,7 +2914,7 @@ babel-preset-jest@^24.9.0:
     "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
     babel-plugin-jest-hoist "^24.9.0"
 
-babel-runtime@6.x, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
+babel-runtime@6.x, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
   integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
@@ -3038,6 +3038,11 @@ bluebird@^3.5.5:
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de"
   integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==
 
+blueimp-md5@^2.10.0:
+  version "2.19.0"
+  resolved "https://registry.npmmirror.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0"
+  integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==
+
 bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
   version "4.11.8"
   resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
@@ -3501,6 +3506,11 @@ chardet@^0.7.0:
   resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
   integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
 
+charenc@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.npmmirror.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+  integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
+
 check-types@^7.3.0:
   version "7.4.0"
   resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4"
@@ -4091,6 +4101,11 @@ cross-spawn@^7.0.2:
     shebang-command "^2.0.0"
     which "^2.0.1"
 
+crypt@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+  integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
+
 crypto-browserify@^3.11.0:
   version "3.12.0"
   resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
@@ -4604,6 +4619,11 @@ dom-serializer@0:
     domelementtype "^1.3.0"
     entities "^1.1.1"
 
+dom-walk@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
+  integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
+
 domain-browser@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
@@ -4851,6 +4871,11 @@ es-to-primitive@^1.2.0:
     is-date-object "^1.0.1"
     is-symbol "^1.0.2"
 
+es5-shim@^4.5.1:
+  version "4.6.7"
+  resolved "https://registry.npmmirror.com/es5-shim/-/es5-shim-4.6.7.tgz#bc67ae0fc3dd520636e0a1601cc73b450ad3e955"
+  integrity sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==
+
 es6-promise@^4.2.5:
   version "4.2.8"
   resolved "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
@@ -5767,6 +5792,22 @@ glob@^7.1.4:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
+global@4.3.2, global@~4.3.0:
+  version "4.3.2"
+  resolved "https://registry.npmmirror.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+  integrity sha512-/4AybdwIDU4HkCUbJkZdWpe4P6vuw/CUtu+0I1YlLIPe7OlUO7KNJ+q/rO70CW2/NW6Jc6I62++Hzsf5Alu6rQ==
+  dependencies:
+    min-document "^2.19.0"
+    process "~0.5.1"
+
+global@^4.3.1:
+  version "4.4.0"
+  resolved "https://registry.npmmirror.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
+  integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
+  dependencies:
+    min-document "^2.19.0"
+    process "^0.11.10"
+
 globals@^11.1.0:
   version "11.12.0"
   resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -6259,6 +6300,11 @@ indexes-of@^1.0.1:
   resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
   integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
 
+individual@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/individual/-/individual-2.0.0.tgz#833b097dad23294e76117a98fb38e0d9ad61bb97"
+  integrity sha512-pWt8hBCqJsUWI/HtcfWod7+N9SgAqyPEaF7JQjwzjn5vGrpg6aQ5qeAFQ7dx//UH4J1O+7xqew+gCeeFt6xN/g==
+
 infer-owner@^1.0.3, infer-owner@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
@@ -6384,7 +6430,7 @@ is-binary-path@~2.1.0:
   dependencies:
     binary-extensions "^2.0.0"
 
-is-buffer@^1.1.5:
+is-buffer@^1.1.5, is-buffer@~1.1.6:
   version "1.1.6"
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
   integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
@@ -6501,6 +6547,11 @@ is-fullwidth-code-point@^3.0.0:
   resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
   integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=
 
+is-function@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
+  integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==
+
 is-generator-fn@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
@@ -7250,6 +7301,11 @@ jsdom@^15.2.1:
     ws "^7.0.0"
     xml-name-validator "^3.0.0"
 
+jsencrypt@^3.2.0:
+  version "3.3.2"
+  resolved "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.3.2.tgz#b0f1a2278810c7ba1cb8957af11195354622df7c"
+  integrity sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==
+
 jsesc@^2.5.1:
   version "2.5.2"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
@@ -7753,6 +7809,15 @@ md5.js@^1.3.4:
     inherits "^2.0.1"
     safe-buffer "^5.1.2"
 
+md5@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
+  integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==
+  dependencies:
+    charenc "0.0.2"
+    crypt "0.0.2"
+    is-buffer "~1.1.6"
+
 mdn-data@~1.1.0:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
@@ -7872,6 +7937,13 @@ mimic-fn@^2.1.0:
   resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
   integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
 
+min-document@^2.19.0:
+  version "2.19.0"
+  resolved "https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+  integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==
+  dependencies:
+    dom-walk "^0.1.0"
+
 mini-css-extract-plugin@^0.9.0:
   version "0.9.0"
   resolved "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e"
@@ -8685,6 +8757,11 @@ parse-asn1@^5.0.0:
     pbkdf2 "^3.0.3"
     safe-buffer "^5.1.1"
 
+parse-headers@^2.0.0:
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9"
+  integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==
+
 parse-json@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
@@ -9372,6 +9449,11 @@ process@^0.11.10:
   resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
   integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
 
+process@~0.5.1:
+  version "0.5.2"
+  resolved "https://registry.npmmirror.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+  integrity sha512-oNpcutj+nYX2FjdEW7PGltWhXulAnFlM0My/k48L90hARCOJtvBbQXc/6itV2jDvU5xAAtonP+r6wmQgCcbAUA==
+
 progress@^2.0.0:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
@@ -9503,6 +9585,15 @@ query-string@^4.1.0:
     object-assign "^4.1.0"
     strict-uri-encode "^1.0.0"
 
+query-string@^5.0.1:
+  version "5.1.1"
+  resolved "https://registry.npmmirror.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
+  integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
+  dependencies:
+    decode-uri-component "^0.2.0"
+    object-assign "^4.1.0"
+    strict-uri-encode "^1.0.0"
+
 query-string@^6.13.1:
   version "6.13.1"
   resolved "https://registry.npm.taobao.org/query-string/download/query-string-6.13.1.tgz?cache=0&sync_timestamp=1591853352562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquery-string%2Fdownload%2Fquery-string-6.13.1.tgz#d913ccfce3b4b3a713989fe6d39466d92e71ccad"
@@ -9966,6 +10057,13 @@ run-queue@^1.0.0, run-queue@^1.0.3:
   dependencies:
     aproba "^1.1.1"
 
+rust-result@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/rust-result/-/rust-result-1.0.0.tgz#34c75b2e6dc39fe5875e5bdec85b5e0f91536f72"
+  integrity sha512-6cJzSBU+J/RJCF063onnQf0cDUOHs9uZI1oroSGnHOph+CQTIJ5Pp2hK5kEQq1+7yE/EEWfulSNXAQ2jikPthA==
+  dependencies:
+    individual "^2.0.0"
+
 rxjs@^6.5.3, rxjs@^6.5.5:
   version "6.5.5"
   resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
@@ -9978,6 +10076,13 @@ safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, s
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
 
+safe-json-parse@4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/safe-json-parse/-/safe-json-parse-4.0.0.tgz#7c0f578cfccd12d33a71c0e05413e2eca171eaac"
+  integrity sha512-RjZPPHugjK0TOzFrLZ8inw44s9bKox99/0AZW9o/BEQVrJfhI+fIHMErnPyRa89/yRXUUr93q+tiN6zhoVV4wQ==
+  dependencies:
+    rust-result "^1.0.0"
+
 safe-regex@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
@@ -10570,6 +10675,16 @@ stealthy-require@^1.1.1:
   resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
   integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
 
+store2@^2.7.1:
+  version "2.14.2"
+  resolved "https://registry.npmmirror.com/store2/-/store2-2.14.2.tgz#56138d200f9fe5f582ad63bc2704dbc0e4a45068"
+  integrity sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==
+
+store@^2.0.12:
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/store/-/store-2.0.12.tgz#8c534e2a0b831f72b75fc5f1119857c44ef5d593"
+  integrity sha512-eO9xlzDpXLiMr9W1nQ3Nfp9EzZieIQc10zPPMP5jsVV7bLOziSFFBP0XoDXACEIFtdI+rIz0NwWVA/QVJ8zJtw==
+
 stream-browserify@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
@@ -10850,6 +10965,26 @@ tar@^4:
     safe-buffer "^5.1.2"
     yallist "^3.0.2"
 
+tcplayer.js@^4.7.0:
+  version "4.7.0"
+  resolved "https://registry.npmmirror.com/tcplayer.js/-/tcplayer.js-4.7.0.tgz#4ecb428dd134b02e3af472347cea752253b6d2f3"
+  integrity sha512-mX9+jEAozkWsZl5+OZb/6XxjU9JyNTBKgszXyR4/QcYZFpoD6/SK7olhNrQk1fkVxmPC5nF9EvOLJpr3P14/Uw==
+  dependencies:
+    babel-runtime "^6.9.2"
+    blueimp-md5 "^2.10.0"
+    global "4.3.2"
+    jsencrypt "^3.2.0"
+    md5 "^2.3.0"
+    query-string "^5.0.1"
+    safe-json-parse "4.0.0"
+    store "^2.0.12"
+    store2 "^2.7.1"
+    tsml "1.0.1"
+    videojs-font "2.1.0"
+    videojs-ie8 "1.1.2"
+    videojs-vtt.js "0.12.4"
+    xhr "2.4.0"
+
 terser-webpack-plugin@^1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4"
@@ -11128,6 +11263,11 @@ tslib@^1.9.0:
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
   integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
 
+tsml@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/tsml/-/tsml-1.0.1.tgz#89f8218b9d9e257f47d7f6b56d01c5a4d2c68fc3"
+  integrity sha512-3KmepnH9SUsoOVtg013CRrL7c+AK7ECaquAsJdvu4288EDJuraqBlP4PDXT/rLEJ9YDn4jqLAzRJsnFPx+V6lg==
+
 tty-browserify@0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -11419,6 +11559,25 @@ verror@1.10.0:
     core-util-is "1.0.2"
     extsprintf "^1.2.0"
 
+videojs-font@2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/videojs-font/-/videojs-font-2.1.0.tgz#a25930a67f6c9cfbf2bb88dacb8c6b451f093379"
+  integrity sha512-zFqWpLrXf1q8NtYx5qtZhMC6SLUFScDmR6j+UGPogobxR21lvXShhnzcNNMdOxJUuFLiToJ/BPpFUQwX4xhpvA==
+
+videojs-ie8@1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/videojs-ie8/-/videojs-ie8-1.1.2.tgz#a23d3d8608ad7192b69c6077fc4eb848998d35d9"
+  integrity sha512-0Zb2T4MLkpfZbeGMK/Z93b8Lrepr+rLFoHgQV1CoDeFqXvH7b+Vsd/VHoILGxQrgCSHFQ7mAODR6oyMjuiD4/g==
+  dependencies:
+    es5-shim "^4.5.1"
+
+videojs-vtt.js@0.12.4:
+  version "0.12.4"
+  resolved "https://registry.npmmirror.com/videojs-vtt.js/-/videojs-vtt.js-0.12.4.tgz#38f2499e31efb3fa93590ddad4cb663275a4b161"
+  integrity sha512-JQ5eozH5SLOL5xI8ALb1aWf9HjcewQmOytf1gPIsFBTQlSgtSdJ8E8x0GO0ZEXVtFCaPDFiYWAhrjuTI125tBQ==
+  dependencies:
+    global "^4.3.1"
+
 vm-browserify@^1.0.1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019"
@@ -12033,6 +12192,16 @@ ws@^7.0.0:
   dependencies:
     async-limiter "^1.0.0"
 
+xhr@2.4.0:
+  version "2.4.0"
+  resolved "https://registry.npmmirror.com/xhr/-/xhr-2.4.0.tgz#e16e66a45f869861eeefab416d5eff722dc40993"
+  integrity sha512-TUbBsdAuJbX8olk9hsDwGK8P1ri1XlV+PdEWkYw+HQQbpkiBR8PLgD1F3kQDPBs9l4Px34hP9rCYAZOCCAENbw==
+  dependencies:
+    global "~4.3.0"
+    is-function "^1.0.1"
+    parse-headers "^2.0.0"
+    xtend "^4.0.0"
+
 xml-name-validator@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"