DTM es una herramienta que le permite hacer cosas más rápidamente. Podemos rastrear vídeos HTML5 utilizando reglas basadas en eventos en DTM. Sin embargo, no tiene ninguna funcionalidad predeterminada para rastrear vídeos de otros proveedores de vídeo (Brightcove, YouTube, Vimeo, VideoJS, Flowplayer, etc.).

Si alguien utiliza el servicio de vídeo que tiene algún tipo de API JavaScript (Brightcove, YouTube, Vimeo, VideoJS, Flowplayer, etc.), podemos utilizar DTM para agregar el código API para detectar los distintos eventos de vídeo. Es necesario cargar el código que necesita en una regla de carga de página, en una medición de aplicaciones o un archivo s_code (asegúrese de que se cargue en el lugar correcto, por ejemplo, la página superior o inferior) y configurar la API o los detectores para rastrear los vídeos. Luego debemos definir lo que queremos hacer cuando se capturen y se envíen los datos del vídeo. Podemos utilizar la implementación Media Module, que no requiere ninguna configuración adicional en DTM.

Consulte los siguientes pasos para rastrear el "vídeo de YouTube" a través de la implementación del módulo de medios (Media Module).

Paso 1: los vídeos de YouTube se pueden integrar en una página web mediante un iframe o una etiqueta de objeto. 

Objeto incrustado: Incruste el vídeo con la API activada, por ejemplo: http://www.youtube.com/v/8pB5sRsX5OU?fs=1&rel=0&enablejsapi=1&playerapiid=myytplayer en su página web.

Nota: Asegúrese de no tener dos etiquetas con el mismo ID y de que la etiqueta tenga un ID que coincida con el parámetro playerapiid

 

    <p>Sample YouTube in OBJECT embed tag</p>
     <object id="myytplayer" width="425" height="344" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
        <param name="movie" value="http://www.youtube.com/v/AhgtoQIfuQ4?fs=1&rel=0&enablejsapi=1&playerapiid=myytplayer"></param>
        <param name="allowFullScreen" value="true"></param>
        <param name="allowscriptaccess" value="always"></param>
        <embed id="myytplayer2" src="http://www.youtube.com/v/AhgtoQIfuQ4?fs=1&rel=0wcv8zQo9HyU&enablejsapi=1&playerapiid=myytplayer2" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed>
    </object>

Iframe incrustado: incruste el vídeo en un iframe con la API activada, por ejemplo, http://www.youtube.com/v/8pB5sRsX5OU?fs=1&rel=0&enablejsapi=1 en su página web.

Nota: Debe proporcionar un “ID” al iframe. Consulte el código siguiente para obtener más ayuda.

<p>YouTube  video in iframe embed tag</p>
<iframe id="player1" frameborder="0" width="425" height="344" allowfullscreen="1" title="YouTube video player" src="https://www.youtube.com/embed/wcv8zQo9HyU?enablejsapi=1">

Paso 2: Añada el módulo Media Tracking (Seguimiento de contenido multimedia) de Adobe Analytics a su Appmeasurement (o similar). Debe colocarse en alguna parte después de la sección config y antes de “NO ALTERAR NADA DEBAJO DE ESTE RENGLÓN”. En el caso de la implementación heredada, debe tener la versión de código de H.15.1 o posterior. Para obtener este módulo multimedia de su cuenta de Adobe Analytics, vaya a: Admin ----> Code Manager---->App Measurement ------> App Measurement Media Module.js

Nota:

Si no ve el Administrador de códigos en Administración, no posee acceso. Para obtener acceso, solicite a un usuario administrador que añada su cuenta a un grupo que tenga acceso al Administrador de códigos. 

