> For the complete documentation index, see [llms.txt](https://doc.commandersact.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.commandersact.com/fr/developpeurs/tracking-and-integrations/tracking/events-reference/video-event-reference.md).

# Événements vidéo

La spécification vidéo de Commanders Act vous permet de définir comment un client interagit avec vos vidéos et le contenu publicitaire associé.

Cette documentation détaille les conventions et les bonnes pratiques pour l’envoi d’événements lors du suivi des vidéos. Le document clarifie la structure et la classification de ces événements, qui se répartissent en quatre catégories : `Lecture`, `Contenu`, `Annonces` et `Paramètres vidéo`.

## Lecture

Les événements de lecture sont liés à la lecture effective du contenu vidéo et suivent des informations sur le lecteur vidéo.

Par exemple, lorsqu’un client lance une vidéo dans une application, un événement Video Playback Started est envoyé avec un session\_id unique. Tous les événements ultérieurs générés à partir de cette session sont liés au même session\_id.

Si une page web comporte deux lecteurs vidéo, il y aura deux sessions distinctes et les session\_ids associés. En revanche, si deux vidéos distinctes sont lues sur le même lecteur vidéo, elles seront tout de même considérées comme une seule session avec deux contenus associés.

## Propriétés des événements de lecture

Tous les événements de lecture partagent les mêmes propriétés qui décrivent l’état actuel du lecteur vidéo.

Le tableau suivant répertorie en détail toutes les propriétés de cet objet d’événement de lecture :

<table><thead><tr><th width="250">Propriété</th><th width="120">Type</th><th width="101">Obligatoire</th><th>Description</th></tr></thead><tbody><tr><td><code>video_session_id</code></td><td><code>String</code></td><td><strong>Oui</strong></td><td>Un ID unique qui relie tous les événements<br>générés à partir d’une session de lecture spécifique.<br><br>Ces événements incluent les événements de lecture, de contenu et<br>de publicité.</td></tr><tr><td><code>video_title</code></td><td><code>String</code></td><td>Non</td><td>Indique le titre du contenu vidéo.</td></tr><tr><td><code>video_category</code></td><td><code>String</code></td><td>Non</td><td>Indique le genre de l’asset de contenu vidéo.</td></tr><tr><td><code>publisher</code></td><td><code>String</code></td><td>Non</td><td><p>Indique l’éditeur / créateur / auteur du</p><p>contenu vidéo.</p></td></tr><tr><td><code>content_asset_id</code></td><td><p><code>String</code></p><p><code>Array [String]</code></p></td><td><strong>Oui</strong></td><td><p>ID de contenu du/des vidéo(s) en cours de lecture ou</p><p>sur le point d’être lues.</p><p>Pour les <code>événements Video Playback Started, un tableau</code> d’ID d’asset uniques doit être envoyé. Pour les autres</p><p>événements de lecture, un ID unique d’asset de contenu</p><p>doit être envoyé au moment de l’événement.</p></td></tr><tr><td><code>content_pod_id</code></td><td><p><code>String</code></p><p><code>Array [String]</code></p></td><td>Non</td><td><p>ID de contenu du/des pod(s) de contenu des vidéo(s) en cours de lecture ou</p><p>sur le point d’être lues.</p><p>Pour les <code>événements Video Playback Started, un tableau</code> d’ID d’asset uniques doit être envoyé. Pour les autres</p><p>d’ID uniques de pod doivent être envoyés. Pour les autres</p><p>événements de lecture, un ID unique de pod de contenu<br>associé au pod de contenu actuel au<br>moment de l’événement doit être envoyé.</p></td></tr><tr><td><code>ad_asset_id</code></td><td><p><code>String</code></p><p><code>Array [String]</code></p></td><td>Non</td><td><p>ID d’asset publicitaire du/des vidéo(s) en cours de lecture ou</p><p>sur le point d’être lues.</p><p>Pour les <code>événements Video Playback Started, un tableau</code> d’ID d’asset uniques doit être envoyé. Pour les autres</p><p>d’ID uniques d’asset publicitaire doivent être envoyés. Pour les autres</p><p>événements de lecture, un ID unique d’asset publicitaire<br>au moment de l’événement doit être envoyé.</p></td></tr><tr><td><code>ad_pod_id</code></td><td><p><code>String</code></p><p><code>Array [String]</code></p></td><td>Non</td><td><p>ID de pod publicitaire du/des vidéo(s) en cours de lecture ou</p><p>sur le point d’être lues.</p><p>Pour les <code>événements Video Playback Started, un tableau</code> d’ID d’asset uniques doit être envoyé. Pour les autres</p><p>d’ID uniques de pod publicitaire doivent être envoyés. Pour les autres</p><p>événements de lecture, un ID unique de pod de contenu<br>associé au pod publicitaire actuel au<br>moment de l’événement doit être envoyé.</p></td></tr><tr><td><code>ad_type</code></td><td><code>String</code></td><td>Non</td><td><p>Indique le type de publicité diffusée au moment de l’</p><p>événement. Les valeurs peuvent être '<code>pre-roll</code>', ' <code>mid-roll</code>', ou</p><p>'<code>post-roll</code>'.</p></td></tr><tr><td><code>cursor_position</code></td><td><code>Integer</code></td><td><strong>Oui</strong></td><td>Indique la position actuelle du curseur de lecture<br>en secondes. Elle inclut la durée de toutes les publicités vues.<br><br>Non requis dans <code>video_buffer_start</code> et <code>video_buffer_complete</code> événements<br><br>Si la lecture est une diffusion en direct, reportez-vous à la<br>documentation de la destination concernée pour connaître les étapes<br>permettant de transmettre correctement la position du curseur de lecture.</td></tr><tr><td><code>seek_position</code></td><td><code>Integer</code></td><td>Non</td><td><p>Indique la position du curseur de lecture à partir de laquelle</p><p>l’utilisateur souhaite effectuer un saut.</p><p>Uniquement applicable pour les <code>video_seek_start</code> et <code>video_seek_complete</code><br>événements. Sur <code>video_seek_complete</code> événements,</p><p>la <code>seek_position</code> doit être égale à <code>cursor_position</code>.</p></td></tr><tr><td><code>total_length</code></td><td><code>Integer</code></td><td><strong>Oui</strong></td><td><p>Indique la durée totale de la lecture vidéo</p><p>en secondes. Elle inclut la durée totale de tous les</p><p>contenus et publicités inclus dans la session.</p><p>Définir sur <code>null</code> dans le cas d’une lecture en direct.</p></td></tr><tr><td><code>bitrate</code></td><td><code>Integer</code></td><td>Non</td><td>Débit binaire de la lecture vidéo, exprimé en <code>kbps</code></td></tr><tr><td><code>framerate</code></td><td><code>Float</code></td><td>Non</td><td>Indique la fréquence d’images moyenne de la<br>lecture vidéo en <code>fps</code>.</td></tr><tr><td><code>video_player</code></td><td><code>String</code></td><td>Non</td><td><p>Indique le nom du lecteur vidéo utilisé pour la</p><p>lecture. Exemple : <code>youtube</code>, <code>vimeo</code>, etc.</p></td></tr><tr><td><code>sound</code></td><td><code>Integer</code></td><td>Non</td><td><p>Indique le niveau sonore de la lecture vidéo.</p><p>La plage va de 0 à 100, où 0 représente le silence</p><p>et 100 le volume maximal.</p></td></tr><tr><td><code>full_screen</code></td><td><code>Boolean</code></td><td>Non</td><td>Définir sur <code>true</code> si la lecture est en mode plein écran.</td></tr><tr><td><code>ad_enabled</code></td><td><code>Boolean</code></td><td>Non</td><td><p>Définir sur <code>false</code> si l’utilisateur a des bloqueurs de publicités.</p><p><br>Si l’utilisateur peut voir vos publicités vidéo, cette valeur est définie sur</p><p><code>true</code>.</p></td></tr><tr><td><code>image_quality</code></td><td><code>String</code></td><td>Non</td><td>Spécifie la qualité de la vidéo.<br><br>Exemples : 'hd1080', 'highres'</td></tr><tr><td><code>interruption_method</code></td><td><code>String</code></td><td>Non</td><td><p>Pour les <code>Lecture vidéo interrompue</code> événements,<br>vous pouvez envoyer cette propriété indiquant comment la</p><p>lecture a été interrompue.</p><p>Voici quelques exemples : 'device_lock', 'call' et</p><p>'browser_redirect'.</p></td></tr><tr><td><code>livestream</code></td><td><code>Boolean</code></td><td>Non</td><td>Définir sur <code>true</code> si la lecture est une diffusion en direct,<br>sinon définissez-la sur <code>false</code>.</td></tr></tbody></table>

## Événements de lecture

Cette section détaille tous les événements de lecture vidéo.

Pour plus d’informations sur chacune des propriétés associées à ces événements, reportez-vous à la **Propriétés des événements de lecture** section.

### événements Video Playback Started, un tableau

Cet événement est associé à l’action de l’utilisateur qui appuie sur le bouton de lecture du lecteur vidéo pour lancer la lecture de la vidéo.

Un exemple d’événement est présenté ci-dessous :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_start",
    "user": {},
    "video_session_id": "98765",
    "content_asset_id": ["0133370", "123456"],
    "content_pod_id": ["CAA", "CAB", "CAD"],
    "ad_asset_id": ["ad1", "ad0", "ad2"],
    "ad_pod_id": ["adCAA", "adCAB", "adCAD"],
    "ad_type": "pre-roll",
    "cursor_position": 0,
    "total_length": 600,
    "bitrate": 128,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 100,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val playbackVideoEvent = TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_start, "YOUR_VIDEO_SESSION_ID")
