专栏首页播放器tcplayer 源码改造第四弹 -> 字幕(srt)
原创

tcplayer 源码改造第四弹 -> 字幕(srt)

前序

简介

  • 主要介绍了基于tcplayer的源码改造,加入防盗录(即随机在视频中出现自定义的字符)功能function t(i, o) { n(this, t); var s = l(o); M = ["od", "hd", "sd"]; var a = { owner: i, videoSource: s, src: s.curUrl, autoplay: o.autoplay, live: o.live, flash: o.flash, flashUrl: o.flashUrl, poster: o.poster, width: o.width, height: o.height, volume: o.volume, listener: o.listener, wording: o.wording, controls: o.controls, clarity: o.clarity, clarityLabel: o.clarityLabel, showLoading: "boolean" != typeof o.showLoading || o.showLoading, pausePosterEnabled: void 0 === o.pausePosterEnabled || o.pausePosterEnabled, fullscreenEnabled: void 0 === o.fuScrnEnabled || o.fuScrnEnabled, systemFullscreen: o.systemFullscreen || !1, hls: o.hls || "0.12.4", h5_flv: o.h5_flv, x5_player: o.x5_player !== !1, x5_type: o.x5_type, x5_fullscreen: o.x5_fullscreen, x5_orientation: o.x5_orientation, x5_playsinline: o.x5_playsinline, preload: o.preload || "auto", hlsConfig: o.hlsConfig, flvConfig: o.flvConfig, // curRateIndex表示当前倍速的索引 curRateIndex: o.curRateIndex ? o.curRateIndex : 4, // rates表示倍速数组 rates: o.rates ? o.rates : [2, 1.75, 1.5, 1.25, 1.0, 0.75, 0.5], // 防录屏文字,无则表示不出现防录屏文字 appear_text: o.appear_text, // 文字出现是时长最大值 appear_time: o.appear_time ? o.appear_time : 10, // 文字消失的时长最大值 disappear_time: o.disappear_time ? o.appear_time : 100, // 文字出现时的颜色 appear_color: o.appear_color ? o.appear_color : ['#fff', '#000'], // 文字出现时字体的最小值 appear_fontsize_min: o.appear_fontsize_min ? o.appear_fontsize_min : 12, // 文字出现时字体的最大值 appear_fontsize_max: o.appear_fontsize_max ? o.appear_fontsize_max : 22, }; return r(this, e.call(this, a)) }添加防盗录的节点定位字符串"vcp-player",可以定位到如下代码:t.Player = function () { function e(t) { r(this, e), this.options = t, this.ready = !1, this.hasPlay = !1; var i = t.owner; return i ? (this.guid = x.guid(), this.listener = this.options.listener, d.sub("*", "*", x.bind(this, this.handleMsg), this), i = P.get(i), this.mtaReport = new L["default"](this, this.options), void this.render(i)) : console.error("Player need a container") } return e.prototype.render = function (e) { var t = "vcp-player"; if (C.TOUCH_ENABLED && (t += " touchable"), this.el = P.createEl("div", {"class": t}), e.appendChild(this.el), this.errortips = new T["default"](this), this.errortips.render(this.el), this.loading = new E["default"](this), this.loading.render(this.el), this.options.width = this.options.width || e.offsetWidth, this.options.height = this.options.height || e.offsetHeight, this.size(this.options.width, this.options.height), !this.verifyOptions()) { return this.listener({type: "error", code: 5}), x.console.error("create failed") }修改如下:
  • 不涉及tcplayer的使用以及框架如何调用,详情请看腾讯云点播文档
  • 源码解析中有些注释是笔者加的,如需定位,请不要复制注释
  • 以下示例的代码为重新混淆压缩过,可能与原来的tcplayer.js函数名不同,不可直接复制使用,请务必跟着笔者一步步执行人群
  • 不想自己写播放器而使用tcplayer,但是又受限于播放器本身不带有防盗录功能的开发人员
  • 不适合没有任何前端基础的小白,请谨慎观看git地址https://github.com/HaverLee1/hls-player源码改造tcplayer.js(各位客官请自行格式化代码)修改思路
  • 浏览器中打开播放器页面,打开开发者工具,定位到视频播放的节点,可以看到视频的根节点是"vcp-player",video标签就是该节点的下一级节点,所以可以考虑在节点"vcp-player"加一个节点,作为video的同层节点来显示防盗录的信息
    在这里插入图片描述
  • 在修改过程中,考虑到防盗录的功能(加大盗录后去水印的难度),增加如下的参数配置
    • 自定义字符
    • 随机位置
    • 随机字体大小
    • 随机颜色添加配置参数在代码中定位videoSource,在第一个的位置,即初始化赋值的同层如下参数(带有注释的则是笔者加入的参数)
t.Player = function () {
      function e(t) {
        r(this, e), this.options = t, this.ready = !1, this.hasPlay = !1;
        var i = t.owner;
        return i ? (this.guid = x.guid(), this.listener = this.options.listener, d.sub("*", "*", x.bind(this, this.handleMsg), this), i = P.get(i), this.mtaReport = new L["default"](this, this.options), void this.render(i)) : console.error("Player need a container")
      }

      // 生成[min,max]区间的随机数字
      function f1(min, max) {
        return Math.floor(Math.random() * (max - min)) + min
      }

      return e.prototype.render = function (e) {
        var t = "vcp-player", o = this.options, spanElment = P.createEl("span", {"class": "oneweek-video-el"});
        // 如果存在appear_text则进行文字悬浮
        if (o.appear_text) {
          spanElment.innerHTML = o.appear_text;
          spanElment.style.display = "none";
          const appearColorLength = o.appear_color.length;
          const appearColor = o.appear_color;
          const appearFontsizeMin = o.appear_fontsize_min;
          const appearFontsizeMax = o.appear_fontsize_max;
          const appearTime = o.appear_time, disappearTime = o.disappear_time;
          let showStudengNumPositionX, showStudengNumPositionY;
          // 设置出现随机字符的周期 -> 出现最大时长+消失的最大时长
          const interTime = (appearTime + disappearTime) * 1000;
          // 创建定时器
          setInterval(() => {
            // 消失的时长,范围是[1,消失的最大时长]
            const disappearDuration = f1(1, disappearTime) * 1000;
            setTimeout(() => {
              // 随机位置的style.left
              showStudengNumPositionX = f1(20, 80);
              // 随机位置的style.top
              showStudengNumPositionY = f1(20, 80);
              // 出现的时长,范围是[1,出现的最大时长]
              const appearDuration = f1(1, appearTime) * 1000;
              // 随机颜色
              const appearColorIndex = f1(0, appearColorLength);
              // 随机字体大小
              const fontSize = f1(appearFontsizeMin, appearFontsizeMax);
              // 展示防盗录文字
              spanElment.style.display = "";
              spanElment.style.color = appearColor[appearColorIndex];
              spanElment.style.left = showStudengNumPositionX + "%";
              spanElment.style.top = showStudengNumPositionY + "%";
              spanElment.style.fontSize = fontSize + 'px';
              setTimeout(() => {
                // 不展示防盗录文字
                spanElment.style.display = "none";
              }, appearDuration);
            }, disappearDuration);
          }, interTime);
        }
        if (C.TOUCH_ENABLED && (t += " touchable"), this.el = P.createEl("div", {"class": t}),
          // 添加防盗录节点span
          this.el.appendChild(spanElment),
          e.appendChild(this.el), this.errortips = new T["default"](this), this.errortips.render(this.el), this.loading = new E["default"](this), this.loading.render(this.el), this.options.width = this.options.width || e.offsetWidth, this.options.height = this.options.height || e.offsetHeight, this.size(this.options.width, this.options.height), !this.verifyOptions()) {
          return this.listener({type: "error", code: 5}), x.console.error("create failed")
        }

此时,使用浏览器打开播放页面和开发者工具,定位到视频播放节点,可以看到在"vcp-player"出现了我们自定义的span节点,但是在播放器中还看不到文字浮现,下面,我们就要来修改该节点的样式

"vcp-player"出现了我们自定义的span节点

添加防盗录的节点样式

依旧定位字符串"vcp-player",可以找到如下的样式信息

    t = e.exports = i(8)(), t.push([e.id, ".vcp-player{position:relative;z-index:0;font-family:Tahoma,\\\\5FAE\\8F6F\\96C5\\9ED1,\\u5b8b\\u4f53,Verdana,Arial,sans-serif;background-color:#000}.vcp-player video{display:block;overflow:hidden}.vcp-fullscreen.vcp-player,.vcp-fullscreen video,body.vcp-full-window{width:100%!important;height:100%!important}body.vcp-full-window{overflow-y:auto}.vcp-full-window .vcp-player{position:fixed;left:0;top:0;z-index:2147483647}.vcp-pre-flash,.vcp-video{width:100%;height:100%}.vcp-pre-flash{z-index:999;background:#000;position:absolute;top:0;left:0}.vcp-controls-panel{position:absolute;bottom:0;width:100%;font-size:16px;height:3em;z-index:1000}.vcp-controls-panel.show{-webkit-animation:fadeIn ease .8s;animation:fadeIn ease .8s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.vcp-controls-panel.hide{-webkit-animation:fadeOut ease .8s;animation:fadeOut ease .8s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.vcp-panel-bg{width:100%;height:100%;position:absolute;left:0;top:0;background-color:#242424;opacity:.8;filter:alpha(opacity=80);z-index:1000}.vcp-playtoggle{cursor:pointer;position:relative;z-index:1001;width:3em;height:100%;float:left;background-image:url(" + i(9) + ");background-image:url(" + i(10) + ")\\0}.vcp-playtoggle:focus,.vcp-playtoggle:hover{background-color:#708090;opacity:.9;filter:alpha(opacity=90)}.touchable .vcp-playtoggle:hover{background-color:transparent;opacity:1}.vcp-playing .vcp-playtoggle{background-image:url(" + i(11) + ");background-image:url(" + i(12) + ")\\0}.vcp-bigplay{width:100%;height:80%;position:absolute;background-color:white\\0;filter:alpha(opacity=0);opacity:0;z-index:1000;top:0;left:0}.vcp-slider{position:relative;z-index:1001;float:left;background:#c4c4c4;height:10px;opacity:.8;filter:alpha(opacity=80);cursor:pointer}.vcp-slider .vcp-slider-track{width:0;height:100%;margin-top:0;opacity:1;filter:alpha(opacity=100);background-color:#1e90ff}.vcp-slider .vcp-slider-thumb{cursor:pointer;background-color:#fff;position:absolute;top:0;left:0;border-radius:1em!important;height:10px;margin-left:-5px;width:10px}.vcp-slider-vertical{position:relative;width:.5em;height:8em;top:-5.6em;z-index:1001;background-color:#1c1c1c;opacity:.9;filter:alpha(opacity=90);cursor:pointer}.vcp-slider-vertical .vcp-slider-track{background-color:#1275cf;width:.5em;height:100%;opacity:.8;filter:alpha(opacity=80)}.vcp-slider-vertical .vcp-slider-thumb{cursor:pointer;position:absolute;background-color:#f0f8ff;width:.8em;height:.8em;border-radius:.8em!important;margin-top:-.4em;top:0;left:-.15em}.vcp-timeline{top:-10px;left:0;height:10px;position:absolute;z-index:1001;width:100%}.vcp-timeline .vcp-slider-thumb{top:-4px}.vcp-timeline .vcp-slider{margin-top:8px;height:2px;width:100%}.vcp-timeline:hover .vcp-slider{margin-top:0;height:10px}.vcp-timeline:hover .vcp-slider-thumb{display:block;width:16px;height:16px;top:-3px;margin-left:-8px}.vcp-timelabel{display:inline-block;line-height:3em;float:left;color:#fff;padding:0 9px}.vcp-timelabel,.vcp-volume{height:3em;z-index:1001;position:relative}.vcp-volume{width:3em;cursor:pointer;float:right;background-color:transparent;opacity:.9;filter:alpha(opacity=90)}.vcp-volume-icon{background-image:url(" + i(13) + ");background-image:url(" + i(14) + ")\\0;display:inline-block;width:3em;height:3em;position:absolute;left:0;top:0}.vcp-volume-muted .vcp-volume-icon{background-image:url(" + i(15) + ");background-image:url(" + i(16) + ")\\0}.vcp-volume .vcp-slider-vertical{top:-8.4em;left:1em;display:none}.vcp-volume .vcp-slider-track{position:absolute;bottom:0}.vcp-volume:hover .vcp-slider-vertical{display:block}.vcp-volume .vcp-volume-bg{height:8.8em;width:2em;position:absolute;left:.25em;top:-8.8em;background:#242424;display:none}.vcp-volume:hover .vcp-slider-vertical,.vcp-volume:hover .vcp-volume-bg{display:block}.vcp-fullscreen-toggle{position:relative;width:3em;height:3em;float:right;cursor:pointer;z-index:1001;background-image:url(" + i(17) + ");background-image:url(" + i(18) + ")\\0}.vcp-fullscreen .vcp-fullscreen-toggle{background-image:url(" + i(19) + ");background-image:url(" + i(20) + ')\\0}.vcp-loading{box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;text-indent:-9999em}.vcp-loading:before{box-sizing:inherit;content:"";display:block;width:100%;height:100%;border-radius:50%;border:3px solid hsla(0,0%,100%,0);border-left-color:#fff;border-right-color:#fff;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.1s infinite linear;animation:load8 1.1s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.vcp-poster{position:absolute;left:0;top:0;overflow:hidden;z-index:1000;width:100%;height:100%;display:none}.vcp-poster-pic{position:relative}.vcp-poster-pic.cover,.vcp-poster-pic.default{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.vcp-poster-pic.cover{width:100%}.vcp-poster-pic.stretch{width:100%;height:100%}.vcp-error-tips{position:absolute;z-index:1001;width:100%;height:4.5em;left:0;top:50%;color:#ff4500;margin-top:-5.25em;text-align:center;display:none}.vcp-clarityswitcher{height:3em;width:3em;cursor:pointer;position:relative;z-index:1001;float:right;background-color:transparent;opacity:.9}.vcp-vertical-switcher-container{width:3em;position:absolute;left:0;bottom:2.4em;background:#242424;display:none}.vcp-vertical-switcher-current{display:block;color:#fff;text-align:center;line-height:3em}.vcp-vertical-switcher-item{display:block;color:#fff;text-align:center;line-height:2em}.vcp-vertical-switcher-item.current{color:#888}.vcp-share>a{width:3em;height:3em;cursor:pointer;background-image:url(' + i(21) + ");opacity:.9;display:block}.vcp-share{width:3em;height:3em;position:relative;float:right;z-index:1001}.vcp-vertical-share-container{width:auto;height:auto;position:absolute;background:rgba(36,36,36,.8);padding:.5em;overflow:hidden;display:none}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation:fadeOut ease .8s;animation:fadeOut ease .8s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation:fadeIn ease .8s;animation:fadeIn ease .8s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}", ""])

在其中加入防盗录节点"oneweek-video-el"的样式,如下:

    // 加入节点(class="oneweek-video-el")的样式,设置为绝对定位,并且将层级设置为1000,保证全屏时不被视频遮挡
    t = e.exports = i(8)(), t.push([e.id, ".vcp-player .oneweek-video-el{position:absolute;z-index:1000;}" +
    " .vcp-player{position:relative;z-index:0;font-family:Tahoma,\\\\5FAE\\8F6F\\96C5\\9ED1,\\u5b8b\\u4f53,Verdana,Arial,sans-serif;background-color:#000}.vcp-player video{display:block;overflow:hidden;}.vcp-fullscreen.vcp-player,.vcp-fullscreen video,body.vcp-full-window{width:100%!important;height:100%!important}body.vcp-full-window{overflow-y:auto}.vcp-full-window .vcp-player{position:fixed;left:0;top:0;z-index:2147483647}.vcp-pre-flash,.vcp-video{width:100%;height:100%}.vcp-pre-flash{z-index:999;background:#000;position:absolute;top:0;left:0}.vcp-controls-panel{position:absolute;bottom:0;width:100%;font-size:16px;height:3em;z-index:1000}.vcp-controls-panel.show{-webkit-animation:fadeIn ease .8s;animation:fadeIn ease .8s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.vcp-controls-panel.hide{-webkit-animation:fadeOut ease .8s;animation:fadeOut ease .8s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.vcp-panel-bg{width:100%;height:100%;position:absolute;left:0;top:0;background-color:#242424;opacity:.8;filter:alpha(opacity=80);z-index:1000}.vcp-playtoggle{cursor:pointer;position:relative;z-index:1001;width:3em;height:100%;float:left;background-image:url(" + i(9) + ");background-image:url(" + i(10) + ")\\0}.vcp-playtoggle:focus,.vcp-playtoggle:hover{background-color:#708090;opacity:.9;filter:alpha(opacity=90)}.touchable .vcp-playtoggle:hover{background-color:transparent;opacity:1}.vcp-playing .vcp-playtoggle{background-image:url(" + i(11) + ");background-image:url(" + i(12) + ")\\0}.vcp-bigplay{width:100%;height:80%;position:absolute;background-color:white\\0;filter:alpha(opacity=0);opacity:0;z-index:1000;top:0;left:0}.vcp-slider{position:relative;z-index:1001;float:left;background:#c4c4c4;height:10px;opacity:.8;filter:alpha(opacity=80);cursor:pointer}.vcp-slider .vcp-slider-track{width:0;height:100%;margin-top:0;opacity:1;filter:alpha(opacity=100);background-color:#1e90ff}.vcp-slider .vcp-slider-thumb{cursor:pointer;background-color:#fff;position:absolute;top:0;left:0;border-radius:1em!important;height:10px;margin-left:-5px;width:10px}.vcp-slider-vertical{position:relative;width:.5em;height:8em;top:-5.6em;z-index:1001;background-color:#1c1c1c;opacity:.9;filter:alpha(opacity=90);cursor:pointer}.vcp-slider-vertical .vcp-slider-track{background-color:#1275cf;width:.5em;height:100%;opacity:.8;filter:alpha(opacity=80)}.vcp-slider-vertical .vcp-slider-thumb{cursor:pointer;position:absolute;background-color:#f0f8ff;width:.8em;height:.8em;border-radius:.8em!important;margin-top:-.4em;top:0;left:-.15em}.vcp-timeline{top:-10px;left:0;height:10px;position:absolute;z-index:1001;width:100%}.vcp-timeline .vcp-slider-thumb{top:-4px}.vcp-timeline .vcp-slider{margin-top:8px;height:2px;width:100%}.vcp-timeline:hover .vcp-slider{margin-top:0;height:10px}.vcp-timeline:hover .vcp-slider-thumb{display:block;width:16px;height:16px;top:-3px;margin-left:-8px}.vcp-timelabel{display:inline-block;line-height:3em;float:left;color:#fff;padding:0 9px}.vcp-timelabel,.vcp-volume{height:3em;z-index:1001;position:relative}.vcp-volume{width:3em;cursor:pointer;float:right;background-color:transparent;opacity:.9;filter:alpha(opacity=90)}.vcp-volume-icon{background-image:url(" + i(13) + ");background-image:url(" + i(14) + ")\\0;display:inline-block;width:3em;height:3em;position:absolute;left:0;top:0}.vcp-volume-muted .vcp-volume-icon{background-image:url(" + i(15) + ");background-image:url(" + i(16) + ")\\0}.vcp-volume .vcp-slider-vertical{top:-8.4em;left:1em;display:none}.vcp-volume .vcp-slider-track{position:absolute;bottom:0}.vcp-volume:hover .vcp-slider-vertical{display:block}.vcp-volume .vcp-volume-bg{height:8.8em;width:2em;position:absolute;left:.25em;top:-8.8em;background:#242424;display:none}.vcp-volume:hover .vcp-slider-vertical,.vcp-volume:hover .vcp-volume-bg{display:block}.vcp-fullscreen-toggle{position:relative;width:3em;height:3em;float:right;cursor:pointer;z-index:1001;background-image:url(" + i(17) + ");background-image:url(" + i(18) + ")\\0}.vcp-fullscreen .vcp-fullscreen-toggle{background-image:url(" + i(19) + ");background-image:url(" + i(20) + ')\\0}.vcp-loading{box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;text-indent:-9999em}.vcp-loading:before{box-sizing:inherit;content:"";display:block;width:100%;height:100%;border-radius:50%;border:3px solid hsla(0,0%,100%,0);border-left-color:#fff;border-right-color:#fff;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.1s infinite linear;animation:load8 1.1s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.vcp-poster{position:absolute;left:0;top:0;overflow:hidden;z-index:1000;width:100%;height:100%;display:none}.vcp-poster-pic{position:relative}.vcp-poster-pic.cover,.vcp-poster-pic.default{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.vcp-poster-pic.cover{width:100%}.vcp-poster-pic.stretch{width:100%;height:100%}.vcp-error-tips{position:absolute;z-index:1001;width:100%;height:4.5em;left:0;top:50%;color:#ff4500;margin-top:-5.25em;text-align:center;display:none}.vcp-clarityswitcher{height:3em;width:3em;cursor:pointer;position:relative;z-index:1001;float:right;background-color:transparent;opacity:.9}.vcp-vertical-switcher-container{width:3em;position:absolute;left:0;bottom:2.4em;background:#242424;display:none}.vcp-vertical-switcher-current{display:block;color:#fff;text-align:center;line-height:3em}.vcp-vertical-switcher-item{display:block;color:#fff;text-align:center;line-height:2em}.vcp-vertical-switcher-item.current{color:#888}.vcp-share>a{width:3em;height:3em;cursor:pointer;background-image:url(' + i(21) + ");opacity:.9;display:block}.vcp-share{width:3em;height:3em;position:relative;float:right;z-index:1001}.vcp-vertical-share-container{width:auto;height:auto;position:absolute;background:rgba(36,36,36,.8);padding:.5em;overflow:hidden;display:none}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation:fadeOut ease .8s;animation:fadeOut ease .8s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation:fadeIn ease .8s;animation:fadeIn ease .8s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}", ""])

使用说明

使用时请先压缩js文件

参数说明

在原有播放器支持的参数下添加了参数,如下:

参数

类型

默认值

参数说明

appear_text

String

防录屏文字,无则表示不出现防录屏文字

appear_time

Number

10

防录屏文字出现是时长最大值

disappear_time

Number

100

防录屏文字消失的时长最大值

appear_color

Array

'#fff', '#000'

防录屏文字出现时的颜色

appear_fontsize_min

Number

12

防录屏文字出现时字体的最小值

appear_fontsize_max

Number

22

防录屏文字出现时字体的最大值

使用示例

var player = new TcPlayer('id_test_video', {
	"m3u8": "http://2157.liveplay.myqcloud.com/2157_358535a.m3u8",
	"autoplay" : true,
	"poster" : "http://www.test.com/myimage.jpg",
	"width" :  '480',
	"height" : '320',
	"x5_player": true,
    "systemFullscreen": true,
    "x5_type": "h5",
    "x5_fullscreen": true,
    "x5_orientation": 2,
	"appear_text": "",
	"appear_time": 10,
	"disappear_time": 100,
	"appear_color": ['#fff', '#F4F4F4'],
	"appear_fontsize_min": 12,
	"appear_fontsize_max": 22,
});

相关推荐

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • tcplayer 源码改造第三弹 -> 防盗录

    此时,使用浏览器打开播放页面和开发者工具,定位到视频播放节点,可以看到在"vcp-player"出现了我们自定义的span节点,但是在播放器中还看不到文字浮现,...

    大洼X
  • tcplayer 源码改造第二弹 -> 加入倍速播放

    由腾讯视频的官方文档可以知道,currentTime方法是暴露给用户,用于获取/设置当前时间的方法,同理,加入获取当前倍速的方法currentRate:

    大洼X
  • tcplayer 源码改造第一弹 -> 自定义加密

    在代码中定位videoSource,可定位到如下相似代码,下面的代码中加注释的即为笔者新增的参数

    大洼X
  • tcplayer 源码改造第三弹 -> 防盗录

    此时,使用浏览器打开播放页面和开发者工具,定位到视频播放节点,可以看到在"vcp-player"出现了我们自定义的span节点,但是在播放器中还看不到文字浮现,...

    大洼X
  • 周末小作业

    py3study
  • Jenkins把GitHub项目做成Docker镜像

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    程序员欣宸
  • eharts入门篇一

    从官网下载界面选择你需要的版本下载,根据开发者功能和体积上的需求,我们提供了不同打包的下载,如果你在体积上没有要求,可以直接下载完整版本。

    用户3055976
  • 高清无码!比鬼片还刺激!且听“诡娃”远控的这首惊魂曲

    近日,360云安全系统发现一款名为“诡娃”的远控木马,正通过钓鱼软件、网页挂马等多渠道扩散。“诡娃”除了能进行操控中招电脑等行为外,还会通过控制指令让中招机器弹...

    周俊辉
  • RN实现头部NavBar

    提莫队长
  • 都是因为数学不好,美国人不敢吃中餐,中国人不敢过双十一

    事情发生在美国费城,一个名叫希恩·伍德尔(Sean Woodall)的妹子出门觅食,晃荡的时候看到一家名叫Danny's wok的鸡翅店。

    华章科技

扫码关注云+社区

领取腾讯云代金券