# É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 relèvent de quatre catégories : `Lecture`, `Contenu`, `Publicités` et `Paramètres vidéo`.

## Lecture

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

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

Si une page web possède deux lecteurs vidéo, il y aura deux sessions distinctes et les session\_ids associés. Cependant, 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>Chaîne</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>Chaîne</code></td><td>Non</td><td>Indique le titre du contenu vidéo.</td></tr><tr><td><code>video_category</code></td><td><code>Chaîne</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>Chaîne</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>Chaîne</code></p><p><code>Array [String]</code></p></td><td><strong>Oui</strong></td><td><p>ID d’asset(s) de contenu de la/les vidéo(s) en cours de lecture ou</p><p>sur le point d’être lue(s).</p><p>Pour <code>Video Playback Started</code> événements, un tableau</p><p>d’ID d’asset uniques doit être envoyé. Pour les autres</p><p>événements de lecture, un ID d’asset de contenu unique<br>au moment de l’événement doit être envoyé.</p></td></tr><tr><td><code>content_pod_id</code></td><td><p><code>Chaîne</code></p><p><code>Array [String]</code></p></td><td>Non</td><td><p>ID de pod(s) de contenu de la/les vidéo(s) en cours de lecture ou</p><p>sur le point d’être lue(s).</p><p>Pour <code>Video Playback Started</code> événements, un tableau</p><p>d’ID de pod uniques doit être envoyé. Pour les autres</p><p>événements de lecture, un ID de pod de contenu unique<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>Chaîne</code></p><p><code>Array [String]</code></p></td><td>Non</td><td><p>ID d’asset(s) publicitaire(s) de la/les vidéo(s) en cours de lecture ou</p><p>sur le point d’être lue(s).</p><p>Pour <code>Video Playback Started</code> événements, un tableau</p><p>d’ID d’asset publicitaire uniques doit être envoyé. Pour les autres</p><p>événements de lecture, un ID d’asset publicitaire unique<br>au moment de l’événement doit être envoyé.</p></td></tr><tr><td><code>ad_pod_id</code></td><td><p><code>Chaîne</code></p><p><code>Array [String]</code></p></td><td>Non</td><td><p>ID de pod(s) publicitaire(s) de la/les vidéo(s) en cours de lecture ou</p><p>sur le point d’être lue(s).</p><p>Pour <code>Video Playback Started</code> événements, un tableau</p><p>d’ID de pod publicitaire uniques doit être envoyé. Pour les autres</p><p>événements de lecture, un ID de pod de contenu unique<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>Chaîne</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>Entier</code></td><td><strong>Oui</strong></td><td>Indique la position d’index actuelle de la tête de lecture<br>en secondes. Elle inclut la durée de toutes les publicités vues.<br><br>Non requis dans les <code>video_buffer_start</code> et <code>video_buffer_complete</code> événements<br><br>Si la lecture est un livestream, reportez-vous à la<br>documentation de la destination concernée pour connaître les étapes<br>permettant de transmettre correctement la position de la tête de lecture.</td></tr><tr><td><code>seek_position</code></td><td><code>Entier</code></td><td>Non</td><td><p>Indique la position d’index de la tête de lecture vers laquelle l’</p><p>utilisateur effectue la recherche.</p><p>Applicable uniquement aux <code>video_seek_start</code> et <code>video_seek_complete</code><br>événements. Sur les <code>video_seek_complete</code> événements,</p><p>le <code>seek_position</code> doit être égal à <code>cursor_position</code>.</p></td></tr><tr><td><code>total_length</code></td><td><code>Entier</code></td><td><strong>Oui</strong></td><td><p>Indique la durée totale de la lecture vidéo</p><p>en secondes. Inclut la durée totale de</p><p>tout le contenu et des publicités inclus dans la session.</p><p>Définir sur <code>null</code> dans le cas d’une lecture en livestream.</p></td></tr><tr><td><code>bitrate</code></td><td><code>Entier</code></td><td>Non</td><td>Débit binaire de la lecture vidéo, indiqué 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>Chaîne</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>Entier</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 mode muet</p><p>et 100 le volume maximal.</p></td></tr><tr><td><code>full_screen</code></td><td><code>Booléen</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>Booléen</code></td><td>Non</td><td><p>Définir sur <code>false</code> si l’utilisateur a des bloqueurs de publicité.</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>Chaîne</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>Chaîne</code></td><td>Non</td><td><p>Pour les <code>Video Playback Interrupted</code> événements,<br>vous pouvez envoyer cette propriété pour indiquer comment la</p><p>lecture a été interrompue.</p><p>Quelques exemples incluent 'device_lock', 'call', et</p><p>'browser_redirect'.</p></td></tr><tr><td><code>livestream</code></td><td><code>Booléen</code></td><td>Non</td><td>Définir sur <code>true</code> si la lecture est un livestream,<br>sinon définir 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 aux **Propriétés des événements de lecture** section.

