RUTUBE Embed Kit

Три способа встроить видео RUTUBE на сайт с партнёрской разметкой dist, anc, tp.

01

Прямой iframe

Готовый HTML-блок без JavaScript. Все параметры (VIDEO_ID, dist, anc, tp) указываются в URL каждого iframe.

Редактор

В WYSIWYG-редакторе CMS в режиме «Источник / HTML» вставляет 6 строк iframe и подставляет VIDEO_ID.

Разработчик

Не требуется - готовый блок копируется напрямую в контент статьи.

<iframe width="720" height="405"
  src="https://rutube.ru/play/embed/479c58a745de50383649a3a0c7c7f0c5/?dist=shkulevmedia_2&anc=woman.ru&tp=web&autoplay=true&autostartmute=true"
  style="border: none;"
  allow="clipboard-write; autoplay"
  allowFullScreen></iframe>

Живой пример

Параметры: VIDEO_ID - 32-hex ID из URL RUTUBE Studio. dist - партнёрский код от менеджера RUTUBE. anc - домен сайта. tp - устройство (web / app / tv).

Готовый инструмент для сборки iframe-кода: Склейщик эмбед-кода.html ⬇ (скачайте и откройте локально в браузере).

Brand safety: отключение рекламы

Параметр &referer=embed.noads в URL src iframe (в любом месте после ?, обычно после tp=web):

<iframe ... src="https://rutube.ru/play/embed/VIDEO_ID/?dist=...&anc=...&tp=web&referer=embed.noads&autoplay=true&autostartmute=true"></iframe>
При смене партнёрского кода

Если dist изменится (переименование, ребрендинг), потребуется обновить каждый iframe вручную. В Способе 01 dist меняется в одном месте (window.RUTUBE_DIST).

02

CMS inline (Sticky-обёртка с inline-скриптом) или по URL

Для конструкторов сайтов и WYSIWYG-редакторов где нельзя подключить внешний JS-файл (Tilda, шаблонные CMS без доступа к layout). Содержимое Sticky-wrapper'а встраивается в HTML страницы как один <script> блок, iframe оборачивается в обёртку через CSS-классы video-sticky-wrapper.

Редактор

Вставляет в WYSIWYG 2 блока HTML из склейщика (Sticky-обёртка с iframe) + один раз на страницу <script> с inline-содержимым.

Разработчик

Не нужен - всё генерирует склейщик эмбед-кода (скачивается и открывается локально) в режиме Inline или URL.

Один раз на страницу:

<script data-wrapper-class="video-sticky">
!function(){const t=document.currentScript,e=t?.getAttribute("data-wrapper-class")?.trim();...
   /* минифицированный код rutube-video-wrapper.min.js целиком (~5 KB) */
}();
</script>

На каждое видео:

<div class="video-sticky-wrapper
            video-sticky-align-bottom-right
            video-sticky-behaviour-maybe">
  <iframe width="720" height="405"
    src="https://rutube.ru/play/embed/VIDEO_ID/?dist=…&anc=…&tp=web&autoplay=true&autostartmute=true"
    style="border: none;" allow="clipboard-write; autoplay" allowFullScreen></iframe>
</div>

Готовый код собирает склейщик эмбед-кода (скачайте и откройте локально) - в настройке площадки выберите «Способ подключения скрипта Sticky-обёртки: Inline или URL».

URL vs Inline режим

URL-режим - скрипт rutube-video-wrapper.min.js лежит на вашем сервере, в HTML страницы только тег <script src="…">. Чисто, легко обновлять. Не подходит для Tilda и подобных конструкторов.

Inline-режим - содержимое скрипта (~5 KB) встраивается в каждую HTML страницу. Работает везде где есть HTML-вставка. Минус: обновление wrapper'а требует пересохранения каждой страницы.

Что такое Sticky-обёртка

Когда плеер уходит из видимой области страницы (при скролле), он закрепляется в углу экрана и продолжает воспроизведение. С крестиком для закрытия. Позиции: bottom-right, bottom-left, top-right, top-left. Поведение: maybe (при прокрутке), always (всегда закреплён), never (без sticky).

03

JS-сниппет

Подключаете один JS-файл и в шаблоне статьи указываете <div data-rutube="...">. Скрипт находит контейнеры и заменяет их на <iframe> с подставленными партнёрскими параметрами.

Редактор в CMS

