AV Insights

 

Fonctionnement

 

Notions importantes

Afin de suivre correctement la mesure de vos contenus AV, certaines notions sont importantes à connaître.

 

play vs playbackStart

Les événements av.play (play) représentent le premier clic sur le bouton de lecture, qui lance le chargement de la vidéo.

Les événements av.start (playbackStart) représentent la lecture de la première frame du contenu.

L’enchaînement classique des événements est donc av.play suivi de av.start. Entre les deux, le temps de chargement de la vidéo peut être mesuré avec des événements av.buffer.start suivi de av.buffer.heartbeat.

Si vous n’êtes pas en mesure de différencier ces deux temps, il est nécessaire d’envoyer av.start (playbackStart).

 

start vs resume

Si la lecture est reprise (après une pause ou un temps de chargement (rebuffer) par exemple), il sera nécessaire d’envoyer un événement av.resume (playbackResumed) plutôt que av.play.

 

Gestion des positions

Lors de l’utilisation des méthodes liées à le lecture du contenu, la position du curseur est nécessaire.

Cette position permet de connaître l’avancement réel de la lecture.

 

Gestion de la vitesse de lecture

Afin de mesurer la position de la tête de lecture, les librairies calculent le temps effectivement passée en lecture. Par défaut, une seconde réelle correspondra à une seconde de lecture.

Cependant, vous avez la possibilité de modifier cette vitesse de lecture via la méthode setPlaybackSpeed, en indiquant le facteur de vitesse.

 

Exemples de suivis

 

Lecture totale

 

Mesure d’un seek

 

Traitements automatiques

Certains traitements automatiques sont gérés par les librairies de marquage.

Il est cependant nécessaire de les connaître et de les prendre en compte lors d’un marquage n’utilisant pas les librairies.

 

seek (seek start, forward/backward)

Lors de l’appel à une méthode de seek (seek), plusieurs événements sont levés :

  • av.seek.start, indiquant le début de seek, et portant la position du curseur avant le déplacement
  • av.forward ou av.backward, selon les positions de début et de fin de déplacement du curseur
 

session id

Chaque session de lecture porte un identifiant unique (propriété av_session_id ).

Une session de lecture est définie par la lecture d’un contenu. Elle s’arrête donc si le contenu change, ou si la vidéo est arrêtée (av.stop).

 

buffer vs rebuffer

Deux types de temps de chargement sont identifiables :

  • buffer (av.buffer.start (bufferStart) et av.buffer.heartbeat), pour le chargement avant le début de lecture (entre av.play et av.start)
  • rebuffer (av.rebuffer.start (bufferStart) et av.rebuffer.heartbeat), pour le chargement pendant la lecture (après av.start)

La méthode bufferStart vérifie si un playbackStart a été appelé sur la session en cours, afin d’envoyer le type de chargement correspondant.

 

heartbeat

Au cours de la lecture, afin de mesurer de manière plus fine les durées, les événements de heartbeat permettent de renseigner sur l’état du lecteur.
Plusieurs types de heartbeat sont disponibles :

  • av.heartbeat, se déclenche après un playbackStart ou playbackResumed, permet de mesurer la lecture du contenu
  • av.(re)buffer.heartbeat, se déclenche après un bufferStart, permet de mesurer la durée des temps de chargement

Le temps entre deux heartbeats est défini au moment de l’instanciation du media. Il peut être fixe pour l’ensemble de la lecture, ou bien évolutif via un objet JSON.

Pour les média courts, nous recommandons de renseigner 5 secondes entre chaque heartbeats, afin d’avoir une mesure assez fine sans surcharger le réseau de l’utilisateur et les serveurs de collecte. Sur les media plus long, vous devez espacer les heartbeats avec plus de temps, jusqu’à 30 minutes, afin de maintenir la session de lecture active.

 

duration

Le temps réellement passé devant le contenu est renseigné dans la propriété av_duration, via un timer.

Il s’agit du temps écoulé en millisecondes entre l’événement précédent et l’actuel.

 

previous event/position

Sur chacun des événements, il est nécessaire de renseigner la position (av_previous_position) et le nom (av_previous_event) de l’événement précédemment envoyé.

 

Format

 

Common standard properties

PropertyDescriptionTypeMandatoryExample
av_content_idContent IDstringYes'bc35'
av_session_idSession IDstringYes'799d9f3b-7307-4113-a260-2e1371e35fe6'
av_contentContent Labelstring 'Broadchurch 3.5'
av_content_typeContent Typestring 'TV Show'
av_content_durationContent Duration (in milliseconds)int 2760000
av_content_linkedLinked Content Labelstring 'myLinkedContent'
av_publication_datePublication Date (timestamp)date 1501065673
av_content_genreContent genre(s)array of string ["Crime","Drama","Mystery"]
av_showShow Labelstring 'Broadchurch'
av_show_seasonShow Season Labelstring '3'
av_episode_idEpisode IDstring '5'
av_episodeEpisode Labelstring 'Episode #3.5'
av_channelChannel Labelstring 'ITV'
av_authorAuthor Namestring 'Chris Chibnall'
av_content_versionContent Version (full length, …)string 'Full length'
av_content_duration_rangeDuration rangestring '0-10'
av_broadcasting_typeBroadcasting Typestring 'Live'
av_broadcasterBroadcaster Namestring 'ITV'
av_ad_typeAd Typestring 'Mid-roll'
av_playerPlayer Labelstring 'Main'
av_player_versionPlayer Versionstring '1.55'
av_player_positionPlayer Positionstring 'Homepage'
av_auto_modeAuto play modebooleantrue
av_languageMedia languagestring'fr'
av_subtitlesSubtitlesstring'en'
av_launch_reasonLaunch reasonstring'auto'

* le type uuid requiert un UUID respectant la RFC 4122 version 4 (aléatoire) ou version 5 (nommé), sinon, notre moteur remplacera la valeur marquée par un UUID généré.

 

Events

 

av.heartbeat

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.buffer.heartbeat

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.rebuffer.heartbeat

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.play

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.buffer.start

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.rebuffer.start

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.start

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.resume

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.pause

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.stop

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.forward

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.backward

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.seek.start

PropertyDescriptionTypeMandatoryExample
av_durationTime spent since previous event (ms)intYes5000
av_positionCurrent event cursor positionintYes15000
av_previous_eventPrevious event namestringYes'av.heartbeat'
av_previous_positionPrevious event cursor positionintYes10000
 

av.ad.click

 

av.ad.skip

 

av.error

PropertyDescriptionTypeMandatoryExample
av_player_errorError messagestring 'Content not available'
 

av.display

 

av.close

 

av.volume

 

av.subtitle.on

 

av.subtitle.off

 

av.fullscreen.on

 

av.fullscreen.off

 

av.quality

 

av.speed

 

av.share

Dernière mise à jour : 17/08/2021