Developers » AS2 tagging » JavaScript » Contenus » Media » AV Insights 5.20.0
AV Insights
Avant-propos
Afin de bénéficier de AV Insights, vous devez d’abord activer la fonction. Si vous souhaitez l’activer, veuillez contacter notre centre support.
Le plugin AV Insights permet la collecte d’événements liés à la consommation de média sur votre site. Vous pourrez suivre les différentes interactions sur vos lecteurs et mesurer la performance de vos contenus.
Manipulation de média
Instanciation d’un média
Afin de pouvoir manipuler un média et en mesurer les événements, il est nécessaire de déclarer un objet de type Media
:
var tag = new ATInternet.Tracker.Tag(); var myMedia = new tag.avInsights.Media(5, 5);
Deux paramètres sont disponibles, afin d’activer les heartbeats automatiques. Le premier permet d’activer les heartbeats de suivi de lecture et le deuxième permet d’activer les heartbeats de suivi de buffering. Les valeurs fournies ne sont plus utilisées, les paliers d’évolution des heartbeat sont aujourd’hui définis par nos soins. La présence des valeurs ne fera qu’activer la fonctionnalité.
Le « heartbeat » est un intervalle de rafraîchissement qui évolue automatiquement au cours d’une lecture.
Gestion de l’identifiant de session
Un troisième paramètre facultatif
sessionId
est disponible depuis la version5.22.0
du Tracker pour surcharger la propriété standard communeav_session_id
présente dans chaque événement généré par les marqueurs AV Insights. Veuillez noter que ce paramètre ne doit être utilisé que dans des cas particuliers, lorsque vous devez transférer des sessions entre différents supports.
Le paramètre est généré de façon automatique par le Tracker pour tous les cas standards.
var tag = new ATInternet.Tracker.Tag(); var myMedia = new tag.avInsights.Media(5, 5, 'custom_session_id');
Une fonction getSessionID
permet de récupérer la valeur du paramètre :
getSessionID() ⇒ string | number
Récupérer l’identifiant de session.
Exemple
var sessionID = myMedia.getSessionID(); // 'custom_session_id' or 'xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxx'
Propriétés de média
Quelques règles doivent être observées concernant le format des propriétés utilisées pour la configuration d’un média :
- La syntaxe des propriétés de base permettant de caractériser un média doit être respectée (présence éventuelle de caractères underscore
_
; voir la liste exhaustive des propriétés en bas de page). - Le symbole
$
est un symbole réservé qui ne doit pas être utilisé dans le nom d’une propriété. - La durée des media ou les positions de la tête de lecture doivent être exprimées en millisecondes.
Le plugin fournit une série de fonctions utiles pour la gestion des propriétés d’un média :
set
set(propKey, propValue)
Déclarer une propriété de média.
Param | Type | Description |
propKey | string | Nom d’une propriété de média |
propValue | string | number | Valeur d’une propriété de média |
Exemple
myMedia.set('av_content', 'my_video'); myMedia.set('av_content_id', '12345');
get
get(propKey) ⇒string
|number
Récupérer une propriété de média.
Param | Type | Description |
propKey | string | Nom d’une propriété de média |
Exemple
var content_id = myMedia.get('av_content_id'); // 12345
del
del(propKey)
Supprimer une propriété de média.
Param | Type | Description |
propKey | string | Nom d’une propriété de média |
Exemple
myMedia.del('av_content_id');
setProps
setProps(properties)
Déclarer un ensemble de propriétés pour un média.
Param | Type | Description |
properties | Object | Propriétés d’un média |
Exemple
myMedia.setProps({'av_content_id': 'fg456', 'av_content': 'My Content'});
getProps
getProps() ⇒ Object
Récupérer l’ensemble des propriétés d’un média.
Exemple
var props = myMedia.getProps(); // {'av_content_id': 'fg456', 'av_content': 'My Content'}
delProps
delProps()
Supprimer l’ensemble des propriétés d’un média.
Exemple
myMedia.delProps();
Vitesse de lecture
Lors d’un changement de vitesse de lecture vous devez faire appel à la méthode setPlaybackSpeed() en précisant le nouveau facteur de vitesse sous la forme d’un nombre décimal.
setPlaybackSpeed
setPlaybackSpeed(playbackSpeed)
Déclarer un changement de vitesse de lecture.
Param | Type | Description |
playbackSpeed | number | Facteur de vitesse de lecture |
Exemple
myMedia.setPlaybackSpeed(2); // Media playback speed increased by a factor of two
Le nouveau facteur de vitesse de lecture sera pris en compte dans le calcul des positions de curseur des événements automatisés
heartbeats
pendant une lecture.Vous pouvez si vous le souhaitez marquer l’événement associé à ce changement de vitesse en faisant appel à la méthode
myMedia.speed();
Suivi des événements
Le plugin AV Insights propose une série de fonctions utiles pour la mesure d’événements relatifs aux interactions de vos utilisateurs avec vos contenus :
Evénements media
bufferStart
Nom de l’événement : av.buffer.start
ou av.rebuffer.start
bufferStart(cursorPosition, [callback], [extraProps])
Générer un événement de mise en mémoire tampon au lancement d’un média ou en cours de lecture.
Un marquage de mise en mémoire tampon entraînera une génération automatique d’événements de type buffering.heartbeat ou rebuffering.heartbeat en fonction du contexte.
Param | Type | Description |
cursorPosition | number | Position courante de la tête de lecture (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.bufferStart( 0, function() { console.log("Event av.buffer.start or av.rebuffer.start generated depending on the playback launch"); }, { customProp: "customValue" } );
play
Nom de l’événement : av.play
play(cursorPosition, [callback], [extraProps])
Générer un événement play (tentative de lecture).
Param | Type | Description |
cursorPosition | number | Position courante de la tête de lecture (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.play( 0, function() { console.log("Event av.play generated");}, { customProp: "customValue" } );
playbackPaused
Nom de l’événement : av.pause
playbackPaused(cursorPosition, [callback], [extraProps])
Générer un événement de mise en pause.
Param | Type | Description |
cursorPosition | number | Position courante de la tête de lecture (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.playbackPaused( 1000, function() { console.log("Event av.pause generated"); }, { customProp: "customValue" } );
playbackResumed
Nom de l’événement : av.resume
playbackResumed(cursorPosition, [callback], [extraProps])
Générer un événement de reprise de lecture après une pause.
Param | Type | Description |
cursorPosition | number | Position courante de la tête de lecture (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.playbackResumed( 1000, function() { console.log("Event av.resume generated"); }, { customProp: "customValue" } );
playbackStart
Nom de l’événement : av.start
playbackStart(cursorPosition, [callback], [extraProps])
Générer un événement de début de lecture effective (première frame du média).
Param | Type | Description |
cursorPosition | number | Position courante de la tête de lecture (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.playbackStart( 0, function() { console.log("Event av.start generated"); }, { customProp: "customValue" } );
playbackStopped
Nom de l’événement : av.stop
playbackStopped(cursorPosition, [callback], [extraProps])
Générer un événement d’arrêt de lecture.
Param | Type | Description |
cursorPosition | number | Position courante de la tête de lecture (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.playbackStopped( 1000, function() { console.log("Event av.stop generated"); }, { customProp: "customValue" } );
seek
Nom de l’événement : av.forward
ou av.backward
seek(oldCursorPosition, newCursorPosition, [callback], [extraProps])
Générer un événement lié au déplacement de la tête de lecture.
Param | Type | Description |
oldCursorPosition | number | Position de la tête de lecture avant déplacement (ms) |
newCursorPosition | number | Position de la tête de lecture après déplacement (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.seek( 1000, 2000, function() { console.log("Event av.forward generated"); }, { customProp: "customValue" } ); myMedia.seek( 2000, 1000, function() { console.log("Event av.backward generated"); }, { customProp: "customValue" } );
Evénements contextuels
La liste des événements qui suit ne rentre pas en compte dans le calcul des durées de consommation de media. Il s’agit d’événements contextuels ponctuels.
adClick
Nom de l’événement : av.ad.click
adClick([callback], [extraProps])
Générer un événement de mesure de clic sur une publicité.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.adClick( function() { console.log("Event av.ad.click generated"); }, { customProp: "customValue" } );
adSkip
Nom de l’événement : av.ad.skip
adSkip([callback], [extraProps])
Générer un événement de saut d’une publicité.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.adSkip( function() { console.log("Event av.ad.skip generated"); }, { customProp: "customValue" } );
close
Nom de l’événement : av.close
close([callback], [extraProps])
Mesurer une fermeture.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.close( function() { console.log("Event av.close generated"); }, { customProp: "customValue" } );
display
Nom de l’événement : av.display
display([callback], [extraProps])
Mesurer une impression.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.display( function() { console.log("Event av.display generated"); }, { customProp: "customValue" } );
error
Nom de l’événement : av.error
error(message, [callback], [extraProps])
Mesurer une erreur empêchant la lecture.
Param | Type | Description |
heartbeat | Object | string | number | Valeur de heartbeat |
Exemple
myMedia.error( "Error loading video", function() { console.log("Event av.error generated"); }, { customProp: "customValue" } );
fullscreenOff
Nom de l’événement : av.fullscreen.off
fullscreenOff([callback], [extraProps])
Mesurer une désactivation de plein écran.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.fullscreenOff( function() { console.log("Event av.fullscreen.off generated"); }, { customProp: "customValue" } );
fullscreenOn
Nom de l’événement : av.fullscreen.on
fullscreenOn([callback], [extraProps])
Mesurer un passage en plein écran.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.fullscreenOn( function() { console.log("Event av.fullscreen.on generated"); }, { customProp: "customValue" } );
quality
Nom de l’événement : av.quality
quality([callback], [extraProps])
Mesurer une action de changement de niveau de qualité.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.quality( function() { console.log("Event av.quality generated"); }, { customProp: "customValue" } );
share
Nom de l’événement : av.share
share([callback], [extraProps])
Mesurer une action de partage.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.share( function() { console.log("Event av.share generated"); }, { customProp: "customValue" } );
speed
Nom de l’événement : av.speed
speed([callback], [extraProps])
Mesurer une action de changement de vitesse de lecture.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.speed( function() { console.log("Event av.speed generated"); }, { customProp: "customValue" } );
subtitleOff
Nom de l’événement : av.subtitle.off
subtitleOff([callback], [extraProps])
Mesurer une désactivation de sous-titres.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.subtitleOff( function() { console.log("Event av.subtitle.off generated"); }, { customProp: "customValue" } );
subtitleOn
Nom de l’événement : av.subtitle.on
subtitleOn([callback], [extraProps])
Mesurer une activation de sous-titres.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.subtitleOn( function() { console.log("Event av.subtitle.on generated"); }, { customProp: "customValue" } );
volume
Nom de l’événement : av.volume
volume([callback], [extraProps])
Mesurer un changement de volume.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.volume( function() { console.log("Event av.volume generated"); }, { customProp: "customValue" } );
Evénements techniques
Les événements suivants sont générés de façon automatique par le Tracker. Vous pouvez toutefois appeler les méthodes de marquage publiques associées en cas de besoin de marquage ponctuel.
bufferHeartbeat
Nom de l’événement : av.buffer.heartbeat
bufferHeartbeat([callback], [extraProps])
Générer un événement heartbeat de mise en mémoire tampon avant le début effectif de la lecture.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.bufferHeartbeat( function() { console.log("Event av.buffer.heartbeat generated"); }, { customProp: "customValue" } );
heartbeat
Nom de l’événement : av.heartbeat
heartbeat([cursorPosition], [callback], [extraProps])
Générer un événement heartbeat.
Param | Type | Description |
[cursorPosition] | number | Position courante de la tête de lecture (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.heartbeat( 45, function() { console.log("Event av.heartbeat generated"); }, { customProp: "customValue" } );
La position de curseur n’est pas obligatoire pour le marquage d’un événement
heartbeat
. Sans précision de votre part, la valeur sera automatiquement calculée en fonction du contexte (facteur de vitesse de lecture, position de curseur de l’événement précédent).
rebufferHeartbeat
Nom de l’événement : av.rebuffer.heartbeat
rebufferHeartbeat([callback], [extraProps])
Générer un événement heartbeat de mise en mémoire tampon après le début effectif de la lecture.
Param | Type | Description |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.rebufferHeartbeat( function() { console.log("Event av.rebuffer.heartbeat generated"); }, { customProp: "customValue" } );
seekBackward
Nom de l’événement : av.backward
seekBackward(oldCursorPosition, newCursorPosition, [callback], [extraProps])
Générer un événement lié à un déplacement arrière de la tête de lecture.
Param | Type | Description |
oldCursorPosition | number | Position de la tête de lecture avant déplacement (ms) |
newCursorPosition | number | Position de la tête de lecture après déplacement (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.seekBackward( 2000, 1000, function() { console.log("Event av.backward generated"); }, { customProp: "customValue" } );
seekForward
Nom de l’événement : av.forward
seekForward(oldCursorPosition, newCursorPosition, [callback], [extraProps])
Générer un événement lié à un déplacement avant de la tête de lecture.
Param | Type | Description |
oldCursorPosition | number | Position de la tête de lecture avant déplacement (ms) |
newCursorPosition | number | Position de la tête de lecture après déplacement (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.seekForward( 1000, 2000, function() { console.log("Event av.forward generated"); }, { customProp: "customValue" } );
seekStart
Nom de l’événement : av.seek.start
seekStart(oldCursorPosition, [callback], [extraProps])
Générer un événement de début de déplacement de la tête de lecture.
Cet événement est automatiquement levé lors d’un appel aux méthodes seek(), seekBackward() ou seekForward()
Param | Type | Description |
oldCursorPosition | number | Position de la tête de lecture avant déplacement (ms) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
Exemple
myMedia.seekStart( 1000, function() { console.log("Event av.seek.start generated"); }, { customProp: "customValue" } );
Méthode de marquage universelle
track
La méthode de marquage universelle d’événements AV Insights permet le suivi d’événements standards ou personnalisés. Cette fonction peut être utilisée pour remplacer les appels aux autres méthodes de marquage d’événements (play, playbackStart, bufferStart, etc.).
Nom de l’événement : valeur de event
track(event, [options], [callback], [extraProps])
Suivre des actions standard ou personnalisées.
Param | Type | Description |
event | string | Evénement à générer (voir liste des événements standard en bas de page) |
[options] | Object | Options fonction de l’événement courant (voir liste des options disponibles en bas de page) |
[callback] | function | Fonction à exécuter après l’envoi du hit |
[extraProps] | Object | Propriétés personnalisées |
bufferExemple
var tag = new ATInternet.Tracker.Tag(); var myMedia = new tag.avInsights.Media(5, 5); // Buffer tagging myMedia.track('av.buffer.start', {av_position: 0}, function() {console.log('Event "av.buffer.start" generated');}, null); // Re-buffer tagging myMedia.track('av.rebuffer.start', {av_position: 10}, function() {console.log('Event "av.rebuffer.start" generated');}, null); // Play tagging myMedia.track('av.play', {av_position: 0}, function() {console.log('Event "av.play" generated');}, null); // Playback start tagging myMedia.track('av.start', {av_position: 0}, function() {console.log('Event "av.start" generated');}, null); // Playback pause tagging myMedia.track('av.pause', {av_position: 10}, function() {console.log('Event "av.pause" generated');}, null); // Playback resume tagging myMedia.track('av.resume', {av_position: 10}, function() {console.log('Event "av.resume" generated');}, null); // Playback stop tagging myMedia.track('av.stop', {av_position: 20}, function() {console.log('Event "av.stop" generated');}, null); // Seek forward tagging myMedia.track('av.forward', {av_previous_position: 10, av_position: 20}, function() {console.log('Event "av.forward" generated');}, null); // Seek backward tagging myMedia.track('av.backward', {av_previous_position: 20, av_position: 10}, function() {console.log('Event "av.backward" generated');}, null); // Ad click tagging myMedia.track('av.ad.click', null, function() {console.log('Event "av.ad.click" generated');}, null); // Ad skip tagging myMedia.track('av.ad.skip', null, function() {console.log('Event "av.ad.skip" generated');}, null); // Error tagging myMedia.track('av.error', {av_player_error: "Player error"}, function() {console.log('Event "av.error" generated');}, null); // Display tagging myMedia.track('av.display', null, function() {console.log('Event "av.display" generated');}, null); // Close tagging myMedia.track('av.close', null, function() {console.log('Event "av.close" generated');}, null); // Volume tagging myMedia.track('av.volume', null, function() {console.log('Event "av.volume" generated');}, null); // Subtitle on tagging myMedia.track('av.subtitle.on', null, function() {console.log('Event "av.subtitle.on" generated');}, null); // Subtitle off tagging myMedia.track('av.subtitle.off', null, function() {console.log('Event "av.subtitle.off" generated');}, null); // Full screen on tagging myMedia.track('av.fullscreen.on', null, function() {console.log('Event "av.fullscreen.on" generated');}, null); // Full screen off tagging myMedia.track('av.fullscreen.off', null, function() {console.log('Event "av.fullscreen.off" generated');}, null); // Quality tagging myMedia.track('av.quality', null, function() {console.log('Event "av.quality" generated');}, null); // Speed tagging myMedia.track('av.speed', null, function() {console.log('Event "av.speed" generated');}, null); // Share tagging myMedia.track('av.share', null, function() {console.log('Event "av.share" generated');}, null); // Custom tagging myMedia.track('custom', null, null, {'customParam': 'customValue'});
Marquage complet
var tag = new ATInternet.Tracker.Tag(); var myMedia = new tag.avInsights.Media(5, 5); // Set heartbeats value (5 seconds) var properties = { av_content_id: 'fge234', av_content: 'myContent', av_content_type: 'Video', av_content_duration: 10000, av_content_genre: ['entertainment'], av_content_version: 'short', av_player: 'HTML5_V123', av_player_version: '1b', av_player_position: 'top', av_broadcasting_type: 'On Demand', av_publication_date: 1562055880, av_show: 'The gist of the game', av_show_season: 'Season 1', av_episode_id: '3134', av_channel: 'INFO', av_author: 'AT Internet', av_broadcaster: 'Direction 123', av_language: 'EN', av_subtitles: 'FR', av_launch_reason: 'Auto' }; // Set media properties myMedia.setProps(properties); // Play attempt (cursor position 0 second) myMedia.play(0); // Buffering before playback start (cursor position 0 second) myMedia.bufferStart(0); // Playback start (cursor position 0 second) myMedia.playbackStart(0); // Buffering after 5 seconds of playback myMedia.bufferStart(5000); // Seek action (backward from cursor position 5 seconds to cursor position 3 seconds) myMedia.seek(5000, 3000); // Playback resume (cursor position 3 seconds) myMedia.playbackResumed(3000); // Playback pause (cursor position 9 seconds) myMedia.playbackPaused(9000); // Playback resume (cursor position 9 seconds) myMedia.playbackResumed(9000); // Playback stop (cursor position 15 seconds) myMedia.playbackStopped(15000);
Annexes
Liste des propriétés d’un média
Propriété | Type | Description |
av_player | string | Identifiant du lecteur |
av_player_version | string | Version du lecteur |
av_player_position | string | Position du lecteur |
av_content | string | Titre du contenu |
av_content_id | string | Identifiant du contenu |
av_content_type | string | Type de contenu (Audio/Video/Gaming…) |
av_content_duration | number | Durée de contenu en millisecondes |
av_content_version | string | Version du contenu |
av_content_genre | string array | Catégorie de contenu (news/entertainment…) |
av_content_linked | string | Contenu lié |
av_content_duration_range | string | Plage de durée du contenu (‘0-10’…) |
av_broadcasting_type | string | Contenu live/à la demande |
av_ad_type | string | Type pour une publicité (Pre-roll/Mid-Roll/Post-Roll) |
av_publication_date | number | Date de publication du contenu en secondes (format UTC) |
av_show | string | Nom de l’émission |
av_show_season | string | Nom de la saison |
av_episode_id | string | Identifiant de l’épisode |
av_episode | string | Nom de l’épisode |
av_channel | string | Chaîne |
av_author | string | Nom de l’auteur |
av_broadcaster | string | Nom de l’entité de diffusion |
av_auto_mode | boolean | Mode de lecture automatique |
av_language | string | Langue du media |
av_subtitles | string | Sous-titres |
av_launch_reason | string | Motif du lancement |
Liste des événements standards
Evénements |
av.heartbeat |
av.buffer.heartbeat |
av.rebuffer.heartbeat |
av.play |
av.buffer.start |
av.rebuffer.start |
av.start |
av.resume |
av.pause |
av.stop |
av.forward |
av.backward |
av.seek.start |
av.ad.click |
av.ad.skip |
av.error |
av.display |
av.close |
av.volume |
av.subtitle.on |
av.subtitle.off |
av.fullscreen.on |
av.fullscreen.off |
av.quality |
av.speed |
av.share |
Liste des options disponibles
Option | Description |
av_position | Position courante de la tête de lecture (ms) |
av_previous_position | Position précédente de la tête de lecture (ms) |
av_player_error | Erreur empêchant une lecture |