playbackVideoEvent.contentAssetID = listOf("456", "223")
playbackVideoEvent.cursorPosition = 0
playbackVideoEvent.totalLength = 500
serverSide.execute(playbackVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoPlaybackEvent playbackVideoEvent = new TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_start, "YOUR_VIDEO_SESSION_ID");
playbackVideoEvent.contentAssetID = Arrays.asList("456", "223");
playbackVideoEvent.cursorPosition = 0;
playbackVideoEvent.totalLength = 500;
serverSide.execute(playbackVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoPlaybackEvent *playbackVideoEvent = [[TCVideoPlaybackEvent alloc] initWithMode: video_start andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    playbackVideoEvent.contentAssetID =  [@[@"456", @"223"] mutableCopy];
    playbackVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    playbackVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: playbackVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let playbackVideoEvent = TCVideoPlaybackEvent(mode: video_start, andSessionId: "YOUR_VIDEO_SESSION_ID")
    playbackVideoEvent?.contentAssetID = ["456", "223"]
    playbackVideoEvent?.cursorPosition = 0
    playbackVideoEvent?.totalLength = 500
    serverSide?.execute(playbackVideoEvent)
```

{% endtab %}
{% endtabs %}

### Lecture vidéo en pause

Cet événement correspond à l’action de l’utilisateur qui met en pause la lecture vidéo.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_pause",
    "user": {},
    "video_session_id": "98765",
    "content_asset_id": ["0123370", "123456"],
    "content_pod_id": ["CAA", "CAB", "CAD"],
    "cursor_position": 10,
    "total_length": 600,
    "bitrate": 256,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 100,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val playbackVideoEvent = TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_pause, "YOUR_VIDEO_SESSION_ID")
playbackVideoEvent.contentAssetID = listOf("456", "223")
playbackVideoEvent.cursorPosition = 0
playbackVideoEvent.totalLength = 500
serverSide.execute(playbackVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoPlaybackEvent playbackVideoEvent = new TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_pause, "YOUR_VIDEO_SESSION_ID");
playbackVideoEvent.contentAssetID = Arrays.asList("456", "223");
playbackVideoEvent.cursorPosition = 0;
playbackVideoEvent.totalLength = 500;
serverSide.execute(playbackVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoPlaybackEvent *playbackVideoEvent = [[TCVideoPlaybackEvent alloc] initWithMode: video_pause andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    playbackVideoEvent.contentAssetID =  [@[@"456", @"223"] mutableCopy];
    playbackVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    playbackVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: playbackVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let playbackVideoEvent = TCVideoPlaybackEvent(mode: video_pause, andSessionId: "YOUR_VIDEO_SESSION_ID")
    playbackVideoEvent?.contentAssetID = ["456", "223"]
    playbackVideoEvent?.cursorPosition = 0
    playbackVideoEvent?.totalLength = 500
    serverSide?.execute(playbackVideoEvent)
```

{% endtab %}
{% endtabs %}

### Lecture vidéo interrompue

Cet événement est envoyé lorsque la lecture vidéo s’arrête involontairement. Une perte de réseau, la fermeture du navigateur par l’utilisateur, une redirection, etc. sont des causes courantes. Vous pouvez transmettre la cause dans la propriété `interruption_method`.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_error",
    "user": {},
    "video_session_id": "12345",
    "content_asset_id": ["0144370"],
    "content_pod_id": ["CAA", "CAB"],
    "cursor_position": 0,
    "total_length": 300,
    "bitrate": 128,
    "framerate": 30.00,
    "video_player": "youtube",
    "sound": 68,
    "full_screen": true,
    "ad_enabled": true,
    "image_quality": "hd1080",
    "livestream": false,
    "interruption_method":"network_loss"
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val playbackVideoEvent = TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_error, "YOUR_VIDEO_SESSION_ID")
playbackVideoEvent.contentAssetID = listOf("456", "223")
playbackVideoEvent.cursorPosition = 0
playbackVideoEvent.totalLength = 500
serverSide.execute(playbackVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoPlaybackEvent playbackVideoEvent = new TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_error, "YOUR_VIDEO_SESSION_ID");
playbackVideoEvent.contentAssetID = Arrays.asList("456", "223");
playbackVideoEvent.cursorPosition = 0;
playbackVideoEvent.totalLength = 500;
serverSide.execute(playbackVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoPlaybackEvent *playbackVideoEvent = [[TCVideoPlaybackEvent alloc] initWithMode: video_error andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    playbackVideoEvent.contentAssetID =  [@[@"456", @"223"] mutableCopy];
    playbackVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    playbackVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: playbackVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let playbackVideoEvent = TCVideoPlaybackEvent(mode: video_error, andSessionId: "YOUR_VIDEO_SESSION_ID")
    playbackVideoEvent?.contentAssetID = ["456", "223"]
    playbackVideoEvent?.cursorPosition = 0
    playbackVideoEvent?.totalLength = 500
    serverSide?.execute(playbackVideoEvent)
```

{% endtab %}
{% endtabs %}

### Début de la mise en mémoire tampon de la lecture vidéo

Cela correspond à l’événement de mise en mémoire tampon du contenu ou d’une publicité.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_buffer_start",
    "user": {},
    "video_session_id": "54321",
    "content_asset_id": ["098765"],
    "content_pod_id": ["CAD", "CAE"],
    "cursor_position": 10,
    "total_length": 600,
    "bitrate": 256,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 100,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val playbackVideoEvent = TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_buffer_start, "YOUR_VIDEO_SESSION_ID")
playbackVideoEvent.contentAssetID = listOf("456", "223")
playbackVideoEvent.cursorPosition = 0
playbackVideoEvent.totalLength = 500
serverSide.execute(playbackVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoPlaybackEvent playbackVideoEvent = new TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_buffer_start, "YOUR_VIDEO_SESSION_ID");
playbackVideoEvent.contentAssetID = Arrays.asList("456", "223");
playbackVideoEvent.cursorPosition = 0;
playbackVideoEvent.totalLength = 500;
serverSide.execute(playbackVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoPlaybackEvent *playbackVideoEvent = [[TCVideoPlaybackEvent alloc] initWithMode: video_buffer_start andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    playbackVideoEvent.contentAssetID =  [@[@"456", @"223"] mutableCopy];
    playbackVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    playbackVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: playbackVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let playbackVideoEvent = TCVideoPlaybackEvent(mode: video_buffer_start, andSessionId: "YOUR_VIDEO_SESSION_ID")
    playbackVideoEvent?.contentAssetID = ["456", "223"]
    playbackVideoEvent?.cursorPosition = 0
    playbackVideoEvent?.totalLength = 500
    serverSide?.execute(playbackVideoEvent)
```

{% endtab %}
{% endtabs %}

### Fin de la mise en mémoire tampon de la lecture vidéo

Cela correspond à l’événement lorsque la lecture termine la mise en mémoire tampon du contenu ou d’une publicité.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_buffer_complete",
    "user": {},
    "video_session_id": "56789",
    "content_asset_id": ["123456"],
    "content_pod_id": ["CAF", "CAG"],
    "cursor_position": 20,
    "total_length": 400,
    "bitrate": 512,
    "framerate": 60.00,
    "video_player": "dailymotion",
    "sound": 100,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val playbackVideoEvent = TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_buffer_complete, "YOUR_VIDEO_SESSION_ID")
playbackVideoEvent.contentAssetID = listOf("456", "223")
playbackVideoEvent.cursorPosition = 0
playbackVideoEvent.totalLength = 500
serverSide.execute(playbackVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoPlaybackEvent playbackVideoEvent = new TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_buffer_complete, "YOUR_VIDEO_SESSION_ID");
playbackVideoEvent.contentAssetID = Arrays.asList("456", "223");
playbackVideoEvent.cursorPosition = 0;
playbackVideoEvent.totalLength = 500;
serverSide.execute(playbackVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoPlaybackEvent *playbackVideoEvent = [[TCVideoPlaybackEvent alloc] initWithMode: video_buffer_complete andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    playbackVideoEvent.contentAssetID =  [@[@"456", @"223"] mutableCopy];
    playbackVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    playbackVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: playbackVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let playbackVideoEvent = TCVideoPlaybackEvent(mode: video_buffer_complete, andSessionId: "YOUR_VIDEO_SESSION_ID")
    playbackVideoEvent?.contentAssetID = ["456", "223"]
    playbackVideoEvent?.cursorPosition = 0
    playbackVideoEvent?.totalLength = 500
    serverSide?.execute(playbackVideoEvent)
```

{% endtab %}
{% endtabs %}

### Début du déplacement du curseur de lecture

Cet événement est envoyé lorsqu’un utilisateur recherche manuellement une certaine position du curseur du contenu vidéo ou d’une publicité dans la lecture. La `cursor_position` propriété indique d’où l’utilisateur effectue le saut (temps en secondes) et la `seek_position` indique la position du curseur dans la lecture vers laquelle l’utilisateur effectue le saut.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_seek_start",
    "user": {},
    "video_session_id": "abcdef",
    "content_asset_id": ["123456"],
    "content_pod_id": ["XYZ", "XYA"],
    "cursor_position": 59,
    "seek_position": 150,
    "total_length": 360,
    "bitrate": 256,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 80,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val playbackVideoEvent = TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_seek_start, "YOUR_VIDEO_SESSION_ID")
playbackVideoEvent.contentAssetID = listOf("456", "223")
playbackVideoEvent.cursorPosition = 0
playbackVideoEvent.totalLength = 500
serverSide.execute(playbackVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoPlaybackEvent playbackVideoEvent = new TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_seek_start, "YOUR_VIDEO_SESSION_ID");
playbackVideoEvent.contentAssetID = Arrays.asList("456", "223");
playbackVideoEvent.cursorPosition = 0;
playbackVideoEvent.totalLength = 500;
serverSide.execute(playbackVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoPlaybackEvent *playbackVideoEvent = [[TCVideoPlaybackEvent alloc] initWithMode: video_seek_start andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    playbackVideoEvent.contentAssetID =  [@[@"456", @"223"] mutableCopy];
    playbackVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    playbackVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: playbackVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let playbackVideoEvent = TCVideoPlaybackEvent(mode: video_seek_start, andSessionId: "YOUR_VIDEO_SESSION_ID")
    playbackVideoEvent?.contentAssetID = ["456", "223"]
    playbackVideoEvent?.cursorPosition = 0
    playbackVideoEvent?.totalLength = 500
    serverSide?.execute(playbackVideoEvent)
```

{% endtab %}
{% endtabs %}

### Déplacement du curseur de lecture terminé

Cet événement est envoyé après qu’un utilisateur a recherché manuellement une certaine position du curseur de la vidéo ou de la publicité dans la lecture. La `cursor_position` propriété indique où l’utilisateur reprend la lecture.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_seek_complete",
    "user": {},
    "video_session_id": "abcdef",
    "content_asset_id": ["123456"],
    "content_pod_id": ["XYZ", "XYA"],
    "cursor_position": 59,
    "seek_position": 150,
    "total_length": 360,
    "bitrate": 256,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 80,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val playbackVideoEvent = TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_seek_complete, "YOUR_VIDEO_SESSION_ID")
playbackVideoEvent.contentAssetID = listOf("456", "223")
playbackVideoEvent.cursorPosition = 0
playbackVideoEvent.totalLength = 500
serverSide.execute(playbackVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoPlaybackEvent playbackVideoEvent = new TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_seek_complete, "YOUR_VIDEO_SESSION_ID");
playbackVideoEvent.contentAssetID = Arrays.asList("456", "223");
playbackVideoEvent.cursorPosition = 0;
playbackVideoEvent.totalLength = 500;
serverSide.execute(playbackVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoPlaybackEvent *playbackVideoEvent = [[TCVideoPlaybackEvent alloc] initWithMode: video_seek_start andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    playbackVideoEvent.contentAssetID =  [@[@"456", @"223"] mutableCopy];
    playbackVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    playbackVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: playbackVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let playbackVideoEvent = TCVideoPlaybackEvent(mode: video_seek_complete, andSessionId: "YOUR_VIDEO_SESSION_ID")
    playbackVideoEvent?.contentAssetID = ["456", "223"]
    playbackVideoEvent?.cursorPosition = 0
    playbackVideoEvent?.totalLength = 500
    serverSide?.execute(playbackVideoEvent)
```

{% endtab %}
{% endtabs %}

### Lecture vidéo reprise

Cet événement est envoyé après que l’utilisateur a repris la lecture vidéo après une pause.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_resume",
    "user": {},
    "video_session_id": "abcdef",
    "content_asset_id": ["123456"],
    "content_pod_id": ["XYZ", "XYA"],
    "cursor_position": 150,
    "total_length": 360,
    "bitrate": 256,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 80,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val playbackVideoEvent = TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_resume, "YOUR_VIDEO_SESSION_ID")
playbackVideoEvent.contentAssetID = listOf("456", "223")
playbackVideoEvent.cursorPosition = 0
playbackVideoEvent.totalLength = 500
serverSide.execute(playbackVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoPlaybackEvent playbackVideoEvent = new TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_resume, "YOUR_VIDEO_SESSION_ID");
playbackVideoEvent.contentAssetID = Arrays.asList("456", "223");
playbackVideoEvent.cursorPosition = 0;
playbackVideoEvent.totalLength = 500;
serverSide.execute(playbackVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoPlaybackEvent *playbackVideoEvent = [[TCVideoPlaybackEvent alloc] initWithMode: video_resume andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    playbackVideoEvent.contentAssetID =  [@[@"456", @"223"] mutableCopy];
    playbackVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    playbackVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: playbackVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let playbackVideoEvent = TCVideoPlaybackEvent(mode: video_resume, andSessionId: "YOUR_VIDEO_SESSION_ID")
    playbackVideoEvent?.contentAssetID = ["456", "223"]
    playbackVideoEvent?.cursorPosition = 0
    playbackVideoEvent?.totalLength = 500
    serverSide?.execute(playbackVideoEvent)
```

{% endtab %}
{% endtabs %}

### Lecture vidéo terminée

Cet événement est envoyé une fois la lecture terminée et lorsque la session du pod est finie. Notez que la `cursor_position` propriété a la même valeur que la `total_length` propriété.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_complete",
    "user": {},
    "video_session_id": "abcdef",
    "content_asset_id": ["123456"],
    "content_pod_id": ["XYZ", "XYA"],
    "cursor_position": 150,
    "total_length": 360,
    "bitrate": 256,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 80,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val playbackVideoEvent = TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_complete, "YOUR_VIDEO_SESSION_ID")
playbackVideoEvent.contentAssetID = listOf("456", "223")
playbackVideoEvent.cursorPosition = 0
playbackVideoEvent.totalLength = 500
serverSide.execute(playbackVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoPlaybackEvent playbackVideoEvent = new TCVideoPlaybackEvent(ETCVideoPlaybackMode.video_complete, "YOUR_VIDEO_SESSION_ID");
playbackVideoEvent.contentAssetID = Arrays.asList("456", "223");
playbackVideoEvent.cursorPosition = 0;
playbackVideoEvent.totalLength = 500;
serverSide.execute(playbackVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoPlaybackEvent *playbackVideoEvent = [[TCVideoPlaybackEvent alloc] initWithMode: video_resume andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    playbackVideoEvent.contentAssetID =  [@[@"456", @"223"] mutableCopy];
    playbackVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    playbackVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: playbackVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let playbackVideoEvent = TCVideoPlaybackEvent(mode: video_complete, andSessionId: "YOUR_VIDEO_SESSION_ID")
    playbackVideoEvent?.contentAssetID = ["456", "223"]
    playbackVideoEvent?.cursorPosition = 0
    playbackVideoEvent?.totalLength = 500
    serverSide?.execute(playbackVideoEvent)
```

{% endtab %}
{% endtabs %}

## Contenu

Un contenu **pod** désigne une partie / un groupe / segment du contenu vidéo ou de la publicité pendant la lecture.

Supposons qu’une session de lecture vidéo comporte une vidéo et une publicité mid-roll. Cela signifie que la publicité mid-roll divise la lecture en deux pods de contenu distincts. La publicité mid-roll est incluse dans un seul pod publicitaire.

Le flux est le suivant :

* L’utilisateur démarre et termine le premier pod de contenu
* L’utilisateur démarre et termine la publicité
* L’utilisateur démarre et termine le deuxième pod de contenu

Tous ces événements dans le flux se produisent au cours d’une seule lecture vidéo.

## Propriétés des événements de contenu

Tous les événements de contenu partagent les mêmes propriétés qui décrivent l’état actuel du contenu vidéo consulté par l’utilisateur pendant la lecture.

Le tableau suivant répertorie en détail toutes les propriétés de cet objet d’événement de lecture :

<table><thead><tr><th width="226">Propriété</th><th width="116.33333333333331">Type</th><th width="101">Obligatoire</th><th>Description</th></tr></thead><tbody><tr><td><code>video_session_id</code></td><td><code>String</code></td><td><strong>Oui</strong></td><td>Un ID unique qui relie tous les événements<br>générés à partir d’une session de lecture spécifique.<br><br>Ces événements incluent les événements de lecture, de contenu et<br>de publicité.</td></tr><tr><td><code>content_asset_id</code></td><td><code>String</code></td><td><strong>Oui</strong></td><td>Indique l’ID unique de l’asset de contenu vidéo.</td></tr><tr><td><code>content_pod_id</code></td><td><code>String</code></td><td>Non</td><td>Indique l’ID unique du pod de contenu vidéo.</td></tr><tr><td><code>video_title</code></td><td><code>String</code></td><td>Non</td><td>Indique le titre du contenu vidéo.</td></tr><tr><td><code>video_description</code></td><td><code>String</code></td><td>Non</td><td>Décrit brièvement l’asset de contenu vidéo.</td></tr><tr><td><code>keywords</code></td><td><code>Array [String]</code></td><td>Non</td><td><p>Indique les mots-clés pertinents associés à la</p><p>catégorisation du contenu vidéo</p></td></tr><tr><td><code>season</code></td><td><code>String</code></td><td>Non</td><td>Indique le numéro de saison, le cas échéant.</td></tr><tr><td><code>episode</code></td><td><code>String</code></td><td>Non</td><td>Indique le numéro d’épisode, le cas échéant.</td></tr><tr><td><code>video_category</code></td><td><code>String</code></td><td>Non</td><td>Indique le genre de l’asset de contenu vidéo.</td></tr><tr><td><code>program</code></td><td><code>String</code></td><td>Non</td><td><p>Indique le nom du programme / de l’émission dont</p><p>le contenu vidéo fait partie.</p></td></tr><tr><td><code>publisher</code></td><td><code>String</code></td><td>Non</td><td><p>Indique l’éditeur / créateur / auteur du</p><p>contenu vidéo.</p></td></tr><tr><td><code>channel</code></td><td><code>String</code></td><td>Non</td><td><p>Indique la chaîne sur laquelle le contenu vidéo</p><p>est diffusé.</p></td></tr><tr><td><code>full_episode</code></td><td><code>Boolean</code></td><td>Non</td><td>Définir sur <code>true</code> l’asset de contenu vidéo est un épisode complet.</td></tr><tr><td><code>livestream</code></td><td>Boolean</td><td>Non</td><td><p>Si le contenu vidéo est une diffusion en direct, cette valeur est définie sur</p><p><code>true</code>.</p></td></tr><tr><td><code>airdate</code></td><td><p><code>chaîne de date ISO 8601</code></p><p><code>chaîne de date</code></p></td><td>Non</td><td><p>Indique la date originale de diffusion / publication</p><p>du contenu vidéo.</p></td></tr><tr><td><code>cursor_position</code></td><td><code>Integer</code></td><td><strong>Oui</strong></td><td><p>Indique la position actuelle du curseur dans le</p><p>contenu vidéo en secondes. Cela n’inclut pas</p><p>les publicités lues pendant cette durée.</p><p>Dans le cas des diffusions en direct, reportez-vous à la documentation<br>de la destination concernée pour savoir comment transmettre<br>cette propriété.</p></td></tr><tr><td><code>total_length</code></td><td><code>Integer</code></td><td><strong>Oui</strong></td><td><p>La durée totale du contenu vidéo en</p><p>secondes. Cela n’inclut pas les publicités incluses</p><p>dans la lecture de cet asset de contenu.</p><p>Pour la lecture en direct, cette valeur doit être définie sur <code>null</code>.</p></td></tr><tr><td><code>bitrate</code></td><td><code>Integer</code></td><td>Non</td><td>Indique le débit binaire actuel en <code>kbps</code>.</td></tr><tr><td><code>framerate</code></td><td><code>Float</code></td><td>Non</td><td>Indique la fréquence d’images en <code>fps</code>.</td></tr></tbody></table>

## Événements de contenu

Cette section détaille tous les événements de contenu vidéo.

Pour plus d’informations sur chacune des propriétés associées à ces événements, reportez-vous à la [**Propriétés des événements de contenu**](#content-events-properties) section.

### Début du contenu vidéo

Cet événement est envoyé lorsque l’utilisateur commence à lire un segment de contenu vidéo pendant une lecture.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_content_start",
    "video_session_id": "98765",
    "content_asset_id": "456",
    "content_pod_id": "XYZ",
    "program": "Le Roi Lion",
    "video_title": "Acte 1",
    "video_description": "Description inventée",
    "season": "1",
    "episode":"14",
    "channel":"NBC",
    "livestream":false,
    "airdate":"2022-12-20",
    "cursor_position": 5,
    "total_length": 200,
    "video_category": "Animation",
    "publisher": "Disney",
    "full_episode": false,
    "keywords": ["lion", "savane", "cercle de la vie"],
    "user": {}
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val contentVideoEvent = TCVideoContentEvent(ETCVideoContentMode.video_content_start, "YOUR_VIDEO_SESSION_ID")
contentVideoEvent.contentAssetID = "456"
contentVideoEvent.cursorPosition = 0
contentVideoEvent.totalLength = 500
serverSide.execute(contentVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoContentEvent contentVideoEvent = new TCVideoContentEvent(ETCVideoContentMode.video_content_start, "YOUR_VIDEO_SESSION_ID");
contentVideoEvent.contentAssetID = "456";
contentVideoEvent.cursorPosition = 0;
contentVideoEvent.totalLength = 500;
serverSide.execute(contentVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

<pre class="language-objectivec"><code class="lang-objectivec"><strong>    TCVideoContentEvent *addContentEvent = [[TCVideoContentEvent alloc] initWithMode: video_content_start andSessionId: @"YOUR_VIDEO_SESSION_ID"];
</strong>    addContentEvent.contentAssetID = @"456";
    addContentEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    addContentEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: addContentEvent];
</code></pre>

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let contentVideoEvent = TCVideoContentEvent(mode: video_content_start, andSessionId: "YOUR_VIDEO_SESSION_ID")
    contentVideoEvent?.contentAssetID = "456"
    contentVideoEvent?.cursorPosition = 0
    contentVideoEvent?.totalLength = 500
    serverSide?.execute(contentVideoEvent)
```

{% endtab %}
{% endtabs %}

### Lecture du contenu vidéo

Ces événements sont envoyés comme des heartbeats à intervalles réguliers pour indiquer la durée de la vidéo visionnée par l'utilisateur, déterminée par le `cursor_position` propriété.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_content_playing",
    "video_session_id": "56789",
    "content_asset_id": "789",
    "content_pod_id": "ABC",
    "program": "The Jungle Book",
    "video_title": "Act 2",
    "video_description": "Description inventée",
    "season": "2",
    "cursor_position": 123,
    "total_length": 400,
    "video_category": "Aventure",
    "publisher": "Disney",
    "full_episode": false,
    "framerate": 60,
    "bitrate": 4500,
    "keywords": ["jungle", "animals", "mowgli"],
    "user": {}
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val contentVideoEvent = TCVideoContentEvent(ETCVideoContentMode.video_content_playing, "YOUR_VIDEO_SESSION_ID")
contentVideoEvent.contentAssetID = "456"
contentVideoEvent.cursorPosition = 0
contentVideoEvent.totalLength = 500
serverSide.execute(contentVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoContentEvent contentVideoEvent = new TCVideoContentEvent(ETCVideoContentMode.video_content_playing, "YOUR_VIDEO_SESSION_ID");
contentVideoEvent.contentAssetID = "456";
contentVideoEvent.cursorPosition = 0;
contentVideoEvent.totalLength = 500;
serverSide.execute(contentVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoContentEvent *addContentEvent = [[TCVideoContentEvent alloc] initWithMode: video_content_playing andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addContentEvent.contentAssetID = @"456";
    addContentEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    addContentEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: addContentEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let contentVideoEvent = TCVideoContentEvent(mode: video_content_playing, andSessionId: "YOUR_VIDEO_SESSION_ID")
    contentVideoEvent?.contentAssetID = "456"
    contentVideoEvent?.cursorPosition = 0
    contentVideoEvent?.totalLength = 500
    serverSide?.execute(contentVideoEvent)
```

{% endtab %}
{% endtabs %}

### Quart du contenu vidéo atteint

Ces événements sont envoyés lorsqu'un quart de la vidéo est atteint, déterminé par le `cursor_position` propriété.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_content_quarter_reached",
    "video_session_id": "56789",
    "content_asset_id": "789",
    "content_pod_id": "ABC",
    "program": "The Jungle Book",
    "video_title": "Act 2",
    "video_description": "Description inventée",
    "season": "2",
    "cursor_position": 123,
    "total_length": 400,
    "video_category": "Aventure",
    "publisher": "Disney",
    "full_episode": false,
    "keywords": ["jungle", "animals", "mowgli"],
    "user": {}
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val contentVideoEvent = TCVideoContentEvent(ETCVideoContentMode.video_content_quarter_reached, "YOUR_VIDEO_SESSION_ID")
contentVideoEvent.contentAssetID = "456"
contentVideoEvent.cursorPosition = 0
contentVideoEvent.totalLength = 500
serverSide.execute(contentVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoContentEvent contentVideoEvent = new TCVideoContentEvent(ETCVideoContentMode.video_content_playing, "YOUR_VIDEO_SESSION_ID");
contentVideoEvent.contentAssetID = "456";
contentVideoEvent.cursorPosition = 0;
contentVideoEvent.totalLength = 500;
serverSide.execute(contentVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoContentEvent *addContentEvent = [[TCVideoContentEvent alloc] initWithMode: video_content_quarter_reached andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addContentEvent.contentAssetID = @"456";
    addContentEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    addContentEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: addContentEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let contentVideoEvent = TCVideoContentEvent(mode: video_content_quarter_reached, andSessionId: "YOUR_VIDEO_SESSION_ID")
    contentVideoEvent?.contentAssetID = "456"
    contentVideoEvent?.cursorPosition = 0
    contentVideoEvent?.totalLength = 500
    serverSide?.execute(contentVideoEvent)
```

{% endtab %}
{% endtabs %}

### Contenu vidéo terminé

Cet événement est envoyé une fois que le segment vidéo dans la lecture est terminé. Notez que le `cursor_position` propriété a la même valeur que la `total_length` propriété.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_content_complete",
    "video_session_id": "01234",
    "content_asset_id": "111",
    "content_pod_id": "DEF",
    "program": "Tarzan",
    "video_title": "Finale",
    "video_description": "Description inventée",
    "season": "4",
    "cursor_position": 300,
    "total_length": 300,
    "video_category": "Aventure",
    "publisher": "Disney",
    "full_episode": true,
    "keywords": ["jungle", "apes", "tarzan"],
    "user": {}
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val contentVideoEvent = TCVideoContentEvent(ETCVideoContentMode.video_content_complete, "YOUR_VIDEO_SESSION_ID")
contentVideoEvent.contentAssetID = "456"
contentVideoEvent.cursorPosition = 0
contentVideoEvent.totalLength = 500
serverSide.execute(contentVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoContentEvent contentVideoEvent = new TCVideoContentEvent(ETCVideoContentMode.video_content_complete, "YOUR_VIDEO_SESSION_ID");
contentVideoEvent.contentAssetID = "456";
contentVideoEvent.cursorPosition = 0;
contentVideoEvent.totalLength = 500;
serverSide.execute(contentVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoContentEvent *addContentEvent = [[TCVideoContentEvent alloc] initWithMode: video_content_complete andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addContentEvent.contentAssetID = @"456";
    addContentEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 0];
    addContentEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 500];;
    [serverside execute: addContentEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let contentVideoEvent = TCVideoContentEvent(mode: video_content_complete, andSessionId: "YOUR_VIDEO_SESSION_ID")
    contentVideoEvent?.contentAssetID = "456"
    contentVideoEvent?.cursorPosition = 0
    contentVideoEvent?.totalLength = 500
    serverSide?.execute(contentVideoEvent)
```

{% endtab %}
{% endtabs %}

## Annonces

## Propriétés des événements publicitaires

Tous les événements publicitaires partagent les mêmes propriétés qui décrivent l'état actuel du contenu publicitaire vidéo avec lequel l'utilisateur interagit pendant la lecture.

Le tableau suivant détaille toutes les propriétés de cet objet d'événement publicitaire :

<table><thead><tr><th width="211">Propriété</th><th width="113.33333333333331">Type</th><th width="111">Obligatoire</th><th>Description</th></tr></thead><tbody><tr><td><code>video_session_id</code></td><td><code>String</code></td><td><strong>Oui</strong></td><td>Un ID unique qui relie tous les événements<br>générés à partir d’une session de lecture spécifique.<br><br>Ces événements incluent les événements de lecture, de contenu et<br>de publicité.</td></tr><tr><td><code>ad_asset_id</code></td><td><code>String</code></td><td><strong>Oui</strong></td><td>Indique l'ID unique de l'asset publicitaire.</td></tr><tr><td><code>ad_pod_id</code></td><td><code>String</code></td><td><strong>Oui</strong></td><td>Indique l'ID unique du pod publicitaire.</td></tr><tr><td><code>pod_position</code></td><td><code>Integer</code></td><td>Non</td><td><p>Indique la position de l'asset publicitaire par rapport</p><p>aux autres publicités dans le même pod.</p></td></tr><tr><td><code>ad_type</code></td><td><code>String</code></td><td>Non</td><td><p>Indique le type de publicité diffusée au moment de l’</p><p>événement. Les valeurs peuvent être '<code>pre-roll</code>', ' <code>mid-roll</code>', ou</p><p>'<code>post-roll</code>'.</p></td></tr><tr><td><code>pod_length</code></td><td><code>Integer</code></td><td>Non</td><td><p>Indique le nombre d'assets publicitaires dans le</p><p>pod publicitaire actuel.</p></td></tr><tr><td><code>video_title</code></td><td><code>String</code></td><td>Non</td><td>Indique le titre de la publicité.</td></tr><tr><td><code>publisher</code></td><td><code>String</code></td><td>Non</td><td>Indique l'auteur/le créateur/l'éditeur de la publicité.</td></tr><tr><td><code>cursor_position</code></td><td><code>Integer</code></td><td><strong>Oui</strong></td><td><p>La position actuelle de la tête de lecture par rapport à la</p><p>longueur totale de la publicité, en secondes.</p></td></tr><tr><td><code>total_length</code></td><td><code>Integer</code></td><td><strong>Oui</strong></td><td>Indique la longueur totale de l'asset publicitaire en secondes.</td></tr><tr><td><code>load_type</code></td><td><code>Enum</code></td><td>Non</td><td><p>Indique si les publicités sont chargées dynamiquement ou si</p><p>elles sont les mêmes pour tous les utilisateurs.<br><br>Les valeurs peuvent être soit '<code>dynamic</code>' ou ' <code>linear</code> '.</p></td></tr><tr><td><code>ad_quartile</code></td><td><code>Integer</code></td><td>Non</td><td><p>Pour les <code>Lecture de la publicité vidéo</code> événement, cette propriété</p><p>peut être utilisée pour indiquer quand un quartile publicitaire spécifique</p><p>est atteint.</p><p>Si vous utilisez une bibliothèque client-side pour suivre vos</p><p>événements vidéo, cette propriété est facultative, car Commanders Act</p><p>suit automatiquement les quartiles publicitaires.</p></td></tr></tbody></table>

## Événements publicitaires

Cette section détaille tous les événements publicitaires.

Pour plus d’informations sur chacune des propriétés associées à ces événements, reportez-vous à la **Propriétés des événements publicitaires** section.

### Publicité vidéo démarrée

Cet événement est envoyé lorsqu'un spot publicitaire commence à être lu dans la lecture vidéo.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
  "event_name": "video_ad_start",
  "user": {},
  "video_session_id": "abcdef",
  "ad_asset_id": "456",
  "ad_pod_id": "XYA",
  "ad_type": "pre-roll",
  "video_title": "SmackDown!",
  "cursor_position": 0,
  "total_length": 30,
  "publisher": "WWE",
  "load_type": "linear"
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val addVideoEvent = TCVideoAdEvent(ETCVideoAdMode.video_ad_start, "YOUR_VIDEO_SESSION_ID")
addVideoEvent.adAssetID = "456"
addVideoEvent.adPodID = "839"
addVideoEvent.cursorPosition = 12
addVideoEvent.totalLength = 211
serverSide.execute(addVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoAdEvent addVideoEvent = new TCVideoAdEvent(ETCVideoAdMode.video_ad_start, "YOUR_VIDEO_SESSION_ID");
addVideoEvent.adAssetID = "456";
addVideoEvent.adPodID = "839";
addVideoEvent.cursorPosition = 12;
addVideoEvent.totalLength = 211;
serverSide.execute(addVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoAdEvent *addVideoEvent = [[TCVideoAdEvent alloc] initWithMode: video_ad_start andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addVideoEvent.adAssetID = @"456";
    addVideoEvent.adPodID = @"839";
    addVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 12];
    addVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 211];
    [serverside execute: addVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let addVideoEvent = TCVideoAdEvent(mode: video_ad_start, andSessionId: "YOUR_VIDEO_SESSION_ID")
    addVideoEvent?.adAssetID = "456"
    addVideoEvent?.adPodID = "839"
    addVideoEvent?.cursorPosition = 12
    addVideoEvent?.totalLength = 211
    serverSide?.execute(addVideoEvent)
```

{% endtab %}
{% endtabs %}

### Lecture de la publicité vidéo

Cet événement est envoyé à intervalles réguliers lorsque la publicité vidéo est en cours de lecture et est déterminé par le `cursor_position` propriété.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
  "event_name": "video_ad_playing",
  "user": {},
  "video_session_id": "abcdef",
  "ad_asset_id": "456",
  "ad_pod_id": "XYA",
  "ad_type": "pre-roll",
  "video_title": "SmackDown!",
  "cursor_position": 10,
  "total_length": 30,
  "publisher": "WWE",
  "load_type": "linear"
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val addVideoEvent = TCVideoAdEvent(ETCVideoAdMode.video_ad_playing, "YOUR_VIDEO_SESSION_ID")
addVideoEvent.adAssetID = "456"
addVideoEvent.adPodID = "839"
addVideoEvent.cursorPosition = 12
addVideoEvent.totalLength = 211
serverSide.execute(addVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoAdEvent addVideoEvent = new TCVideoAdEvent(ETCVideoAdMode.video_ad_playing, "YOUR_VIDEO_SESSION_ID");
addVideoEvent.adAssetID = "456";
addVideoEvent.adPodID = "839";
addVideoEvent.cursorPosition = 12;
addVideoEvent.totalLength = 211;
serverSide.execute(addVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoAdEvent *addVideoEvent = [[TCVideoAdEvent alloc] initWithMode: video_ad_playing andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addVideoEvent.adAssetID = @"456";
    addVideoEvent.adPodID = @"839";
    addVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 12];
    addVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 211];
    [serverside execute: addVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let addVideoEvent = TCVideoAdEvent(mode: video_ad_playing, andSessionId: "YOUR_VIDEO_SESSION_ID")
    addVideoEvent?.adAssetID = "456"
    addVideoEvent?.adPodID = "839"
    addVideoEvent?.cursorPosition = 12
    addVideoEvent?.totalLength = 211
    serverSide?.execute(addVideoEvent)
```

{% endtab %}
{% endtabs %}

### Arrêt de la publicité vidéo

Cet événement est envoyé après que l'utilisateur a vu une publicité vidéo dans son intégralité. Notez que le `cursor_position` propriété a la même valeur que la `total_length` propriété.

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
  "event_name": "video_ad_stop",
  "user": {},
  "video_session_id": "abcdef",
  "ad_asset_id": "456",
  "ad_pod_id": "XYA",
  "ad_type": "pre-roll",
  "video_title": "SmackDown!",
  "cursor_position": 30,
  "total_length": 30,
  "publisher": "WWE",
  "load_type": "linear"
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val addVideoEvent = TCVideoAdEvent(ETCVideoAdMode.video_ad_stop, "YOUR_VIDEO_SESSION_ID")
addVideoEvent.adAssetID = "456"
addVideoEvent.adPodID = "839"
addVideoEvent.cursorPosition = 12
addVideoEvent.totalLength = 211
serverSide.execute(addVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoAdEvent addVideoEvent = new TCVideoAdEvent(ETCVideoAdMode.video_ad_stop, "YOUR_VIDEO_SESSION_ID");
addVideoEvent.adAssetID = "456";
addVideoEvent.adPodID = "839";
addVideoEvent.cursorPosition = 12;
addVideoEvent.totalLength = 211;
serverSide.execute(addVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoAdEvent *addVideoEvent = [[TCVideoAdEvent alloc] initWithMode: video_ad_stop andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addVideoEvent.adAssetID = @"456";
    addVideoEvent.adPodID = @"839";
    addVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 12];
    addVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 211];
    [serverside execute: addVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let addVideoEvent = TCVideoAdEvent(mode: video_ad_playing, andSessionId: "YOUR_VIDEO_SESSION_ID")
    addVideoEvent?.adAssetID = "456"
    addVideoEvent?.adPodID = "839"
    addVideoEvent?.cursorPosition = 12
    addVideoEvent?.totalLength = 211
    serverSide?.execute(addVideoEvent)
```

{% endtab %}
{% endtabs %}

### Publicité vidéo terminée

Cet événement est envoyé après que l'utilisateur a vu l'intégralité du spot publicitaire vidéo. Notez que le `cursor_position` propriété a la même valeur que la `total_length` propriété.

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
  "event_name": "video_ad_complete",
  "user": {},
  "video_session_id": "abcdef",
  "ad_asset_id": "456",
  "ad_pod_id": "XYA",
  "ad_type": "pre-roll",
  "video_title": "SmackDown!",
  "cursor_position": 30,
  "total_length": 30,
  "publisher": "WWE",
  "load_type": "linear"
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val addVideoEvent = TCVideoAdEvent(ETCVideoAdMode.video_ad_complete, "YOUR_VIDEO_SESSION_ID")
addVideoEvent.adAssetID = "456"
addVideoEvent.adPodID = "839"
addVideoEvent.cursorPosition = 12
addVideoEvent.totalLength = 211
serverSide.execute(addVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoAdEvent addVideoEvent = new TCVideoAdEvent(ETCVideoAdMode.video_ad_complete, "YOUR_VIDEO_SESSION_ID");
addVideoEvent.adAssetID = "456";
addVideoEvent.adPodID = "839";
addVideoEvent.cursorPosition = 12;
addVideoEvent.totalLength = 211;
serverSide.execute(addVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoAdEvent *addVideoEvent = [[TCVideoAdEvent alloc] initWithMode: video_ad_complete andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addVideoEvent.adAssetID = @"456";
    addVideoEvent.adPodID = @"839";
    addVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 12];
    addVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 211];
    [serverside execute: addVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let addVideoEvent = TCVideoAdEvent(mode: video_ad_complete, andSessionId: "YOUR_VIDEO_SESSION_ID")
    addVideoEvent?.adAssetID = "456"
    addVideoEvent?.adPodID = "839"
    addVideoEvent?.cursorPosition = 12
    addVideoEvent?.totalLength = 211
    serverSide?.execute(addVideoEvent)
```

{% endtab %}
{% endtabs %}

### Passer la publicité vidéo

Cet événement est envoyé lorsque l'utilisateur clique sur le bouton Passer la publicité.

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
  "event_name": "video_ad_skip",
  "user": {},
  "video_session_id": "abcdef",
  "ad_asset_id": "456",
  "ad_pod_id": "XYA",
  "ad_type": "pre-roll",
  "video_title": "SmackDown!",
  "cursor_position": 20,
  "total_length": 30,
  "publisher": "WWE",
  "load_type": "linear"
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val addVideoEvent = TCVideoAdEvent(ETCVideoAdMode.video_ad_skip, "YOUR_VIDEO_SESSION_ID")
addVideoEvent.adAssetID = "456"
addVideoEvent.adPodID = "839"
addVideoEvent.cursorPosition = 12
addVideoEvent.totalLength = 211
serverSide.execute(addVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoAdEvent addVideoEvent = new TCVideoAdEvent(ETCVideoAdMode.video_ad_skip, "YOUR_VIDEO_SESSION_ID");
addVideoEvent.adAssetID = "456";
addVideoEvent.adPodID = "839";
addVideoEvent.cursorPosition = 12;
addVideoEvent.totalLength = 211;
serverSide.execute(addVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoAdEvent *addVideoEvent = [[TCVideoAdEvent alloc] initWithMode: video_ad_skip andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addVideoEvent.adAssetID = @"456";
    addVideoEvent.adPodID = @"839";
    addVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 12];
    addVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 211];
    [serverside execute: addVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let addVideoEvent = TCVideoAdEvent(mode: video_ad_skip, andSessionId: "YOUR_VIDEO_SESSION_ID")
    addVideoEvent?.adAssetID = "456"
    addVideoEvent?.adPodID = "839"
    addVideoEvent?.cursorPosition = 12
    addVideoEvent?.totalLength = 211
    serverSide?.execute(addVideoEvent)
```

{% endtab %}
{% endtabs %}

### Début de la coupure publicitaire vidéo

Cet événement est envoyé lorsqu'une coupure publicitaire commence pendant la lecture de la vidéo.

Un exemple d’événement est présenté :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
  "event_name": "video_ad_break_start",
  "user": {},
  "video_session_id": "abcdef",
  "ad_asset_id": "456",
  "ad_pod_id": "XYA",
  "ad_type": "pre-roll",
  "video_title": "SmackDown!",
  "cursor_position": 0,
  "total_length": 30,
  "publisher": "WWE",
  "load_type": "linear"
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val addVideoEvent = TCVideoAdEvent(ETCVideoAdMode.video_ad_break_start, "YOUR_VIDEO_SESSION_ID")
addVideoEvent.adAssetID = "456"
addVideoEvent.adPodID = "839"
addVideoEvent.cursorPosition = 12
addVideoEvent.totalLength = 211
serverSide.execute(addVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoAdEvent addVideoEvent = new TCVideoAdEvent(ETCVideoAdMode.video_ad_break_start, "YOUR_VIDEO_SESSION_ID");
addVideoEvent.adAssetID = "456";
addVideoEvent.adPodID = "839";
addVideoEvent.cursorPosition = 12;
addVideoEvent.totalLength = 211;
serverSide.execute(addVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoAdEvent *addVideoEvent = [[TCVideoAdEvent alloc] initWithMode: video_ad_break_start andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addVideoEvent.adAssetID = @"456";
    addVideoEvent.adPodID = @"839";
    addVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 12];
    addVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 211];
    [serverside execute: addVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let addVideoEvent = TCVideoAdEvent(mode: video_ad_break_start, andSessionId: "YOUR_VIDEO_SESSION_ID")
    addVideoEvent?.adAssetID = "456"
    addVideoEvent?.adPodID = "839"
    addVideoEvent?.cursorPosition = 12
    addVideoEvent?.totalLength = 211
    serverSide?.execute(addVideoEvent)
```

{% endtab %}
{% endtabs %}

### Coupure publicitaire vidéo terminée

Cet événement est envoyé après que l'utilisateur a vu le pod de coupure publicitaire vidéo dans son intégralité. Notez que le `cursor_position` propriété a la même valeur que la `total_length` propriété.

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
  "event_name": "video_ad_break_complete",
  "user": {},
  "video_session_id": "abcdef",
  "ad_asset_id": "456",
  "ad_pod_id": "XYA",
  "ad_type": "pre-roll",
  "video_title": "SmackDown!",
  "cursor_position": 30,
  "total_length": 30,
  "publisher": "WWE",
  "load_type": "linear"
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val addVideoEvent = TCVideoAdEvent(ETCVideoAdMode.video_ad_break_complete, "YOUR_VIDEO_SESSION_ID")
addVideoEvent.adAssetID = "456"
addVideoEvent.adPodID = "839"
addVideoEvent.cursorPosition = 12
addVideoEvent.totalLength = 211
serverSide.execute(addVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoAdEvent addVideoEvent = new TCVideoAdEvent(ETCVideoAdMode.video_ad_break_complete, "YOUR_VIDEO_SESSION_ID");
addVideoEvent.adAssetID = "456";
addVideoEvent.adPodID = "839";
addVideoEvent.cursorPosition = 12;
addVideoEvent.totalLength = 211;
serverSide.execute(addVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoAdEvent *addVideoEvent = [[TCVideoAdEvent alloc] initWithMode: video_ad_break_complete andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addVideoEvent.adAssetID = @"456";
    addVideoEvent.adPodID = @"839";
    addVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 12];
    addVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 211];
    [serverside execute: addVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let addVideoEvent = TCVideoAdEvent(mode: video_ad_break_complete, andSessionId: "YOUR_VIDEO_SESSION_ID")
    addVideoEvent?.adAssetID = "456"
    addVideoEvent?.adPodID = "839"
    addVideoEvent?.cursorPosition = 12
    addVideoEvent?.totalLength = 211
    serverSide?.execute(addVideoEvent)
```

{% endtab %}
{% endtabs %}

### Clic sur la publicité vidéo

Cet événement est envoyé lorsque l'utilisateur clique sur la publicité.

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
  "event_name": "video_ad_click",
  "user": {},
  "video_session_id": "abcdef",
  "ad_asset_id": "456",
  "ad_pod_id": "XYA",
  "ad_type": "pre-roll",
  "video_title": "SmackDown!",
  "cursor_position": 20,
  "total_length": 30,
  "publisher": "WWE",
  "load_type": "linear"
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val addVideoEvent = TCVideoAdEvent(ETCVideoAdMode.video_ad_click, "YOUR_VIDEO_SESSION_ID")
addVideoEvent.adAssetID = "456"
addVideoEvent.adPodID = "839"
addVideoEvent.cursorPosition = 12
addVideoEvent.totalLength = 211
serverSide.execute(addVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoAdEvent addVideoEvent = new TCVideoAdEvent(ETCVideoAdMode.video_ad_click, "YOUR_VIDEO_SESSION_ID");
addVideoEvent.adAssetID = "456";
addVideoEvent.adPodID = "839";
addVideoEvent.cursorPosition = 12;
addVideoEvent.totalLength = 211;
serverSide.execute(addVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoAdEvent *addVideoEvent = [[TCVideoAdEvent alloc] initWithMode: video_ad_click andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    addVideoEvent.adAssetID = @"456";
    addVideoEvent.adPodID = @"839";
    addVideoEvent.cursorPosition = [[NSDecimalNumber alloc] initWithInt: 12];
    addVideoEvent.totalLength = [[NSDecimalNumber alloc] initWithInt: 211];
    [serverside execute: addVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let addVideoEvent = TCVideoAdEvent(mode: video_ad_click, andSessionId: "YOUR_VIDEO_SESSION_ID")
    addVideoEvent?.adAssetID = "456"
    addVideoEvent?.adPodID = "839"
    addVideoEvent?.cursorPosition = 12
    addVideoEvent?.totalLength = 211
    serverSide?.execute(addVideoEvent)
```

{% endtab %}
{% endtabs %}

## Paramètres

## Propriétés des événements de réglage

Tous les événements de réglage partagent les mêmes propriétés qui décrivent l'état actuel du contenu vidéo avec lequel l'utilisateur interagit pendant la lecture.

<table><thead><tr><th width="220">Propriété</th><th width="152.33333333333331">Type</th><th width="128">Obligatoire</th><th>Description</th></tr></thead><tbody><tr><td><code>video_session_id</code></td><td><code>String</code></td><td><strong>Oui</strong></td><td>Un ID unique qui relie tous les événements<br>générés à partir d’une session de lecture spécifique.<br><br>Ces événements incluent les événements de lecture, de contenu et<br>de publicité.</td></tr><tr><td><code>content_asset_id</code></td><td><code>String</code></td><td><strong>Oui</strong></td><td>Indique l’ID unique de l’asset de contenu vidéo.</td></tr><tr><td><code>content_pod_id</code></td><td><code>String</code></td><td>Non</td><td>Indique l’ID unique du pod de contenu vidéo.</td></tr><tr><td><code>ad_asset_id</code></td><td><code>String</code></td><td>Non</td><td>Indique l'ID unique de l'asset publicitaire.</td></tr><tr><td><code>ad_pod_id</code></td><td><code>String</code></td><td>Non</td><td>Indique l'ID unique du pod publicitaire.</td></tr><tr><td><code>ad_type</code></td><td><code>String</code></td><td>Non</td><td><p>Indique le type de publicité diffusée au moment de l’</p><p>événement. Les valeurs peuvent être '<code>pre-roll</code>', ' <code>mid-roll</code>', ou</p><p>'<code>post-roll</code>'.</p></td></tr><tr><td><code>video_title</code></td><td><code>String</code></td><td>Non</td><td>Indique le titre du contenu vidéo.</td></tr><tr><td><code>video_description</code></td><td><code>String</code></td><td>Non</td><td>Décrit brièvement l’asset de contenu vidéo.</td></tr><tr><td><code>keywords</code></td><td><code>Array [String]</code></td><td>Non</td><td><p>Indique les mots-clés pertinents associés à la</p><p>catégorisation du contenu vidéo</p></td></tr><tr><td><code>season</code></td><td><code>String</code></td><td>Non</td><td>Indique le numéro de saison, le cas échéant.</td></tr><tr><td><code>episode</code></td><td><code>String</code></td><td>Non</td><td>Indique le numéro d’épisode, le cas échéant.</td></tr><tr><td><code>video_category</code></td><td><code>String</code></td><td>Non</td><td>Indique le genre de l’asset de contenu vidéo.</td></tr><tr><td><code>program</code></td><td><code>String</code></td><td>Non</td><td><p>Indique le nom du programme / de l’émission dont</p><p>le contenu vidéo fait partie.</p></td></tr><tr><td><code>publisher</code></td><td><code>String</code></td><td>Non</td><td><p>Indique l’éditeur / créateur / auteur du</p><p>contenu vidéo.</p></td></tr><tr><td><code>channel</code></td><td><code>String</code></td><td>Non</td><td><p>Indique la chaîne sur laquelle le contenu vidéo</p><p>est diffusé.</p></td></tr><tr><td><code>full_episode</code></td><td><code>Boolean</code></td><td>Non</td><td>Définir sur <code>true</code> l’asset de contenu vidéo est un épisode complet.</td></tr><tr><td><code>livestream</code></td><td><code>Boolean</code></td><td>Non</td><td><p>Si le contenu vidéo est une diffusion en direct, cette valeur est définie sur</p><p><code>true</code>.</p></td></tr><tr><td><code>airdate</code></td><td><p><code>chaîne de date ISO 8601</code></p><p><code>chaîne de date</code></p></td><td>Non</td><td><p>Indique la date originale de diffusion / publication</p><p>du contenu vidéo.</p></td></tr><tr><td><code>cursor_position</code></td><td><code>Integer</code></td><td><strong>Oui</strong></td><td><p>Indique la position actuelle du curseur dans le</p><p>contenu vidéo en secondes. Cela n’inclut pas</p><p>les publicités lues pendant cette durée.</p><p>Dans le cas des diffusions en direct, reportez-vous à la documentation<br>de la destination concernée pour savoir comment transmettre<br>cette propriété.</p></td></tr><tr><td><code>total_length</code></td><td><code>Integer</code></td><td><strong>Oui</strong></td><td><p>La durée totale du contenu vidéo en</p><p>secondes. Cela n’inclut pas les publicités incluses</p><p>dans la lecture de cet asset de contenu.</p><p>Pour la lecture en direct, cette valeur doit être définie sur <code>null</code>.</p></td></tr><tr><td><code>bitrate</code></td><td><code>Integer</code></td><td><strong>Oui</strong></td><td>Indique le débit binaire actuel en <code>kbps</code>.</td></tr><tr><td><code>framerate</code></td><td><code>Float</code></td><td>Non</td><td>Indique la fréquence d’images en <code>fps</code>.</td></tr><tr><td><code>sound</code></td><td><code>Integer</code></td><td><strong>Oui</strong></td><td><p>Indique le niveau sonore actuel de la vidéo</p><p>Requis dans <code>video_volume</code> event</p></td></tr><tr><td><code>full_screen</code></td><td><code>Boolean</code></td><td><strong>Oui</strong></td><td>Indique le mode d'affichage actuel de la vidéo.<br>Requis dans <code>video_fullscreen_on</code> et <code>video_full_screen_off</code> événements</td></tr><tr><td><code>ad_enabled</code></td><td><code>Boolean</code></td><td>Non</td><td>Indique si les annonces étaient activées</td></tr><tr><td><code>image_quality</code></td><td><code>String</code></td><td><strong>Oui</strong></td><td>Indique la résolution de qualité vidéo actuelle.<br>Requis dans <code>video_quality</code> event</td></tr></tbody></table>

## Reprise de la lecture

## Événements de réglage

Cette section détaille tous les événements de réglage vidéo.

Pour plus d’informations sur chacune des propriétés associées à ces événements, reportez-vous à la [**Propriétés des événements de réglage**](#video-settings-properties) section.

### Volume vidéo

Cet événement est envoyé lorsque l'utilisateur modifie le volume audio du lecteur vidéo.

Un exemple d’événement est présenté ci-dessous :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_volume",
    "user": {},
    "video_session_id": "98765",
    "content_asset_id": ["0133370", "123456"],
    "content_pod_id": ["CAA", "CAB", "CAD"],
    "ad_asset_id": ["ad1", "ad0", "ad2"],
    "ad_pod_id": ["adCAA", "adCAB", "adCAD"],
    "ad_type": "mid-roll",
    "cursor_position": 420,
    "total_length": 600,
    "bitrate": 128,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 120,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val settingVideoEvent = TCVideoSettingEvent(ETCVideoSettingMode.video_volume, "YOUR_VIDEO_SESSION_ID")
settingVideoEvent.contentAssetID = "456"
settingVideoEvent.imageQuality = "720"
serverSide.execute(settingVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoSettingEvent settingVideoEvent = new TCVideoSettingEvent(ETCVideoSettingMode.video_volume, "YOUR_VIDEO_SESSION_ID");
settingVideoEvent.contentAssetID = "456";
settingVideoEvent.imageQuality = "720";
serverSide.execute(settingVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoSettingEvent *settingVideoEvent = [[TCVideoSettingEvent alloc] initWithMode: video_volume andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    settingVideoEvent.contentAssetID = @"456";
    settingVideoEvent.imageQuality =  @"720";
    [serverside execute: settingVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let settingVideoEvent = TCVideoSettingEvent(mode: video_volume, andSessionId: "YOUR_VIDEO_SESSION_ID")
    settingVideoEvent?.contentAssetID = "456"
    settingVideoEvent?.imageQuality = "720"
    serverSide?.execute(settingVideoEvent)
```

{% endtab %}
{% endtabs %}

### Vitesse de la vidéo

Cet événement est envoyé lorsque l'utilisateur modifie la vitesse du lecteur vidéo.

Un exemple d’événement est présenté ci-dessous :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_speed",
    "user": {},
    "video_session_id": "98765",
    "content_asset_id": ["0133370", "123456"],
    "content_pod_id": ["CAA", "CAB", "CAD"],
    "ad_asset_id": ["ad1", "ad0", "ad2"],
    "ad_pod_id": ["adCAA", "adCAB", "adCAD"],
    "ad_type": "mid-roll",
    "cursor_position": 420,
    "total_length": 600,
    "bitrate": 128,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 120,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val settingVideoEvent = TCVideoSettingEvent(ETCVideoSettingMode.video_speed, "YOUR_VIDEO_SESSION_ID")
settingVideoEvent.contentAssetID = "456"
settingVideoEvent.imageQuality = "720"
serverSide.execute(settingVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoSettingEvent settingVideoEvent = new TCVideoSettingEvent(ETCVideoSettingMode.video_speed, "YOUR_VIDEO_SESSION_ID");
settingVideoEvent.contentAssetID = "456";
settingVideoEvent.imageQuality = "720";
serverSide.execute(settingVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoSettingEvent *settingVideoEvent = [[TCVideoSettingEvent alloc] initWithMode: video_speed andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    settingVideoEvent.contentAssetID = @"456";
    settingVideoEvent.imageQuality =  @"720";
    [serverside execute: settingVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let settingVideoEvent = TCVideoSettingEvent(mode: video_speed, andSessionId: "YOUR_VIDEO_SESSION_ID")
    settingVideoEvent?.contentAssetID = "456"
    settingVideoEvent?.imageQuality = "720"
    serverSide?.execute(settingVideoEvent)
```

{% endtab %}
{% endtabs %}

### Sous-titres vidéo activés

Cet événement est envoyé lorsque l'utilisateur active les sous-titres du lecteur vidéo.

Un exemple d’événement est présenté ci-dessous :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_subtitle_on",
    "user": {},
    "video_session_id": "98765",
    "content_asset_id": ["0133370", "123456"],
    "content_pod_id": ["CAA", "CAB", "CAD"],
    "ad_asset_id": ["ad1", "ad0", "ad2"],
    "ad_pod_id": ["adCAA", "adCAB", "adCAD"],
    "ad_type": "pre-roll",
    "cursor_position": 420,
    "total_length": 600,
    "bitrate": 128,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 120,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val settingVideoEvent = TCVideoSettingEvent(ETCVideoSettingMode.video_subtitle_on, "YOUR_VIDEO_SESSION_ID")
settingVideoEvent.contentAssetID = "456"
settingVideoEvent.imageQuality = "720"
serverSide.execute(settingVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoSettingEvent settingVideoEvent = new TCVideoSettingEvent(ETCVideoSettingMode.video_subtitle_on, "YOUR_VIDEO_SESSION_ID");
settingVideoEvent.contentAssetID = "456";
settingVideoEvent.imageQuality = "720";
serverSide.execute(settingVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoSettingEvent *settingVideoEvent = [[TCVideoSettingEvent alloc] initWithMode: video_subtitle_on andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    settingVideoEvent.contentAssetID = @"456";
    settingVideoEvent.imageQuality =  @"720";
    [serverside execute: settingVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let settingVideoEvent = TCVideoSettingEvent(mode: video_subtitle_on, andSessionId: "YOUR_VIDEO_SESSION_ID")
    settingVideoEvent?.contentAssetID = "456"
    settingVideoEvent?.imageQuality = "720"
    serverSide?.execute(settingVideoEvent)
```

{% endtab %}
{% endtabs %}

### Sous-titres vidéo désactivés

Cet événement est envoyé lorsque l'utilisateur désactive les sous-titres du lecteur vidéo.

Un exemple d’événement est présenté ci-dessous :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_subtitle_off",
    "user": {},
    "video_session_id": "98765",
    "content_asset_id": ["0133370", "123456"],
    "content_pod_id": ["CAA", "CAB", "CAD"],
    "ad_asset_id": ["ad1", "ad0", "ad2"],
    "ad_pod_id": ["adCAA", "adCAB", "adCAD"],
    "ad_type": "post-roll",
    "cursor_position": 420,
    "total_length": 600,
    "bitrate": 128,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 120,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val settingVideoEvent = TCVideoSettingEvent(ETCVideoSettingMode.video_subtitle_off, "YOUR_VIDEO_SESSION_ID")
settingVideoEvent.contentAssetID = "456"
settingVideoEvent.imageQuality = "720"
serverSide.execute(settingVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```
TCVideoSettingEvent settingVideoEvent = new TCVideoSettingEvent(ETCVideoSettingMode.video_subtitle_off, "YOUR_VIDEO_SESSION_ID");
settingVideoEvent.contentAssetID = "456";
settingVideoEvent.imageQuality = "720";
serverSide.execute(settingVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoSettingEvent *settingVideoEvent = [[TCVideoSettingEvent alloc] initWithMode: video_subtitle_off andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    settingVideoEvent.contentAssetID = @"456";
    settingVideoEvent.imageQuality =  @"720";
    [serverside execute: settingVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let settingVideoEvent = TCVideoSettingEvent(mode: video_subtitle_off, andSessionId: "YOUR_VIDEO_SESSION_ID")
    settingVideoEvent?.contentAssetID = "456"
    settingVideoEvent?.imageQuality = "720"
    serverSide?.execute(settingVideoEvent)
```

{% endtab %}
{% endtabs %}

### Plein écran vidéo activé

Cet événement est envoyé lorsque l'utilisateur active l'affichage en plein écran du lecteur vidéo.

Un exemple d’événement est présenté ci-dessous :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_fullscreen_on",
    "user": {},
    "video_session_id": "98765",
    "content_asset_id": ["0133370", "123456"],
    "content_pod_id": ["CAA", "CAB", "CAD"],
    "ad_asset_id": ["ad1", "ad0", "ad2"],
    "ad_pod_id": ["adCAA", "adCAB", "adCAD"],
    "ad_type": "post-roll",
    "cursor_position": 420,
    "total_length": 600,
    "bitrate": 128,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 120,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val settingVideoEvent = TCVideoSettingEvent(ETCVideoSettingMode.video_fullscreen_on, "YOUR_VIDEO_SESSION_ID")
settingVideoEvent.contentAssetID = "456"
settingVideoEvent.imageQuality = "720"
serverSide.execute(settingVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```
TCVideoSettingEvent settingVideoEvent = new TCVideoSettingEvent(ETCVideoSettingMode.video_fullscreen_on, "YOUR_VIDEO_SESSION_ID");
settingVideoEvent.contentAssetID = "456";
settingVideoEvent.imageQuality = "720";
serverSide.execute(settingVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoSettingEvent *settingVideoEvent = [[TCVideoSettingEvent alloc] initWithMode: video_fullscreen_on andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    settingVideoEvent.contentAssetID = @"456";
    settingVideoEvent.imageQuality =  @"720";
    [serverside execute: settingVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let settingVideoEvent = TCVideoSettingEvent(mode: video_fullscreen_on, andSessionId: "YOUR_VIDEO_SESSION_ID")
    settingVideoEvent?.contentAssetID = "456"
    settingVideoEvent?.imageQuality = "720"
    serverSide?.execute(settingVideoEvent)
```

{% endtab %}
{% endtabs %}

### Plein écran vidéo désactivé

Cet événement est envoyé lorsque l'utilisateur désactive l'affichage en plein écran du lecteur vidéo.

Un exemple d’événement est présenté ci-dessous :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_fullscreen_off",
    "user": {},
    "video_session_id": "98765",
    "content_asset_id": ["0133370", "123456"],
    "content_pod_id": ["CAA", "CAB", "CAD"],
    "ad_asset_id": ["ad1", "ad0", "ad2"],
    "ad_pod_id": ["adCAA", "adCAB", "adCAD"],
    "ad_type": "pre-roll",
    "cursor_position": 420,
    "total_length": 600,
    "bitrate": 128,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 120,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val settingVideoEvent = TCVideoSettingEvent(ETCVideoSettingMode.video_fullscreen_off, "YOUR_VIDEO_SESSION_ID")
settingVideoEvent.contentAssetID = "456"
settingVideoEvent.imageQuality = "720"
serverSide.execute(settingVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoSettingEvent settingVideoEvent = new TCVideoSettingEvent(ETCVideoSettingMode.video_fullscreen_off, "YOUR_VIDEO_SESSION_ID");
settingVideoEvent.contentAssetID = "456";
settingVideoEvent.imageQuality = "720";
serverSide.execute(settingVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```
    TCVideoSettingEvent *settingVideoEvent = [[TCVideoSettingEvent alloc] initWithMode: video_fullscreen_off andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    settingVideoEvent.contentAssetID = @"456";
    settingVideoEvent.imageQuality =  @"720";
    [serverside execute: settingVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let settingVideoEvent = TCVideoSettingEvent(mode: video_fullscreen_on, andSessionId: "YOUR_VIDEO_SESSION_ID")
    settingVideoEvent?.contentAssetID = "456"
    settingVideoEvent?.imageQuality = "720"
    serverSide?.execute(settingVideoEvent)
```

{% endtab %}
{% endtabs %}

### Qualité vidéo

Cet événement est envoyé lorsque la qualité vidéo du lecteur vidéo est modifiée.

Un exemple d’événement est présenté ci-dessous :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_quality",
    "user": {},
    "video_session_id": "98765",
    "content_asset_id": ["0133370", "123456"],
    "content_pod_id": ["CAA", "CAB", "CAD"],
    "ad_asset_id": ["ad1", "ad0", "ad2"],
    "ad_pod_id": ["adCAA", "adCAB", "adCAD"],
    "ad_type": "mid-roll", 
    "cursor_position": 420,
    "total_length": 600,
    "bitrate": 128,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 120,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val settingVideoEvent = TCVideoSettingEvent(ETCVideoSettingMode.video_quality, "YOUR_VIDEO_SESSION_ID")
settingVideoEvent.contentAssetID = "456"
settingVideoEvent.imageQuality = "720"
serverSide.execute(settingVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoSettingEvent settingVideoEvent = new TCVideoSettingEvent(ETCVideoSettingMode.video_quality, "YOUR_VIDEO_SESSION_ID");
settingVideoEvent.contentAssetID = "456";
settingVideoEvent.imageQuality = "720";
serverSide.execute(settingVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoSettingEvent *settingVideoEvent = [[TCVideoSettingEvent alloc] initWithMode: video_quality andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    settingVideoEvent.contentAssetID = @"456";
    settingVideoEvent.imageQuality =  @"720";
    [serverside execute: settingVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let settingVideoEvent = TCVideoSettingEvent(mode: video_quality, andSessionId: "YOUR_VIDEO_SESSION_ID")
    settingVideoEvent?.contentAssetID = "456"
    settingVideoEvent?.imageQuality = "720"
    serverSide?.execute(settingVideoEvent)
```

{% endtab %}
{% endtabs %}

### Partage de la vidéo

Cet événement est envoyé lorsque la vidéo est partagée par l'utilisateur.

Un exemple d’événement est présenté ci-dessous :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
{
    "event_name": "video_share",
    "user": {},
    "video_session_id": "98765",
    "content_asset_id": ["0133370", "123456"],
    "content_pod_id": ["CAA", "CAB", "CAD"],
    "cursor_position": 420,
    "total_length": 600,
    "bitrate": 128,
    "framerate": 60.00,
    "video_player": "vimeo",
    "sound": 120,
    "full_screen": false,
    "ad_enabled": false,
    "image_quality": "hd720",
    "livestream": true
}
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val settingVideoEvent = TCVideoSettingEvent(ETCVideoSettingMode.video_share, "YOUR_VIDEO_SESSION_ID")
settingVideoEvent.contentAssetID = "456"
settingVideoEvent.imageQuality = "720"
serverSide.execute(settingVideoEvent)
```

{% endtab %}

{% tab title="Java (Android)" %}

```java
TCVideoSettingEvent settingVideoEvent = new TCVideoSettingEvent(ETCVideoSettingMode.video_share, "YOUR_VIDEO_SESSION_ID");
settingVideoEvent.contentAssetID = "456";
settingVideoEvent.imageQuality = "720";
serverSide.execute(settingVideoEvent);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
    TCVideoSettingEvent *settingVideoEvent = [[TCVideoSettingEvent alloc] initWithMode: video_share andSessionId: @"YOUR_VIDEO_SESSION_ID"];
    settingVideoEvent.contentAssetID = @"456";
    settingVideoEvent.imageQuality =  @"720";
    [serverside execute: settingVideoEvent];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let settingVideoEvent = TCVideoSettingEvent(mode: video_share, andSessionId: "YOUR_VIDEO_SESSION_ID")
    settingVideoEvent?.contentAssetID = "456"
    settingVideoEvent?.imageQuality = "720"
    serverSide?.execute(settingVideoEvent)
```

{% endtab %}
{% endtabs %}

## Reprise de la lecture

Chaque `Lecture vidéo reprise` l'événement doit être suivi d'un événement `Lecture du contenu vidéo` ou d'un `Lecture de la publicité vidéo` événement, selon l'asset auquel la lecture reprend.

## Qualité vidéo

Commanders Act vous permet également de suivre et d'analyser les performances et la qualité de votre contenu vidéo pendant la lecture.

Chaque fois qu'un utilisateur modifie la qualité vidéo pendant la lecture, vous pouvez suivre un événement Video Quality Updated avec les propriétés suivantes :

* `bitrate`: Indique le débit binaire mis à jour en `kbps`.
* `framerate`: Indique la fréquence d'images mise à jour en `fps`.
* `startupTime`: Indique le moment où la qualité vidéo a été modifiée par l'utilisateur.
* `droppedFrames`: Indique si des images ont été perdues lors du changement de qualité vidéo.

## Cycle de vie des événements

Le flux d'événements suivant montre comment vous pouvez implémenter la spécification vidéo de Commanders Act :

#### 1. L'utilisateur appuie sur lecture dans un lecteur vidéo

```javascript
cact("trigger","video_start", {
  video_session_id: "12345",
  content_asset_id: ["123"],
  content_pod_id: ["BAA"],
  ad_asset_id: ["ad1"],
  ad_pod_id: ["adCAA"],
  ad_type: "mid-roll",
  cursor_position: 0,
  total_length: 300,
  bitrate: 128,
  video_player: "youtube",
  sound: 67,
  full_screen: true,
  ad_enabled: false,
  image_quality: "hd1080",
});
```

#### 2. La lecture vidéo commence à jouer le contenu

```javascript
cact("trigger","video_content_start", {
  video_session_id: "12345",
  content_asset_id: "123",
  content_pod_id: "CAA",
  video_title: "Raw is War!!",
  video_description: "Sample description",
  keywords: ["wrestling", "entertainment"],
  season: "1",
  episode: "90",
  video_category: "divertissement",
  program: "WWE",
  publisher: "WWE",
  cursor_position: 0,
  total_length: 300,
  channel: "ten",
  full_episode: true,
  livestream: false,
  airdate: "2020-04-23",
});
```

#### 3. L'utilisateur regarde le contenu pendant 10 secondes, suivi d'un heartbeat de 10 secondes

```javascript
cact("trigger","video_content_playing", {
  video_session_id: "12345",
  content_asset_id: "123",
  content_pod_id: "CAA",
  video_title: "Raw is War!!",
  video_description: "Sample description",
  keywords: ["wrestling", "entertainment"],
  season: "1",
  episode: "90",
  video_category: "divertissement",
  program: "WWE",
  publisher: "WWE",
  cursor_position: 10,
  total_length: 300,
  channel: "ten",
  full_episode: true,
  livestream: false,
  airdate: "2020-04-23",
})
```

#### 4. La lecture vidéo est mise en pause

```javascript
cact("trigger","video_pause", {
  video_session_id: "12345",
  content_asset_id: "123",
  content_pod_id: "CAA",
  ad_asset_id: null,
  ad_pod_id: null,
  ad_type: null,
  cursor_position: 11,
  total_length: 300,
  video_player: "youtube",
  sound: 66,
  bitrate: 128,
  full_screen: true,
  ad_enabled: false,
  image_quality: "hd1080",
});
```

#### 5. L'utilisateur reprend la lecture vidéo.

```javascript
cact("trigger","video_resume", {
  video_session_id: "12345",
  content_asset_id: "123",
  content_pod_id: "CAA",
  ad_asset_id: null,
  ad_pod_id: null,
  ad_type: null,
  cursor_position: 11,
  total_length: 300,
  video_player: "youtube",
  sound: 66,
  bitrate: 128,
  full_screen: true,
  ad_enabled: false,
  image_quality: "hd1080",
});
```

#### 6. La publicité (mid-roll) commence à être lue après que l'utilisateur reprend la lecture

```javascript
cact("trigger","video_ad_start", {
  video_session_id: "12345",
  ad_asset_id: "ad1",
  ad_pod_id: "adCAA",
  ad_type: "mid-roll",
  video_title: "Thums Up",
  publisher: "Coca Cola",
  cursor_position: 0,
  total_length: 15,
  load_type: "linear",
});
```

#### 7. L'utilisateur regarde l'intégralité de la publicité de 15 secondes. Commanders Act suit également les heartbeats de 10 secondes.

```javascript
cact("trigger","video_ad_playing", {
  video_session_id: "12345",
  ad_asset_id: "ad1",
  ad_pod_id: "adCAA",
  ad_type: "mid-roll",
  video_title: "Thums Up",
  publisher: "Coca Cola",
  cursor_position: 10,
  total_length: 15,
  load_type: "linear",
});
```

#### 8. La publicité vidéo est lue entièrement.

```javascript
cact("trigger","video_ad_complete", {
  video_session_id: "12345",
  ad_asset_id: "ad1",
  ad_pod_id: "adCAA",
  ad_type: "mid-roll",
  video_title: "Thums Up",
  publisher: "Coca Cola",
  cursor_position: 15,
  total_length: 15,
  load_type: "linear",
})
```

#### 9. Le contenu vidéo reprend sa lecture. Les heartbeats sont envoyés toutes les 10 secondes.

```javascript
cact("trigger","video_content_playing", {
  video_session_id: "12345",
  content_asset_id: "123",
  content_pod_id: "CAA",
  video_title: "Raw is War!!",
  video_description: "Sample description",
  keywords: ["wrestling", "entertainment"],
  season: "1",
  episode: "90",
  video_category: "divertissement",
  program: "WWE",
  publisher: "WWE",
  cursor_position: 11,
  total_length: 300,
  channel: "ten",
  full_episode: true,
  livestream: false,
  airdate: "2020-04-23",
})
```

#### 10. L'utilisateur termine de regarder l'ensemble du contenu vidéo.

```javascript
cact("trigger","video_content_complete", {
  video_session_id: "12345",
  content_asset_id: "123",
  content_pod_id: "CAA",
  video_title: "Raw is War!!",
  video_description: "Sample description",
  keywords: ["wrestling", "entertainment"],
  season: "1",
  episode: "90",
  video_category: "divertissement",
  program: "WWE",
  publisher: "WWE",
  cursor_position: 300,
  total_length: 300,
  channel: "ten",
  full_episode: true,
  livestream: false,
  airdate: "2020-04-23",
})
```

#### 11. La lecture de la vidéo se termine.

```javascript
cact("trigger","video_complete", {
  video_session_id: "12345",
  content_asset_id: null,
  content_pod_id: null,
  ad_asset_id: "ad1",
  ad_pod_id: "adCAA",
  ad_type: null,
  cursor_position: 300,
  total_length: 300,
  sound: 66,
  bitrate: 128,
  full_screen: true,
  video_player: "youtube",
  ad_enabled: false,
  image_quality: "hd1080",
})
```

## FAQ

#### Que sont les publicités pre-roll, mid-roll et post-roll ?

* Les publicités qui apparaissent avant le début de la lecture vidéo sont appelées publicités pre-roll.
* Les publicités qui apparaissent au milieu de la lecture sont appelées publicités mid-roll.
* Les publicités qui apparaissent après la lecture vidéo sont appelées publicités post-roll.

Ces publicités peuvent être une vidéo promotionnelle des sponsors ou un contenu proposé par le fournisseur de contenu.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://doc.commandersact.com/fr/developpeurs/tracking-and-integrations/tracking/events-reference/video-event-reference.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
