123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- <template>
- <div id="videoPreview">
- <el-dialog
- :visible.sync="diavos"
- width="840px"
- @opened="isOkBf"
- @close="clears"
- :show-close="false"
- :close-on-click-modal="false"
- >
- <div slot="title" class="hearders">
- <div class="leftTitle">视频预览</div>
- <div class="rightBoxs">
- <img src="@/assets/images/Close@2x.png" alt @click="clears" />
- </div>
- </div>
- <div>
- <div id="player" v-if="listData.sectionType === 1"></div>
- <div id="playerzb" v-if="listData.sectionType === 2"></div>
- </div>
- <span slot="footer" class="dialog-footer">
- <el-button @click="clears">取 消</el-button>
- </span>
- </el-dialog>
- </div>
- </template>
- <script>
- export default {
- data() {
- return {
- vodPlayerJs: "https://player.polyv.net/script/player.js",
- vid: "",
- vidzb: "",
- playerJs:
- "https://player.polyv.net/resp/live-h5-player/latest/liveplayer.min.js",
- vodPlayerJsForTCPlayer:
- "https://web.sdk.qcloud.com/player/tcplayer/release/v5.1.0/tcplayer.v5.1.0.min.js",
- uidzb: "egsxlptzdq",
- fileSetting: {
- desc: "i am desc", // 描述
- cataid: "1639399775001", // 分类ID 可以后端传递 也可以不写 或写死
- tag: "i am tag", // 标签
- luping: 0, // 是否开启视频课件优化处理,对于上传录屏类视频清晰度有所优化:0为不开启,1为开启
- keepsource: 1 // 是否源文件播放(不对视频进行编码):0为编码,1为不编码
- },
- diavos: false,
- listData: {} //数据
- };
- },
- methods: {
- diavosFun(item) {
- if (item.sectionType === 1) {
- this.vid = item.recordingUrl;
- }
- if (item.sectionType === 2) {
- this.vidzb = item.liveUrl;
- }
- this.listData = item;
- this.diavos = true;
- },
- isOkBf() {
- if (this.listData.sectionType === 1) {
- if(this.listData.viewSign == 2) {
- this.loadPlayerScript_tencent(this.loadPlayer_tencent);
- }else {
- this.loadPlayerScript(this.loadPlayer);
- }
- }
- if (this.listData.sectionType === 2) {
- this.loadPlayerScriptzb(this.loadPlayerzb);
- }
- },
- loadPlayerScript(callback) {
- if (!window.polyvPlayer) {
- const myScript = document.createElement("script");
- myScript.setAttribute("src", this.vodPlayerJs);
- myScript.onload = callback;
- document.body.appendChild(myScript);
- } else {
- callback();
- this.player.on("serverError", (...params) => {
- this.$message.error(returnTitle(params[1]));
- console.log(params);
- });
- }
- },
- loadPlayerScript_tencent(callback) {
- if (!window.TCPlayer) {
- const myScript = document.createElement("script");
- myScript.setAttribute("src", this.vodPlayerJsForTCPlayer);
- myScript.onload = callback;
- document.body.appendChild(myScript);
- } else {
- callback();
- this.player_tencent.on("server", (...params) => {
- this.$message.error(returnTitle(params[1]));
- console.log(params);
- });
- }
- },
- loadPlayer() {
- var self = this;
- const polyvPlayer = window.polyvPlayer;
- self.player = polyvPlayer({
- wrap: "#player",
- width: 800,
- height: 533,
- vid: self.vid,
- teaser_show: 0,
- playsafe: function(vid, next) {
- self.$api.obtainpolyvvideosign(vid).then(res => {
- next(res.data);
- });
- }
- });
- },
- loadPlayer_tencent() {
- var self = this;
- const TCPlayer = window.TCPlayer;
- try {
- let video = document.querySelector("video");
- video.parentNode.removeChild(video);
- } catch (error) {
- console.log("清除video标签异常");
- }
- let player_tencent = document.createElement("video");
- player_tencent.id = "player-tencent";
- document
- .getElementById("player")
- .insertAdjacentElement("afterend", player_tencent);
- self.$api.obtaintcvideosign(self.vid).then(res => {
- self.player_tencent = TCPlayer("player-tencent", {
- width: 800,
- height: 533,
- fileID: self.vid,
- appID: res.data.appID,
- psign: res.data.psign,
- licenseUrl: res.data.licenseUrl
- });
- });
- },
- /**
- * @param {String} 关闭视频窗口-销毁实例
- */
- clears() {
- this.diavos = false;
- if (this.listData.sectionType === 1 && this.player) {
- this.player.destroy();
- }
- if (this.listData.sectionType === 1 && this.player_tencent) {
- this.player_tencent.dispose();
- }
- if (this.listData.sectionType === 2 && this.playerzb) {
- this.playerzb.destroy();
- }
- this.listData = {};
- },
- loadPlayerScriptzb(callback) {
- if (!window.polyvLivePlayer) {
- const myScript = document.createElement("script");
- myScript.setAttribute("src", this.playerJs);
- myScript.onload = callback;
- document.body.appendChild(myScript);
- } else {
- callback();
- }
- },
- loadPlayerzb() {
- var self = this;
- const polyvLivePlayer = window.polyvLivePlayer;
- self.playerzb = polyvLivePlayer({
- wrap: "#playerzb",
- width: 800,
- height: 533,
- uid: self.uidzb,
- vid: self.vidzb
- });
- }
- }
- };
- </script>
- <style lang="less" scoped>
- /deep/.el-button {
- border-radius: 8px;
- }
- /deep/.el-dialog {
- border-radius: 8px;
- .el-dialog__header {
- padding: 0;
- .hearders {
- height: 40px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0px 18px 0px 20px;
- border-bottom: 1px solid #e2e2e2;
- .leftTitle {
- font-size: 14px;
- font-weight: bold;
- color: #2f4378;
- }
- .rightBoxs {
- display: flex;
- align-items: center;
- img {
- width: 14px;
- height: 14px;
- margin-left: 13px;
- cursor: pointer;
- }
- }
- }
- }
- .el-dialog__footer {
- padding: 0;
- .dialog-footer {
- padding: 0px 40px;
- height: 70px;
- border-top: 1px solid #e2e2e2;
- display: flex;
- align-items: center;
- justify-content: flex-end;
- }
- }
- }
- .imgBox {
- width: 100%;
- // height: 210px;
- border: 1px solid #e2e2e2;
- border-radius: 8px;
- padding: 8px 8px 3px;
- display: flex;
- flex-direction: column;
- align-items: center;
- .imgLabel {
- flex: 1;
- width: 100%;
- border: 1px dotted #e2e2e2;
- color: #999;
- font-size: 14px;
- cursor: pointer;
- border-radius: 8px;
- .msPhoto {
- display: flex;
- justify-content: center;
- align-items: center;
- max-width: 100%;
- max-height: 270px;
- img {
- max-width: 100%;
- max-height: 270px;
- }
- }
- .imgbbx {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- width: 100%;
- height: 100%;
- i {
- font-weight: bold;
- margin: 14px 0;
- font-size: 24px;
- }
- }
- }
- p {
- margin: 5px 0px;
- }
- }
- </style>
|