Paso 3: Añada el siguiente código al encabezado de la página web en el que el vídeo de YouTube se incrusta justo debajo del código de encabezado de DTM.

    <script type="text/javascript" src="https://www.youtube.com/iframe_api"></script>
     
    <script type="text/javascript">
        var video_obj=null;
        var video_length=0;
        var video_name='Movie name ' + new Date().getTime();
     
     
        // 3. This function creates an <iframe> (and YouTube player)
        //    after the API code downloads.
        var player;
        function onYouTubeIframeAPIReady() {
            console.log('*** iFrame embed onYouTubeIframeAPIReady');
     
            player = new YT.Player("player1", {
              
              events: {
              
                'onReady': onPlayerReady,
                'onStateChange': onPlayerStateChange
              }
            });
        }
     
        // 4. The API will call this function when the video player is ready.
        function onPlayerReady(event) {
            // event.target.playVideo();
            console.log('*** iFrame embed onPlayerReady ', player);
        }
     
        // 5. The API calls this function when the player's state changes.
        //    The function indicates that when playing a video (state=1),
        //    the player should play for six seconds and then stop.
        var done = false;
        function onPlayerStateChange(event) {
            console.log('*** iFrame embed onPlayerStateChange ' + event.data + ' --- YT Player state ' + YT.PlayerState.PLAYING, player.getCurrentTime(), player);
            /*
            if (event.data == YT.PlayerState.PLAYING && !done) {
                setTimeout(stopVideo, 6000);
                done = true;
            }
            */
            video_name = player.getVideoData();
            video_name = video_name.title;
            video_length = player.getDuration();
     
            // if(event.data === YT.PlayerState.PLAYING && (event.data === 1 || event.data < 0)){
            if((event.data === 1 || event.data < 0) && YT.PlayerState.PLAYING === 1){
                    //*-* PLAY
                    console.log("*-* Player is on play mode " + event.data + ' ' + player.getCurrentTime(), s);
                    if(player.getCurrentTime() === 0) {
                        s.Media.open(video_name, video_length, 'Youtube Object Embed');
                        s.Media.play(video_name, player.getCurrentTime());
                    } else {
                        s.Media.play(video_name, player.getCurrentTime());
                    }
                }else if(event.data === 2){
                    //*-* PAUSE --- CAN USE THIS FOR ENDING TOO =-- check on time -5 sec!!
                    console.log("*-* Player is on pause mode " + event.data+' '+player.getCurrentTime());
                    s.Media.stop(video_name, player.getCurrentTime());//this will cause the monitor to have media.event='STOP'
                }else if(event.data === 3){
                    //*-* SKIPPING
                    console.log("*-* Player is on skipping mode " + event.data);
                    s.Media.stop(video_name, player.getCurrentTime());//this will cause the monitor to have media.event='STOP'
                }else if(event.data === 0){
                    //*-* Completed
                    console.log("*-* Player has been completed " + event.data);
                    s.Media.stop(video_name, player.getCurrentTime());
                    s.Media.close(video_name);
                }
        }
      
            function onYouTubePlayerReady(playerId) {
                video_obj=document.getElementById(playerId);//playerId
     
                video_obj.addEventListener("onStateChange", "onytplayerStateChange");
     
                video_length= video_obj.getDuration();
     
                console.log('*-* Youtube Video Ready - in call back function --- ' + playerId, 'video duration= ' + video_obj.getDuration(), 'video current time= ' + video_obj.getCurrentTime());
            }
     
     
            function onytplayerStateChange(newState) {
                console.log("*-* Player's new state: " + newState);
                //-1 --> <0 is not started
                if(newState===1){
                    //*-* PLAY
                    console.log("*-* Player is on play mode " + newState + ' ' + video_obj.getCurrentTime(), s);
                    if(video_obj.getCurrentTime() === 0) {
                        s.Media.open(video_name, video_length, 'Youtube Object Embed');
                        s.Media.play(video_name, video_obj.getCurrentTime());
     
                        // s.Media.play(video_name, video_obj.getCurrentTime(),5,'a segment name', 30);
                    } else {
                        s.Media.play(video_name, video_obj.getCurrentTime());
                    }
                }else if(newState===2){
                    //*-* PAUSE --- CAN USE THIS FOR ENDING TOO =-- check on time -5 sec!!
                    console.log("*-* Player is on pause mode " + newState+' '+video_obj.getCurrentTime());
                    s.Media.stop(video_name, video_obj.getCurrentTime());//this will cause the monitor to have media.event='STOP'
     
                    // s.Media.stop(video_name, video_obj.getCurrentTime());//this will cause the monitor to have media.event='STOP'
                    //*-*if not used (ie. not pausing) then CLOSE will kick in when the video completes otherwise video completes will also send 'STOP'
                }else if(newState===3){
                    //*-* SKIPPING
                    console.log("*-* Player is on skipping mode " + newState);
                    s.Media.stop(video_name, video_obj.getCurrentTime());//this will cause the monitor to have media.event='STOP'
                }else if(newState===0){
                    //*-* Completed
                    console.log("*-* Player has been completed " + newState);
                    s.Media.stop(video_name, video_obj.getCurrentTime());
                    s.Media.close(video_name);
                }
            }
     
        </script>

