---
id: video-streaming
title: Видеотрансляции в Sport Line API
description: Описание получения признака и ссылки на доступную видеотрансляцию спортивного матча через Sport Line API.
version: v1
language: ru
---

# Видеотрансляции в Sport Line API


## Что предоставляет Sport Line API

Sport Line API показывает, доступна ли видеотрансляция для конкретного Live-матча, и
возвращает её идентификатор.

Для этого используются два поля:

| Поле | Тип | Назначение |
|---|---|---|
| `va` | number или `null` | Признак наличия видеотрансляции: `1` — трансляция есть, `null` — трансляции нет |
| `vi` | string или `null` | ID видеотрансляции Live-матча |

Значение `va: 0` не используется.

## Ограничение по покрытию

SportAPI не транслирует матчи топовых спортивных лиг. Видеотрансляции предоставляются
только для части других доступных соревнований.

Не следует обещать наличие видео для конкретного турнира, страны, вида спорта или
Live-матча заранее. Доступность определяется отдельно для каждого матча по значениям
`va` и `vi` в актуальном ответе спортивной линии.

Название метода `topmatches` также не означает, что SportAPI транслирует топовые лиги:
это название отдельной выборки матчей внутри API, а не характеристика уровня турнира.

## Когда доступна видеотрансляция

В проверенных ответах доступная трансляция имеет одновременно:

```json
{
  "va": 1,
  "vi": "20064614"
}
```

Если трансляции нет, поля возвращаются так:

```json
{
  "va": null,
  "vi": null
}
```

Клиентская логика должна проверять оба поля:

| `va` | `vi` | Действие |
|---|---|---|
| `1` | непустая строка | Трансляция обозначена как доступная; можно передать `vi` в подключённый компонент видео |
| `null` | `null` | Не показывать кнопку или блок видеотрансляции |
| любое другое сочетание | любое | Не запускать видео автоматически; считать ответ несогласованным и обновить данные |

Наличие `vi` не нужно сохранять как постоянное свойство матча. Проверяйте доступность по
актуальному Live-ответу.

## Формат `vi`

`vi` является строковым идентификатором, а не числом и не готовым URL.

В реальных ответах встречались разные форматы:

```json
{
  "vi": "20064614"
}
```

```json
{
  "vi": "DR_3_1783061985"
}
```

Даже если строка содержит только цифры, не преобразовывайте её в числовой тип.
Сохраняйте и передавайте `vi` точно в том виде, в котором он получен от Sport Line API.

`vi` не является готовым адресом `iframe` или видеопотока. Это ID, который передаётся в
готовый виджет видеотрансляции.

## Готовый видеовиджет и `iframe`

Видеотрансляция встраивается на сайт как отдельный готовый виджет через `iframe`.
Клиенту не нужно самостоятельно получать поток или разрабатывать видеоплеер.

```text
Sport Line API → va и vi → готовый видеовиджет → iframe на сайте клиента
```

Поле `vi` передаётся виджету как ID выбранной трансляции. Само значение `vi` нельзя
использовать как полный `src` для `iframe`: адрес виджета и остальные параметры
подключения задаются отдельной инструкцией сервиса видеотрансляций.

Этот документ описывает только связь видеовиджета со Sport Line API. Полная инструкция
по встраиванию видео через `iframe` будет оформлена отдельно.

## Где возвращаются поля видео

Поля `va` и `vi` находятся внутри объекта матча. Их можно получить вместе с Live-матчем,
например в:

- [`events`](../api-reference/events.md) — список Live-матчей;
- [`event`](../api-reference/event.md) — конкретный Live-матч;
- `topmatches` — поля присутствуют как в сокращённой, так и в расширенной карточке
  Live-матча.

В Prematch видеотрансляция ещё не предоставляется. Поля могут технически присутствовать
со значением `null`, но это не означает наличие видео.

## Пример в списке Live-матчей

```json
{
  "game_id": 746049368,
  "sport_id": 1,
  "tournament_name": "Чемпионат России. Молодежное первенство. Дивизион А",
  "opp_1_name": "Акрон-Академия Коноплева (мол)",
  "opp_2_name": "Зенит (мол)",
  "va": 1,
  "vi": "20064614"
}
```

Поля `game_id` и `vi` имеют разное назначение:

- `game_id` используется для запроса данных матча через `event`;
- `vi` идентифицирует видеотрансляцию в отдельном видеосервисе.

Не подставляйте `game_id` вместо `vi`.

## Отображение в интерфейсе

Рекомендуемая логика карточки Live-матча:

1. Проверьте `va` и `vi`.
2. Если `va: 1` и `vi` заполнен, покажите кнопку или блок «Смотреть трансляцию».
3. При `va: null` или `vi: null` не показывайте недоступный видеоплеер.
4. После обновления матча повторно проверьте оба поля.
5. Если трансляция исчезла из ответа, отключите кнопку и не продолжайте использовать
   сохранённый `vi`.

Sport Line API не определяет внешний вид видеоплеера. Видео отображает отдельный готовый
виджет, встроенный через `iframe`.

## Что важно учитывать

- Видео доступно только для Live-матчей.
- Трансляции есть не у каждого Live-матча.
- Матчи топовых лиг SportAPI не транслирует.
- `va` может иметь только значение `1` или `null`.
- `vi` всегда нужно обрабатывать как строку или `null`.
- `vi` является ID, а не URL видеопотока.
- Доступность нужно проверять после каждого обновления объекта матча.

## Практические правила интеграции

1. Показывайте видео только при `va: 1` и заполненном `vi`.
2. Передавайте `vi` без преобразования и изменения.
3. Не используйте `game_id` или другие поля вместо `vi`.
4. Не обещайте видео для конкретной лиги или матча до проверки Live-ответа.
5. При исчезновении `vi` прекращайте показывать трансляцию как доступную.
6. Используйте готовый видеовиджет, встроенный через `iframe`.

## Связанные документы

- [Модель данных: матч](../data-models/match.md)
- [`events` — список матчей](../api-reference/events.md)
- [`event` — конкретный матч](../api-reference/event.md)
- [Единый справочник полей](../data-models/field-reference.md)
