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

# Événements vidéo

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

Cette documentation détaille les conventions et les bonnes pratiques pour l'envoi d'événements lors du suivi des vidéos. Le document clarifie la structure et la classification de ces événements, qui se répartissent en quatre catégories : `Lecture`, `Contenu`, `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 des 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 ultérieurs générés à partir de cette session sont liés au même session\_id.

Si une page Web comporte deux lecteurs vidéo, il y aura deux sessions distinctes et les session\_id associés. En revanche, si deux vidéos différentes 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 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'actif 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>actif de 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'actif de contenu de la vidéo / des vidéos en cours de lecture ou</p><p>sur le point d'être lues.</p><p>Pour <code>Lecture vidéo commencée</code> Pour les événements</p><p>une liste d'ID d'actif uniques doit être envoyée. Pour les autres</p><p>événements de lecture, un ID d'actif de contenu unique 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 de contenu de la vidéo / des vidéos en cours de lecture ou</p><p>sur le point d'être lues.</p><p>Pour <code>Lecture vidéo commencée</code> Pour les événements</p><p>une liste d'ID de pod uniques doit être envoyée. Pour les autres</p><p>événements de lecture, un ID de pod de contenu unique associé au pod de contenu actuel au 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'actif publicitaire de la vidéo / des vidéos en cours de lecture ou</p><p>sur le point d'être lues.</p><p>Pour <code>Lecture vidéo commencée</code> Pour les événements</p><p>une liste d'ID d'actif publicitaires uniques doit être envoyée. Pour les autres</p><p>événements de lecture, un ID d'actif publicitaire unique 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 publicitaire de la vidéo / des vidéos en cours de lecture ou</p><p>sur le point d'être lues.</p><p>Pour <code>Lecture vidéo commencée</code> Pour les événements</p><p>une liste d'ID de pod publicitaires uniques doit être envoyée. Pour les autres</p><p>événements de lecture, un ID de pod de contenu unique associé au pod publicitaire actuel au 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 du curseur de lecture en secondes. Elle inclut la durée de toutes les publicités déjà vues.<br><br>Non requis dans <code>video_buffer_start</code> et <code>video_buffer_complete</code> les événements<br><br>Si la lecture est un livestream, reportez-vous à la documentation de la destination concernée pour connaître les étapes permettant de transmettre correctement la position du curseur 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 du curseur de lecture à laquelle le</p><p>l'utilisateur souhaite aller.</p><p>Applicable uniquement sur les <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 en secondes. Inclut la durée totale de l'ensemble du contenu et des publicités inclus dans la session.</p><p>Défini sur</p><p>dans le cas d'une lecture en livestream.</p><p>Défini 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, exprimé en <code>kbps</code></td></tr><tr><td><code>framerate</code></td><td><code>Float</code></td><td>Non</td><td>Indique la fréquence d'images moyenne de la 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</p><p>la 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 silencieux</p><p>et 100 le volume maximal.</p></td></tr><tr><td><code>full_screen</code></td><td><code>Boolean</code></td><td>Non</td><td>Défini sur <code>true</code> si la lecture est en mode plein écran.</td></tr><tr><td><code>ad_enabled</code></td><td><code>Boolean</code></td><td>Non</td><td><p>Défini sur <code>false</code> si l'utilisateur utilise des bloqueurs de publicité.</p><p><br>Si l'utilisateur peut voir vos publicités vidéo, la 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>Lecture vidéo interrompue</code> événements,<br>vous pouvez envoyer cette propriété indiquant comment la</p><p>lecture a été interrompue.</p><p>Quelques exemples incluent 'device_lock', 'call' et</p><p>'browser_redirect'.</p></td></tr><tr><td><code>livestream</code></td><td><code>Boolean</code></td><td>Non</td><td>Défini sur <code>true</code> dans le cas où la lecture est un livestream, 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, consultez la **Propriétés des événements de lecture** section.

### Lecture vidéo commencée

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Lecture vidéo en pause

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Lecture vidéo interrompue

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

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

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

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

Cela correspond à l'événement qui se produit lorsque la lecture a terminé de mettre en mémoire tampon le contenu ou une publicité.

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Début du seek de la lecture vidéo

Cet événement est envoyé lorsqu'un utilisateur se déplace manuellement vers une certaine position du curseur dans le contenu vidéo ou une publicité pendant la lecture. La `cursor_position` propriété indique à partir de quelle position l'utilisateur effectue le seek (temps en secondes) et `seek_position` indique la position du curseur dans la lecture vers laquelle l'utilisateur souhaite aller.

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Seek de lecture vidéo terminé

Cet événement est envoyé après qu'un utilisateur a effectué manuellement un seek vers une certaine position du curseur de la vidéo ou de 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é :

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

### Reprise de la lecture vidéo

Cet événement est envoyé après que l'utilisateur reprend la lecture vidéo après sa mise en pause.

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Lecture vidéo terminée

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

{% 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 **pod** désigne une partie / un groupe / un segment du contenu vidéo ou de la publicité au sein de 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 déroulement 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 du déroulement se produisent au cours d'une seule lecture vidéo.

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

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

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

<table><thead><tr><th width="226">Propriété</th><th width="116.33333333333331">Type</th><th width="101">Obligatoire</th><th>Description</th></tr></thead><tbody><tr><td><code>video_session_id</code></td><td><code>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 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'actif 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'actif 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 à</p><p>la 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'actif 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 de l'émission / du programme 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>actif de contenu vidéo.</p></td></tr><tr><td><code>digital</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>Boolean</code></td><td>Non</td><td>Défini sur <code>true</code> l'actif de contenu vidéo correspond à un épisode complet.</td></tr><tr><td><code>livestream</code></td><td>Boolean</td><td>Non</td><td><p>Si le contenu vidéo est 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 du curseur 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 de la destination concernée pour savoir comment 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 pas les publicités comprises</p><p>dans la lecture de cet actif de contenu.</p><p>Pour la 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, consultez la [**Propriétés des événements de contenu**](#content-events-properties) section.

### Début du contenu vidéo

Cet événement est envoyé une fois que l'utilisateur commence à lire un segment de contenu vidéo au sein d'une lecture.

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

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

```javascript
{
    "event_name": "video_content_start",
    "video_session_id": "98765",
    "content_asset_id": "456",
    "content_pod_id": "XYZ",
    "program": "The Lion King",
    "video_title": "Act 1",
    "video_description": "Invented description",
    "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", "savannah", "circle of life"],
    "user": {}
}
```

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Lecture du contenu vidéo

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

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

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

```javascript
{
    "event_name": "video_content_playing",
    "video_session_id": "56789",
    "content_asset_id": "789",
    "content_pod_id": "ABC",
    "program": "The Jungle Book",
    "video_title": "Act 2",
    "video_description": "Invented description",
    "season": "2",
    "cursor_position": 123,
    "total_length": 400,
    "video_category": "Aventure",
    "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 %}

### Quart du contenu vidéo atteint

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

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

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

```javascript
{
    "event_name": "video_content_quarter_reached",
    "video_session_id": "56789",
    "content_asset_id": "789",
    "content_pod_id": "ABC",
    "program": "The Jungle Book",
    "video_title": "Act 2",
    "video_description": "Invented description",
    "season": "2",
    "cursor_position": 123,
    "total_length": 400,
    "video_category": "Aventure",
    "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 %}

### Contenu vidéo terminé

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

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

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

```javascript
{
    "event_name": "video_content_complete",
    "video_session_id": "01234",
    "content_asset_id": "111",
    "content_pod_id": "DEF",
    "program": "Tarzan",
    "video_title": "Finale",
    "video_description": "Invented description",
    "season": "4",
    "cursor_position": 300,
    "total_length": 300,
    "video_category": "Aventure",
    "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 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 annonces 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 les mêmes pour tous les utilisateurs.<br><br>Les valeurs peuvent être soit '<code>dynamic</code>' ou ' <code>linear</code> '.</p></td></tr><tr><td><code>ad_quartile</code></td><td><code>Entier</code></td><td>Non</td><td><p>Pour les <code>Publicité vidéo en cours de lecture</code> événement, cette propriété</p><p>peut être utilisée pour indiquer quand un quartile publicitaire spécifique</p><p>est atteint.</p><p>Si vous utilisez une bibliothèque client-side pour suivre vos</p><p>événements vidéo, cette propriété est facultative, car Commanders Act</p><p>suit automatiquement les quartiles publicitaires.</p></td></tr></tbody></table>

## Événements publicitaires

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

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

### Début de la publicité vidéo

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Publicité vidéo en cours de lecture

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Publicité vidéo terminée

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

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

```javascript
{
  "event_name": "video_ad_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 %}

### Ignorer la publicité vidéo

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 de la coupure publicitaire vidéo

Cet événement est envoyé lorsqu'une coupure publicitaire commence à être diffusée pendant la lecture vidéo.

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Coupure publicitaire vidéo terminée

Cet événement est envoyé après que l'utilisateur a visionné l'ensemble du pod de coupure 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 paramètres

Tous les événements de paramètres 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 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'actif 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'actif 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 à</p><p>la 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'actif 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 de l'émission / du programme 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>actif de contenu vidéo.</p></td></tr><tr><td><code>digital</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>Boolean</code></td><td>Non</td><td>Défini sur <code>true</code> l'actif de contenu vidéo correspond à un épisode complet.</td></tr><tr><td><code>livestream</code></td><td><code>Boolean</code></td><td>Non</td><td><p>Si le contenu vidéo est 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 du curseur 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 de la destination concernée pour savoir comment 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 pas les publicités comprises</p><p>dans la lecture de cet actif de contenu.</p><p>Pour la 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> événement</p></td></tr><tr><td><code>full_screen</code></td><td><code>Boolean</code></td><td><strong>Oui</strong></td><td>Indique le mode d'affichage actuel de la vidéo.<br>Requis dans <code>video_fullscreen_on</code> et <code>video_full_screen_off</code> événements</td></tr><tr><td><code>ad_enabled</code></td><td><code>Boolean</code></td><td>Non</td><td>Indique si les 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 de qualité vidéo actuelle.<br>Requis dans <code>video_quality</code> événement</td></tr></tbody></table>

## Reprise de la lecture

## Événements de paramètres

Cette section détaille tous les événements de paramètres vidéo.

Pour plus d'informations sur chacune des propriétés associées à ces événements, consultez la [**Propriétés des événements de paramètres**](#video-settings-properties) section.

### Volume vidéo

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Vitesse vidéo

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

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

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

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

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Plein écran vidéo activé

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

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

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Qualité vidéo

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

### Partage de la vidéo

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

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

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}

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

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

{% endtab %}
{% endtabs %}

## Reprise de la lecture

Chaque `Reprise de la lecture vidéo` l'événement doit être suivi d'un événement `Lecture du contenu vidéo` ou d'un `Publicité vidéo en cours de lecture` événement, selon l'asset sur 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 binaire mis à jour en `kbps`.
* `framerate`: Indique la fréquence d'images mise à jour en `fps`.
* `startupTime`: Indique le moment où l'utilisateur a modifié la qualité vidéo.
* `droppedFrames`: Indique si des images ont été perdues lors du changement de qualité vidéo.

## Cycle de vie des événements

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

#### 1. L'utilisateur lance la 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: "Description d'exemple",
  keywords: ["wrestling", "divertissement"],
  season: "1",
  episode: "90",
  video_category: "divertissement",
  program: "WWE",
  publisher: "WWE",
  cursor_position: 0,
  total_length: 300,
  channel: "ten",
  full_episode: true,
  livestream: false,
  airdate: "2020-04-23",
});
```

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

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

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

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

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

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

#### 6. La publicité (mid-roll) commence à être diffusée 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 la publicité de 15 secondes dans son intégralité. 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 diffusée dans son intégralité.

```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: "Description d'exemple",
  keywords: ["wrestling", "divertissement"],
  season: "1",
  episode: "90",
  video_category: "divertissement",
  program: "WWE",
  publisher: "WWE",
  cursor_position: 11,
  total_length: 300,
  channel: "ten",
  full_episode: true,
  livestream: false,
  airdate: "2020-04-23",
})
```

#### 10. L'utilisateur termine de regarder l'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: "Description d'exemple",
  keywords: ["wrestling", "divertissement"],
  season: "1",
  episode: "90",
  video_category: "divertissement",
  program: "WWE",
  publisher: "WWE",
  cursor_position: 300,
  total_length: 300,
  channel: "ten",
  full_episode: true,
  livestream: false,
  airdate: "2020-04-23",
})
```

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

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

## FAQ

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

* Les publicités qui apparaissent avant le début de la lecture de la 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 de la vidéo sont appelées publicités post-roll.

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


---

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

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

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

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

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

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

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