Paso 4: Después de insertar el código en el proyecto, debe asignar las variables y los eventos de conversión que utiliza para rastrear el vídeo. Añada el siguiente código en el archivo AppMeasurement o s_code.

    s.loadModule("Media");
     
    s.Media.onLoad = function() {
        console.log('**** MEDIA module loaded');
    	/*Configure Media Module Functions */
     
    	s.Media.autoTrack= false;
    	s.Media.trackWhilePlaying=false;
    	// s.Media.trackSecond=0; // set to 30 if milestone in seconds
    		console.log('**** MEDIA module loaded1');
    	s.Media.completeByCloseOffset = true; //*** Enabled if you want to allow the video to be completed a few seconds before the actual end of the video
    	s.Media.completeCloseOffsetThreshold = 10; 
    	
    	s.Media.trackVars="events,eVar16,eVar17"; //**NOTE: Add additional data which will be pushed either in the plugin or on the page
    	s.Media.trackEvents="event16,event17,event18,event19,event20,event21"; //**NOTE: Add additional data which will be pushed either in the plugin or on the page
    	s.Media.trackMilestones="25,50,75";
    	s.Media.playerName="My TEst You tube video tracking";
    	s.Media.segmentByMilestones = false;
    	s.Media.trackUsingContextData = true;
      	console.log('**** MEDIA module loaded2');
    	s.Media.contextDataMapping = {
    		"a.media.name":"eVar16",
    		"a.media.segment":"",
    		"a.contentType":"eVar17",
    		"a.media.timePlayed":"event18",
    		"a.media.view":"event16",
    		"a.media.segmentView":"",
    		"a.media.complete":"event17",
    		"a.media.milestones": {
    			25:"event19",
    			50:"event20",
    			75:"event21"
    		}
    	}
      	console.log('**** MEDIA module loaded3');
    	/*
    	* can use the below IF wanna pass additional data --- Need to update s.Media.trackVars --- BUT we could potential set it on above var and avoid using the below
    	*/
    	s.Media.monitor =function(s, media){
      console.log('**** MEDIA module loaded4');
        console.log(media);
    		//https://marketing.adobe.com/resources/help/en_US/sc/appmeasurement/video/video_mediamonitor.html
    		console.log('in the video monitor, can help add additional evar, prop or events', media);
    		if(media.event == "OPEN") {
    			s.contextData = s.Media.contextDataMapping
    			s.Media.track(media.name);
    		} else if(media.event == "MILESTONE") {
    			s.contextData = s.Media.contextDataMapping
    			s.Media.track(media.name);
    		} else if(media.event == "CLOSE") {
    			s.contextData = s.Media.contextDataMapping
    			s.Media.track(media.name);
    		}
    	}
     
     
    }

Esta obra está autorizada con arreglo a la licencia de Reconocimiento-NoComercial-CompartirIgual 3.0 Unported de Creative Commons.  Los términos de Creative Commons no cubren las publicaciones en Twitter™ y Facebook.

Avisos legales   |   Política de privacidad en línea