上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12下一页
返回列表 发新帖

求助:在线学习(保利威视播放器)加速的难点

[复制链接]
  • TA的每日心情
    擦汗
    2023-4-18 13:55
  • 签到天数: 34 天

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

    积分
    67
    发表于 2023-2-7 13:17:19 | 显示全部楼层 | 阅读模式
    悬赏20油猫币已解决

    1、继续教育在线学习,head部分引用了http://player.polyv.net/script/player.js,每隔10秒向服务器get数据,参数都在url中,
    2、在body部分,有个script标签,内有多个function,其中一个为savePosition,也是每隔10秒向服务器post数据
    3、get数据的响应值为1;
    4、post响应为success;

    思路一:先测试修改post数据,试试能不能达到实现加速的效果。
    思路二:在思路一的基础上,同步修改get的url,看看能不能达到加速学习的效果。

    难点一:在script标签多个function中,指定修改savePosition的sec1和sec2(player.j2s_stayInVideoTime()为保利威视播放器函数接口,本次视频播放时间)
    难点二:player.js,如何实现定时发送的? 未发现定时器? 如何实现劫持修改?

    player.js的部分代码如下:

    key: "sendData",
    value: function() {
     var t = this.video,
         e = this.duration,
         i = Math.min(Math.ceil(t.currentTime), e) || 0,
         n = Math.floor(this.pd),
         r = c.getTs(),
         a = n - this.prePd;
     this.prePd = n;
     var o = (r - this.sdts) / 1e3;
     (o = Math.max(this.interval, Math.min(o, 60))) < a && (o = a);
     var s = this.sd += o;
     if (this.updateSdts(r), 0 !== n) {
      var l = {
         pid: this.pid,
         vid: this.vid,
         uid: c.getUid(this.vid),
         flow: 0,
         ts: c.getTs(),
         href: this.href,
         duration: e,
         cts: i,
         sign: c.getSign("rtas.net", this.pid, this.vid, 0, n, i),
         sd: Math.floor(s),
         pd: n,
         pn: "HTML5",
         pv: this.pv
      };
      this.appId && (l.appId = this.appId), m()(l, this.data), 1 == ++this.sendCount && (this.viewerAvatar && (l.viewerAvatar = this.viewerAvatar), l.ute = "bop"), this.data.log && console.log(l), this.allowSend && M({
         url: this.URL || Xt,
         type: "get",
         data: l
      })
     }
    }

    script标签内代码如下:

    <script type="text/javascript">
    var player;
    var lateInterval;
    var leftTime;
    var interTime = 10000;
    var intervalsavePosition;
    var allowFlag = "";
    var sendTxt = "";
    //共通方法
    //new
    function isIE(ver){
        var b = document.createElement('b');
        b.innerHTML = '<!--[if IE ' + ver + ']><i></i><![endif]-->';
        return b.getElementsByTagName('i').length === 1;
    }
    //判断浏览器方法
    //new
    function isXpOrIe8(){
        var sUserAgent = navigator.userAgent;
        var isWinXP=false;
        isWinXP = sUserAgent.indexOf("Windows NT 5.1") > -1 || sUserAgent.indexOf("Windows Xp") > -1;
        var isWinIE = isIE(6) ||isIE(7) ||isIE(8);
        return isWinXP && isWinIE;
    }
    //创建播放器方法   如果isXpOrIe8()方法返回true , 则flashvarsParam参数中要增加一个is_xp_ie8:'1' 的参数
    function createPolyv(playPosition,banSeekByLimitTime){
        var flashvarsParam = {'autoplay':'true','watchStartTime':playPosition,'ban_seek_by_limit_time':banSeekByLimitTime,'ban_history_time':'on'};
        if(isXpOrIe8()){
            flashvarsParam = {'autoplay':'true','watchStartTime':playPosition,'ban_seek_by_limit_time':banSeekByLimitTime,'ban_history_time':'on',is_xp_ie8:'1'};
        }
    
        player = polyvPlayer({
             wrap: '#polyvplayer02bfeb00e2ba940698c54cdf517aa9b6_0',
            'vid': '5c0ad4c56c8428644f270c51ae2d76ae_5',
            'width': '100%',
        'height': '640',
            'autoplay':true,
            'speed':false,
            'ban_seek_by_limit_time':banSeekByLimitTime,
            'ban_history_time':'on',
            'watchStartTime':playPosition
        });
    }
    
    createPolyv('0','on');
    function s2j_onVideoPlay(){
        intervalsavePosition = setInterval(savePosition,interTime);
    }
    function s2j_onVideoPause(){
        clearInterval(intervalsavePosition);
    }
    function s2j_onPlayOver(){
        clearInterval(intervalsavePosition);
            //if(isPlayEnd == "1") return false;
        isPlayEnd = "1";
        var path ="http://dlkj.edufe.cn:80/savePlayEndInteracted.action?logNo=15b22ebc-0da9-4e78-9d6a-a84980f77fe7";
            $.ajax({
                url: path,
                type:"post",
                dataType: "json",
                success: function (data) {
        }
        });     
    }
    function savePosition(){
        if(isPlayEnd == "1") return false;
        var path = "http://dlkj.edufe.cn:80/savePlayPositionInteracted.action?logNo=15b22ebc-0da9-4e78-9d6a-a84980f77fe7";
        var sec1=player.j2s_stayInVideoTime();
        var sec2=player.j2s_getCurrentTime();
        var param = "&totalSeconds="+sec1 + "&playPosition=" + sec2;
        $.ajax({
        url: path+param,
        type:"post",
        dataType: "json",
        success: function (data) {
        }
      })
    }
    function getPlayer(movieName) {
         if (navigator.appName.indexOf("Microsoft") != -1) {
             var reObj=window[movieName];
             if(typeof(reObj)=="undefined"){
                 return document[movieName];
             }
            try{
               if(reObj.length>0){
                   return reObj[0];
               }else{
                    return reObj;
               }
            }catch(e){}
            return ;
        }else {
          return document[movieName];
        }
    }
    </script>

    最佳答案

    查看完整内容

    不用define 直接复写就可以了
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6763

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6763

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2023-2-7 13:17:20 | 显示全部楼层
    ZYMKJ 发表于 2023-2-9 13:45
    这么写?
    Object.defineProperty (player,j2s_stayInVideoTime,{vaule:(j2s_stayInVideoTime*10})

    不用define
    直接复写就可以了
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6763

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6763

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2023-2-7 14:34:55 | 显示全部楼层
    难点一:在script标签多个function中,指定修改savePosition的sec1和sec2(player.j2s_stayInVideoTime()为保利威视播放器函数接口,本次视频播放时间)
    找到player对象劫持player.j2s_stayInVideoTime()这个函数
    难点二:player.js,如何实现定时发送的? 未发现定时器? 如何实现劫持修改?
    一般是对video事件做播放监听插点提交之类的
    可以根据xhr的堆栈回溯找发包点和监控点
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-4-18 13:55
  • 签到天数: 34 天

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

    积分
    67
    发表于 2023-2-7 15:10:32 | 显示全部楼层
    本帖最后由 ZYMKJ 于 2023-2-7 15:20 编辑
    李恒道 发表于 2023-2-7 14:34
    难点一:在script标签多个function中,指定修改savePosition的sec1和sec2(player.j2s_stayInVideoTime()为 ...

    懂了,又没懂。。。
    最好使帮我写一下代码。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6763

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6763

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2023-2-7 15:27:41 | 显示全部楼层
    ZYMKJ 发表于 2023-2-7 15:10
    懂了,又没懂。。。
    最好使帮我写一下代码。

    论坛问答区是学习互助哦
    如果是单纯想要代码的话可以论坛发个单子报价看看有没有愿意接的
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-2-7 21:02:01 | 显示全部楼层
    修改请求可以试试这个库:https://bbs.tampermonkey.net.cn/thread-3284-1-1.html
    难点1直接改url,难点2不用找定时器在哪,abort掉部分请求降低频率,或者利用Promise推迟请求,想提高频率就自己发请求好了。当然纯靠改请求不一定行的通,这个就要自己分析了。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-4-18 13:55
  • 签到天数: 34 天

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

    积分
    67
    发表于 2023-2-8 07:16:52 | 显示全部楼层
    cxxjackie 发表于 2023-2-7 21:02
    修改请求可以试试这个库:https://bbs.tampermonkey.net.cn/thread-3284-1-1.html
    难点1直接改url,难点2不 ...

    谢谢,我试一试,之前ajaxHooer劫持库用过,但这个好像还不一样
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-4-18 13:55
  • 签到天数: 34 天

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

    积分
    67
    发表于 2023-2-9 09:37:17 | 显示全部楼层
    本帖最后由 ZYMKJ 于 2023-2-9 09:38 编辑
    李恒道 发表于 2023-2-7 14:34
    难点一:在script标签多个function中,指定修改savePosition的sec1和sec2(player.j2s_stayInVideoTime()为 ...

    大概知道你说的劫持player对象的j2s_stayInVideoTime()函数,应该用Object.defineProperty这个函数对吗?
    因为是引用player.js里的
    j2s_stayInVideoTime: function() {return this.HTML5 ? Math.round(this.HTML5.statistics.pd) : this.flash.j2s_stayInVideoTime()}
    所以我完全没必要分析player.js,直接劫持。代码大概如下,
    Object.defineProperty (player,j2s_stayInVideoTime,
        {vaule:(return this.HTML5 ? Math.round(this.HTML5.statistics.pd) : this.flash.j2s_stayInVideoTime())*10}
    )
    大概是这样写对么?
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6763

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6763

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2023-2-9 09:49:09 | 显示全部楼层
    ZYMKJ 发表于 2023-2-9 09:37
    大概知道你说的劫持player对象的j2s_stayInVideoTime()函数,应该用Object.defineProperty这个函数对吗?
    ...

    直接player.j2s_stayInVideoTime
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-4-18 13:55
  • 签到天数: 34 天

    [LV.5]常住居民I

    11

    主题

    38

    回帖

    67

    积分

    初级工程师

    积分
    67
    发表于 2023-2-9 13:45:40 | 显示全部楼层
    李恒道 发表于 2023-2-9 09:49
    直接player.j2s_stayInVideoTime

    这么写?
    Object.defineProperty (player,j2s_stayInVideoTime,{vaule:(j2s_stayInVideoTime*10})
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表