В поле «Ссылка на видео RUTUBE» вставляет URL из RUTUBE Studio (https://rutube.ru/video/...) и сохраняет статью.

Разработчик однократно

Подключает 2 строки в layout и в шаблоне статьи указывает <div data-rutube="{{article.video_url}}"></div>.

<!-- В layout/footer сайта (один раз): -->
<script>window.RUTUBE_DIST = 'shkulevmedia_2';</script>
<script src="https://egor-yudin.ru/kit/rutube-embed-builder.min.js" defer></script>

<!-- В шаблоне статьи (один раз): -->
<div data-rutube="{{ article.video_url }}"></div>

<!-- {{ article.video_url }} - значение поля из CMS:
     - URL из RUTUBE Studio: https://rutube.ru/video/479c.../
     - или 32-hex ID: 479c58a745de50383649a3a0c7c7f0c5
     Скрипт распарсит и то, и другое. -->

Живой пример

Как это работает

В layout / footer сайта (разработчик однократно):

<script>window.RUTUBE_DIST = 'shkulevmedia_2';</script>
<script src="https://egor-yudin.ru/kit/rutube-embed.js" defer></script>

Скрипт находит на странице все элементы с атрибутом data-rutube и заменяет их на <iframe> RUTUBE-плеера. dist / anc / tp подставляются автоматически из window.RUTUBE_DIST, window.location.hostname и значения "web" по умолчанию.

В шаблоне статьи (разработчик однократно):

<div data-rutube="{{ article.video_url }}"></div>

В шаблоне Twig / Blade / Jinja / React переменная {{article.video_url}} подставится значением из CMS-поля. Редактор HTML не пишет.

Brand safety: отключение рекламы

В шаблоне добавьте атрибут data-no-ads="true" (можно подключить к чекбоксу «Чувствительный контент» в CMS):

<div data-rutube="{{article.video_url}}" data-no-ads="true"></div>

Скрипт видит data-no-ads и добавляет &referer=embed.noads в URL итогового iframe:

<iframe src="https://rutube.ru/play/embed/.../?dist=...&anc=...&tp=web&referer=embed.noads&autoplay=true..."></iframe>
Sticky-плеер при скролле
<div data-rutube="..."
     data-sticky="true"
     data-sticky-position="bottom-right"></div>

Когда плеер уходит из видимости при скролле, он закрепляется в углу экрана и продолжает воспроизведение. С крестиком для закрытия. Позиции: bottom-right (по умолчанию), bottom-left, top-right, top-left.

Self-hosted

Скачайте rutube-embed-builder.min.js и положите на свой статический хостинг:

<script src="/static/rutube-embed-builder.min.js" defer></script>

Скрипт не требует внешних зависимостей. Единственные внешние запросы при работе - сам плеер RUTUBE.

Все доступные data-атрибуты
data-rutube="URL_или_32hex_ID"      ссылка из RUTUBE Studio или 32-hex ID
data-width / data-height            размеры iframe (default: 720x405)
data-autoplay="false"               отключить автозапуск
data-mute="false"                   стартовать со звуком
data-no-ads="true"                  brand safety: referer=embed.noads
data-sticky="true"                  sticky-плеер при скролле
data-sticky-position="..."          bottom-right | bottom-left | top-right | top-left
data-sticky-width / -height         размер sticky-плеера (default: 320x180)
data-dist / data-anc                переопределить глобальные RUTUBE_DIST / ANC
Примеры для популярных CMS
04

Загрузка через RUTUBE API

Реализация по официальной документации RUTUBE API. CMS загружает видеофайл на RUTUBE, получает callback с video_id и сохраняет связку article_id ↔ video_id в своей БД.

Редактор в CMS

Загружает video.mp4 через обычный аплоадер админки, сохраняет статью. На странице плеер появляется после конвертации видео на стороне RUTUBE.

Разработчик однократно

Получает API-токен RUTUBE, реализует endpoint загрузки и callback-обработчик. Готовые примеры на Python / PHP / Node.js / Go - ниже.

Pipeline

1. Редактор создаёт статью с article_id=12345 и загружает video.mp42. CMS → POST https://rutube.ru/api/video/ (url + callback_url + extra={"article_id":"12345"}) ↓ 3. RUTUBE возвращает video_id, конвертирует видео в фоне ↓ 4. RUTUBE → POST https://woman.ru/rutube/callback (id + session.extra.article_id) ↓ 5. CMS сохраняет в БД связку article_id ↔ video_id6. При рендере статьи CMS вставляет <div data-rutube="479c..."></div>

Запрос на загрузку

POST https://rutube.ru/api/video/
Headers: Authorization: Token <RUTUBE_TOKEN>
Body (form-urlencoded):
  url=https://woman.ru/uploads/video.mp4
  callback_url=https://woman.ru/rutube/callback
  errback_url=https://woman.ru/rutube/error
  title=Заголовок видео
  extra={"article_id":"12345"}

Ответ:
{"video_id": "479c58a745de50383649a3a0c7c7f0c5"}

Callback от RUTUBE после конвертации

POST https://woman.ru/rutube/callback
{
  "id": "479c58a745de50383649a3a0c7c7f0c5",
  "title": "...",
  "html": "<iframe ...>",
  "embed_url": "...",
  "session": {"extra": {"article_id":"12345"}}
}
Готовые примеры реализации
Безопасность callback endpoint

RUTUBE не подписывает callback. Защитите endpoint одним из способов: секретом в URL (?secret=...), whitelist IP-адресов RUTUBE, проверкой что extra.article_id существует в вашей БД. Подробнее в README.

Сравнение

Технические характеристики всех четырёх способов.

01 · Прямой iframe02 · CMS inline03 · JS-сниппет04 · API
Подключение в layoutНе требуетсяНе требуется (всё в HTML страницы)2 строки (один раз)Токен RUTUBE + callback endpoint
В шаблоне статьи / на странице6 строк <iframe>Sticky-обёртка с iframe + inline-script (один раз)1 строка <div data-rutube>1 строка <div data-rutube>
Действие редактораВставить HTML iframe в WYSIWYGВставить блоки из склейщика в WYSIWYGВставить URL видео в поле CMSЗагрузить файл в админке
Backend-разработкаНе требуетсяНе требуетсяНе требуетсяUpload + callback endpoint
Brand safety (no ads)&referer=embed.noads в URL&referer=embed.noads в URL iframe (чекбокс в склейщике)data-no-ads="true"data-no-ads="true" в шаблоне
Sticky-плеерНе поддерживаетсяВстроенный (это его суть)data-sticky="true"data-sticky="true" в шаблоне
Работает без JSДаТолько iframe без stickyНетЗависит от способа отображения
Смена партнёрского distВ каждом iframe вручнуюВ каждом iframe вручнуюВ одном месте (RUTUBE_DIST)В одном месте (RUTUBE_DIST)

Документация и материалы

Официальные документы RUTUBE и файлы Embed Kit.

Установка эмбед-плеера кодом

Официальная инструкция RUTUBE: rutube.ru/info/embed/

Необходимо разметить эмбеды уникальными параметрами площадки:

dist=ПАРТНЕР&anc=площадка&tp=устройство, где:

Важно

Если разметка будет отсутствовать, статистика засчитываться не будет.

Пример кода:

<iframe width="720" height="405" src="https://rutube.ru/play/embed/479c58a745de50383649a3a0c7c7f0c5/?dist=shkulevmedia_2&anc=woman.ru&autostartmute=true&autoplay=true" style="border: none;" allow="clipboard-write; autoplay" allowFullScreen></iframe>

Документы

Embed Kit - инструменты

Файл Что делает
Склейщик эмбед-кода.html WYSIWYG-склейщик. Скачайте файл и откройте локально в браузере. Настройка площадки (один раз) → URL видео RUTUBE → готовый код для вставки. Опционально оборачивает в Sticky-обёртку (always/при прокрутке/выкл). Подключение скрипта - URL или Inline (для Tilda).
rutube-video-wrapper.min.js Sticky-обёртка RUTUBE. Применяет sticky-эффект к готовому iframe внутри <div class="video-sticky-wrapper video-sticky-align-* video-sticky-behaviour-*">. Активируется атрибутом data-wrapper-class="video-sticky" на самом script-теге.
rutube-embed-builder.min.js Auto-embed builder. Партнёр пишет <div data-rutube="URL_или_ID"> - скрипт сам создаёт iframe с подстановкой dist/anc/tp. Опции: data-no-ads, data-sticky, data-width/height.
README Embed Kit Документация по rutube-embed-builder (data-rutube API).
API workflow - документация Pipeline загрузки видео через RUTUBE API + callback (для редакций с автозагрузкой через CMS).