### Video Playback Started

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 %}

### Video Playback Paused

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

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

{% 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 %}

### Video Playback Interrupted

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

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

{% 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 %}

### Video Playback Buffer Started

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é comme suit :

{% 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 %}

### Video Playback Buffer Completed

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é comme suit :

{% 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 %}

### Video Playback Seek Started

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

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

{% 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 %}

### Video Playback Seek Completed

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

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

{% 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 %}

### Video Playback Resumed

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

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

{% 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 %}

### Video Playback Completed

Cet événement est envoyé une fois la lecture terminée et lorsque la session de pod est achevée. 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é comme suit :

{% 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 **pod** de contenu désigne une partie / un groupe / un segment du contenu vidéo ou de la publicité dans 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 sein 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>Chaîne</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>Chaîne</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>Chaîne</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>Chaîne</code></td><td>Non</td><td>Indique le titre du contenu vidéo.</td></tr><tr><td><code>video_description</code></td><td><code>Chaîne</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>Chaîne</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>Chaîne</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>Chaîne</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>Chaîne</code></td><td>Non</td><td><p>Indique le nom du programme / spectacle dont</p><p>le contenu vidéo fait partie.</p></td></tr><tr><td><code>publisher</code></td><td><code>Chaîne</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>Chaîne</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>Booléen</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>Booléen</td><td>Non</td><td><p>Si le contenu vidéo est un livestream, cette valeur est définie sur</p><p><code>true</code>.</p></td></tr><tr><td><code>airdate</code></td><td><p><code>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>Entier</code></td><td><strong>Oui</strong></td><td><p>Indique la position actuelle de la tête de lecture dans le</p><p>contenu vidéo en secondes. Cela n’inclut pas</p><p>les publicités diffusées pendant cette durée.</p><p>Dans le cas des livestreams, reportez-vous à la documentation<br>de la destination concernée pour savoir comment<br>transmettre cette propriété.</p></td></tr><tr><td><code>total_length</code></td><td><code>Entier</code></td><td><strong>Oui</strong></td><td><p>La durée totale du contenu vidéo en</p><p>secondes. Cela n’inclut aucune publicité incluse</p><p>dans la lecture de cet asset de contenu.</p><p>Pour une lecture en livestream, cette valeur doit être définie sur <code>null</code>.</p></td></tr><tr><td><code>bitrate</code></td><td><code>Entier</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 aux [**Propriétés des événements de contenu**](#content-events-properties) section.

### Video Content Started

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

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

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

```javascript
{
    "event_name": "video_content_start",
    "video_session_id": "98765",
    "content_asset_id": "456",
    "content_pod_id": "XYZ",
    "program": "The Lion King",
    "video_title": "Act 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", "cycle 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 %}

### Video Content Playing

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

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

{% 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": "Adventure",
    "publisher": "Disney",
    "full_episode": false,
    "framerate": 60,
    "bitrate": 4500,
    "keywords": ["jungle", "animaux", "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 %}

### Video Content Quarter Reached

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é comme suit :

{% 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": "Adventure",
    "publisher": "Disney",
    "full_episode": false,
    "keywords": ["jungle", "animaux", "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 %}

### Video Content Completed

Cet événement est envoyé une fois que le segment vidéo dans la lecture est terminé. 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é comme suit :

{% 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": "Adventure",
    "publisher": "Disney",
    "full_episode": true,
    "keywords": ["jungle", "singes", "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 %}

## Publicités

## 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 un utilisateur interagit pendant la lecture.

Le tableau suivant répertorie en détail 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>Chaîne</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>Chaîne</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>Chaîne</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>Entier</code></td><td>Non</td><td><p>Indique la position de l’asset publicitaire par rapport</p><p>aux autres publicités du même pod.</p></td></tr><tr><td><code>ad_type</code></td><td><code>Chaîne</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>Entier</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>Chaîne</code></td><td>Non</td><td>Indique le titre de la publicité.</td></tr><tr><td><code>publisher</code></td><td><code>Chaîne</code></td><td>Non</td><td>Indique l’auteur / créateur / éditeur de la publicité.</td></tr><tr><td><code>cursor_position</code></td><td><code>Entier</code></td><td><strong>Oui</strong></td><td><p>La position actuelle de la tête de lecture par rapport à la</p><p>durée totale de la publicité, en secondes.</p></td></tr><tr><td><code>total_length</code></td><td><code>Entier</code></td><td><strong>Oui</strong></td><td>Indique la durée 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 identiques 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>Entier</code></td><td>Non</td><td><p>Pour les <code>Video Ad Playing</code> événement, cette propriété</p><p>peut être utilisée pour indiquer quand un quartile spécifique de publicité</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 de publicité.</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 aux **Propriétés des événements publicitaires** section.

### Video Ad Started

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

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

{% 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 %}

### Video Ad Playing

Cet événement est envoyé à intervalles définis 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é comme suit :

{% 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 %}

### Fin de la publicité vidéo

Cet événement est envoyé après que l'utilisateur a regardé une publicité vidéo en entier. 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 regardé le spot publicitaire vidéo en entier. 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 %}

### Passage de la publicité vidéo ignoré

Cet événement est envoyé lorsque l'utilisateur clique sur le bouton pour ignorer 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 du passage de publicité vidéo

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

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

{% 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 %}

### Passage de publicité vidéo terminé

Cet événement est envoyé après que l'utilisateur a regardé entièrement le bloc de passage 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_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 un 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>Chaîne</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>Chaîne</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>Chaîne</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>Chaîne</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>Chaîne</code></td><td>Non</td><td>Indique l’ID unique du pod publicitaire.</td></tr><tr><td><code>ad_type</code></td><td><code>Chaîne</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>Chaîne</code></td><td>Non</td><td>Indique le titre du contenu vidéo.</td></tr><tr><td><code>video_description</code></td><td><code>Chaîne</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>Chaîne</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>Chaîne</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>Chaîne</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>Chaîne</code></td><td>Non</td><td><p>Indique le nom du programme / spectacle dont</p><p>le contenu vidéo fait partie.</p></td></tr><tr><td><code>publisher</code></td><td><code>Chaîne</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>Chaîne</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>Booléen</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>Booléen</code></td><td>Non</td><td><p>Si le contenu vidéo est un livestream, cette valeur est définie sur</p><p><code>true</code>.</p></td></tr><tr><td><code>airdate</code></td><td><p><code>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>Entier</code></td><td><strong>Oui</strong></td><td><p>Indique la position actuelle de la tête de lecture dans le</p><p>contenu vidéo en secondes. Cela n’inclut pas</p><p>les publicités diffusées pendant cette durée.</p><p>Dans le cas des livestreams, reportez-vous à la documentation<br>de la destination concernée pour savoir comment<br>transmettre cette propriété.</p></td></tr><tr><td><code>total_length</code></td><td><code>Entier</code></td><td><strong>Oui</strong></td><td><p>La durée totale du contenu vidéo en</p><p>secondes. Cela n’inclut aucune publicité incluse</p><p>dans la lecture de cet asset de contenu.</p><p>Pour une lecture en livestream, cette valeur doit être définie sur <code>null</code>.</p></td></tr><tr><td><code>bitrate</code></td><td><code>Entier</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>Entier</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>Booléen</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> des événements</td></tr><tr><td><code>ad_enabled</code></td><td><code>Booléen</code></td><td>Non</td><td>Indique si les publicités étaient activées</td></tr><tr><td><code>image_quality</code></td><td><code>Chaîne</code></td><td><strong>Oui</strong></td><td>Indique la résolution actuelle de la qualité vidéo.<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 aux [**Propriétés des événements de réglage**](#video-settings-properties) section.

### Volume de la 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 %}

### Vidéo plein écran activée

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 %}

### Vidéo plein écran désactivée

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 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 `Video Playback Resumed` l'événement doit être suivi d'un événement `Video Content Playing` ou d'un `Video Ad Playing` événement, selon l'asset vers lequel 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 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 pendant le 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 à diffuser 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: "entertainment",
  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: "entertainment",
  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 de la 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 la reprise de la lecture par l'utilisateur

```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 en entier.

```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. La lecture du contenu vidéo reprend. Des 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: "entertainment",
  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'intégralité 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: "entertainment",
  program: "WWE",
  publisher: "WWE",
  cursor_position: 300,
  total_length: 300,
  channel: "ten",
  full_episode: true,
  livestream: false,
  airdate: "2020-04-23",
})
```

#### 11. La lecture 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

#### Qu'est-ce que 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 des 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: 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:

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

The question should be specific, self-contained, and written in natural language.
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.
