javascript - 跟踪从自定义 HTML5 视频播放器到 Omniture 媒体模块的视频里程碑?

标签 javascript html video dom-events adobe-analytics

我有一个移动 Javascript 应用程序,偶尔会动态创建一个 <video>屏幕上的元素。我需要使用 Omniture 跟踪视频播放。我绑定(bind)了play , pause , ended , seekingseeked跟踪用户启动视频、暂停、恢复和停止(或者他们完成观看视频)的事件。这都是通过像

这样的调用来实现的
s.Media.play("some_video_name", timePosition);

s.Media.stop("some_video_name");

等等。这一切目前都有效。

我现在要做的是使用 trackMilestones 跟踪 0、25、75 和 100% 的位置里程碑选项,但我不明白我在网上找到的任何示例实际上如何通知 Omniture s.Media他们在哪里的对象。除非 Omniture 将事件处理程序附加到我的视频元素,否则它无法神奇地知道我的视频在哪里。那是他们在做什么吗?

我可以在 s.Media 上调用一些方法吗?反对在我的播放器播放视频时通知它我的位置?

最佳答案

这是一个跟踪 1/4 里程碑 (25,50,75,100) 的工作示例。

1.确保您的s_code.js 文件中包含以下内容

s.loadModule("Media");
s.Media.autoTrack=false;
s.Media.trackWhilePlaying=true;
s.Media.trackMilestones="25,50,75,100";

s_code 中也需要媒体模块。这是您需要的内容的摘录

s.m_Media_c="var m=s.m_i('Media');m.cn=function(n){var m=this;return m.s.rep(m.s.rep(m.s.rep(n,\"\\n\",''),\"\\r\",''),'--**--','')};m.open=function(n,l,p,b){var m=this,i=new Object,tm=new Date,a='',"
+"x;n=m.cn(n);if(!l)l=-1;if(n&&p){if(!m.l)m.l=new Object;if(m.l[n])m.close(n);if(b&&b.id)a=b.id;if(a)for (x in m.l)if(m.l[x]&&m.l[x].a==a)m.close(m.l[x].n);i.n=n;i.l=l;i.o=0;i.x=0;i.p=m.cn(m.playerNa"
+"me?m.playerName:p);i.a=a;i.t=0;i.ts=0;i.s=Math.floor(tm.getTime()/1000);i.lx=0;i.lt=i.s;i.lo=0;i.e='';i.to=-1;i.tc=0;i.fel=new Object;i.vt=0;i.sn=0;i.sx=\"\";i.sl=0;i.sg=0;i.sc=0;i.lm=0;i.lom=0;m.l"
+"[n]=i}};m._delete=function(n){var m=this,i;n=m.cn(n);i=m.l[n];m.l[n]=0;if(i&&i.m)clearTimeout(i.m.i)};m.close=function(n){this.e(n,0,-1)};m.play=function(n,o,sn,sx,sl){var m=this,i;i=m.e(n,1,o,sn,s"
+"x,sl);if(i&&!i.m){i.m=new Object;i.m.m=new Function('var m=s_c_il['+m._in+'],i;if(m.l){i=m.l[\"'+m.s.rep(i.n,'\"','\\\\\"')+'\"];if(i){if(i.lx==1)m.e(i.n,3,-1);i.m.i=setTimeout(i.m.m,1000)}}');i.m."
+"m()}};m.stop=function(n,

2.将HTML5视频播放器绑定(bind)到Omniture

var html5Player = document.getElementById('video');
html5Player.addEventListener('loadedmetadata',playerHandler,false);
html5Player.addEventListener('play',playerHandler,false);
html5Player.addEventListener('pause',playerHandler,false);
html5Player.addEventListener('ended',playerHandler,false);

    var videoOpened = false;
    var currentTime = 0;

    function playerHandler(e){
        // window.console.log(e);//video meta
        //window.console.log(e.type);
        if (html5Player.currentTime > 0) {
            currentTime = html5Player.currentTime;
        }
        switch(e.type){
            case 'play':
                if(!videoOpened){
                    window.console.log('opened');
                    s.Media.open(videoPageName, html5Player.duration, publicationName);
                    s.Media.play(videoPageName, 0);
                }else{
                    window.console.log('play');
                    s.Media.play(videoPageName, currentTime);
                }
                // alert('currentTime: ' + currentTime);
                // alert('duration: ' + Math.floor(html5Player.duration));
                // alert('videoPageName: ' + videoPageName);
                videoOpened = true;
            break;
            case 'pause':
                window.console.log('pause');
                s.Media.stop(videoPageName,currentTime);
            break;
            case 'ended':
                window.console.log('ended');
                s.Media.stop(videoPageName,currentTime);
                s.Media.close(videoPageName);
            break;
            default:
            break;
        }
    }

关于javascript - 跟踪从自定义 HTML5 视频播放器到 Omniture 媒体模块的视频里程碑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8127065/

相关文章:

Javascript 重新加载 Div 冲突

html - 如何禁用 Web 浏览器输入字段中的字典查找?

python - 使用 MovieStim2 在 PsychoPy 中基于按键跳过视频(循环)

video - 在 ffmpeg 中去隔行

javascript - 为什么我的函数没有循环且没有错误显示?

javascript - 为什么要用 `Boy.prototype = new Human;`来模拟继承呢?

javascript - 在 comfy 中使用特定于布局的 javascript 会导致 InvalidCrossOriginRequest

html - Google 字体大小 10.5 px (.5) 正确的方式和多浏览器支持

javascript - 如何在 Angular4 中检测父 div 上的焦点而不是子 div 上的焦点

ios - 在特定时间向视频添加文本层