8

<video>画面上に要素を時々動的に作成するモバイル Javascript アプリケーションがあります。Omniture で動画再生を追跡する必要があります。playpauseendedseekingおよびイベントをバインドしseekedて、ユーザーがビデオを開始、一時停止、再開、停止したこと (またはビデオの視聴を完了したこと) を追跡しました。これはすべて次のような呼び出しで実装されています

s.Media.play("some_video_name", timePosition);

s.Media.stop("some_video_name");

など。これは現在すべて機能しています。

私が今やりたいことは、trackMilestonesオプションを使用して 0、25、75、および 100% の位置マイルストーンを追跡することですが、オンラインで見つけた例のいずれかが実際に Omnitures.Mediaオブジェクトにそれらの場所をどのように通知するかわかりませんそれは。Omniture は、ビデオ要素にイベント ハンドラをアタッチしない限り、ビデオがどこにあるかを魔法のように知ることはできません。それが彼らがしていることですか?

s.Mediaプレーヤーがビデオを再生しているときに、オブジェクトに自分の位置を知らせるために呼び出すことができるメソッドはありますか?

4

3 に答える 3

4

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ビデオプレーヤーを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;
        }
    }
于 2012-09-07T05:32:10.393 に答える
0

s.Media に期間を通知する通話を見逃しているようです:

    s.Media.open("some_video_name", videoDuration, videoSrc);

これは、再生/一時停止/シーク イベントと組み合わせて、ビデオが全体の再生の割合としておおよそどこにあるかを知らせる必要があります。

おおよそのことを言っているのは、彼らが基本的に独自の内部ストップウォッチを実行していて、ビデオの再生ヘッドからドリフトする可能性があるためです。たとえば、HTML5 ビデオでは、一時停止に加えて「待機」イベントをキャッチする必要があります。ストップウォッチはリアルタイムの再生速度を想定し、ビデオが再生されているが時間内に進んでいないその他の非イベント起動理由を処理しません (ビデオがページの他の場所で既に再生されているため、ブラウザが再生を拒否する可能性があります/サイト )。おそらく彼らのストップウォッチは、追跡目的には十分です。

于 2012-04-11T16:24:43.247 に答える
-1

これに対する解決策をすでに考え出したかどうかはわかりません。しかし、Milestone を追跡するには、scode の Media モニター コードに次のコードを追加できます。

var tracked10=false; //Variables used as "flags" to prevent the same code from running
var tracked90=false; //twice in the same video play.
s.Media.monitor = function (s,media) {

//Use this code with either JavaScript or Flash.
// eVar1 = Media Name
// event1 = Video Begins
// event2 = Reached 10%
// event3 = Reached 90%
// event4 = Reached 100%
if (media.event == "Open") { //Executes when the video opens.
s.Media.trackVars = "eVar1,events";
s.Media.trackEvents = "event1";
s.events="event1";
s.eVar1 = media.name;
s.Media.track(media.name);
}
if ((!tracked10) && (media.percent >= 10) { //Executes at 10% complete.
s.Media.trackVars = "eVar1,events";
s.Media.trackEvents = "event2";
s.events="event2"
s.eVar1 = media.name;
s.Media.track(media.name);
tracked10 = true;
}
if ((!tracked90) && (media.percent >= 90)) { //Executes at 90% complete.
s.Media.trackVars = "eVar1,events";
s.Media.trackEvents = "event3";
s.events="event3"
s.eVar1 = media.name;
s.Media.track(media.name);
tracked90 = true;
}
if (media.event == "CLOSE") { //Executes when the video completes.
s.Media.trackVars = "eVar1,events";
s.Media.trackEvents = "event4";
s.events="event4"
s.eVar1 = media.name;
s.Media.track(media.name);
var tracked10=false; //Reset flags values at Media.close if visitors can play
var tracked90=false; //additional videos without reloading the page.
}
};
于 2012-01-17T06:12:48.043 に答える