Три способа встроить видео RUTUBE на сайт с партнёрской разметкой dist, anc, tp.
Готовый 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 ⬇ (скачайте и откройте локально в браузере).
Параметр &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).
Для конструкторов сайтов и 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-режим - скрипт rutube-video-wrapper.min.js лежит на вашем сервере, в HTML страницы только тег <script src="…">. Чисто, легко обновлять. Не подходит для Tilda и подобных конструкторов.
Inline-режим - содержимое скрипта (~5 KB) встраивается в каждую HTML страницу. Работает везде где есть HTML-вставка. Минус: обновление wrapper'а требует пересохранения каждой страницы.
Когда плеер уходит из видимой области страницы (при скролле), он закрепляется в углу экрана и продолжает воспроизведение. С крестиком для закрытия. Позиции: bottom-right, bottom-left, top-right, top-left. Поведение: maybe (при прокрутке), always (всегда закреплён), never (без sticky).
Подключаете один JS-файл и в шаблоне статьи указываете <div data-rutube="...">. Скрипт находит контейнеры и заменяет их на <iframe> с подставленными партнёрскими параметрами.
В поле «Ссылка на видео 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
Скрипт распарсит и то, и другое. -->
<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 не пишет.
В шаблоне добавьте атрибут 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>
<div data-rutube="..."
data-sticky="true"
data-sticky-position="bottom-right"></div>
Когда плеер уходит из видимости при скролле, он закрепляется в углу экрана и продолжает воспроизведение. С крестиком для закрытия. Позиции: bottom-right (по умолчанию), bottom-left, top-right, top-left.
Скачайте rutube-embed-builder.min.js и положите на свой статический хостинг:
<script src="/static/rutube-embed-builder.min.js" defer></script>
Скрипт не требует внешних зависимостей. Единственные внешние запросы при работе - сам плеер RUTUBE.
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
Реализация по официальной документации RUTUBE API. CMS загружает видеофайл на RUTUBE, получает callback с video_id и сохраняет связку article_id ↔ video_id в своей БД.
Загружает video.mp4 через обычный аплоадер админки, сохраняет статью. На странице плеер появляется после конвертации видео на стороне RUTUBE.
Получает API-токен RUTUBE, реализует endpoint загрузки и callback-обработчик. Готовые примеры на Python / PHP / Node.js / Go - ниже.
article_id=12345 и загружает video.mp4
↓
2. 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_id
↓
6. При рендере статьи 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"}
POST https://woman.ru/rutube/callback
{
"id": "479c58a745de50383649a3a0c7c7f0c5",
"title": "...",
"html": "<iframe ...>",
"embed_url": "...",
"session": {"extra": {"article_id":"12345"}}
}
RUTUBE не подписывает callback. Защитите endpoint одним из способов: секретом в URL (?secret=...), whitelist IP-адресов RUTUBE, проверкой что extra.article_id существует в вашей БД. Подробнее в README.
Технические характеристики всех четырёх способов.
| 01 · Прямой iframe | 02 · CMS inline | 03 · 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=устройство, где:
dist - наименование партнёра, например dist=shkulevmedia_2anc - домен, например anc=woman.rutp - устройство (варианты web / app / tv)Если разметка будет отсутствовать, статистика засчитываться не будет.
<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>
| Файл | Что делает |
|---|---|
| Склейщик эмбед-кода.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). |