dodocastРазработчикамPlayer SDK

Player SDKдля вашего сайта и сервера.

@dodocast/player встраивает плеер dodocast на ваши страницы, собирает прямые HLS-ссылки, читает, что идёт в канале 24/7 сейчас и что дальше, и подписывает ссылки на закрытое видео на вашем бэкенде. Без зависимостей, с типами TypeScript, лицензия MIT.

# install npm install @dodocast/player
import { mount } from '@dodocast/player' mount('#player', { kind: 'video', code: 'abc123XYZ0', start: 90 })
Что умеет

Четыре задачи — простые функции.

ЗадачаФункцииДля чего
Ссылки и embedwatchUrl(), embedUrl(), embedHtml(), mount() — адаптивный или фиксированный размер, время начала, видео в плейлисте, секрет приватной ссылкивидео, плейлисты, трансляции, каналы 24/7
Прямые HLS-ссылкиstreamUrl() — fMP4/CMAF, MPEG-TS, byte-range для видеовидео, трансляции, каналы 24/7; Pro и Business
Данные каналаgetChannelState() (сейчас и далее), getChannelGuide() (до двух недель), progress()опубликованные каналы 24/7
Подписанные ссылкиsignToken(), signedStreamUrl(), signedPlaylistItemUrl() из @dodocast/player/server — JWT, HS256, до 24 чваш собственный контент; Node.js 18+
Встраивание

Тот же embed, что в консоли.

embedHtml() возвращает ту же разметку, что кнопка «Встроить» в консоли; mount() вставляет её в элемент на вашей странице.

  • Адаптивный по умолчанию, с любым соотношением сторон — aspect: [9, 16] для вертикального видео.
  • Запуск видео с нужной секунды — start, плейлист на нужном видео — item.
  • Где можно показывать плеер, задаётся у видео в консоли: везде, нигде или на списке до 50 доменов.
import { embedHtml } from '@dodocast/player' embedHtml({ kind: 'playlist', code: 'PL0aB1cD2e', item: 'abc123XYZ0' }) // <div style="position:relative;padding-top:56.25%"> // <iframe src="https://watch.dodocast.com/embed/pl/…"> embedHtml({ kind: 'channel', code: 'CHxYz12345', mode: 'fixed', width: 960, height: 540 })
Каналы 24/7

Виджет «Сейчас в эфире» в несколько строк.

Каждый опубликованный канал отдаёт своё состояние и программу передач в открытом JSON. SDK читает и то и другое и считает прогресс по часам сервера.

  • getChannelState(): в эфире канал или нет, текущее и следующее видео, текущая и следующая передача из сетки.
  • getChannelGuide(): по умолчанию ближайшие 24 часа, любой интервал до двух недель — через from и to.
  • Запрашивайте состояние раз в 10–30 секунд: push-уведомлений нет.
import { getChannelState, getChannelGuide, progress } from '@dodocast/player' const state = await getChannelState('CHxYz12345') if (state.state === 'ON') { const item = state.currentItem show(item?.title, progress(state, item)) showNext(state.nextItem?.title) } const guide = await getChannelGuide('CHxYz12345') // [{ title, startsAtMs, endsAtMs, poster, … }]
Свой плеер

Прямой HLS для hls.js, Safari и телевизоров.

streamUrl() собирает адрес манифеста. Открытый контент играет по нему напрямую, остальной отвечает 403, пока вы не подпишете ссылку на своём сервере.

  • Видео: манифесты fMP4/CMAF, MPEG-TS и byte-range. Трансляции и каналы: fMP4/CMAF и MPEG-TS.
  • Шифрованный контент играет в стандартных HLS-плеерах: URI ключа указан в манифесте.
  • Удержание и досмотры измеряет плеер dodocast; просмотры в вашем плеере учитываются как трафик.
import Hls from 'hls.js' import { streamUrl } from '@dodocast/player' const src = streamUrl({ kind: 'video', code: 'abc123XYZ0' }) const video = document.querySelector('video') if (video.canPlayType('application/vnd.apple.mpegurl')) { video.src = src } else { const hls = new Hls() hls.loadSource(src) hls.attachMedia(video) }
Подписанные ссылки

Кто смотрит, решает ваш бэкенд.

Создайте ключ в консоли: «Настройки» → «Ключи подписи». Ваш сервер выдаёт токен на одно видео, плейлист, трансляцию или канал, остальное сделает плеер.

  • Заголовок { alg: HS256, kid }, тело { code, iat, exp }, срок жизни — до 24 часов.
  • Секрет используется как строка — ровно в том виде, в каком его показывает консоль. Никогда не отдавайте его в браузер.
  • Примеры на Python, PHP и Kotlin — в руководстве по подписанным ссылкам.
import { signedStreamUrl } from '@dodocast/player/server' const key = { id: process.env.DODOCAST_KEY_ID, secret: process.env.DODOCAST_KEY_SECRET } const url = signedStreamUrl(key, { kind: 'video', code: 'abc123XYZ0', ttl: 1800 }) // https://stream.dodocast.com/s/<jwt>/hls/mp4/…
Пока нет

Чего SDK не умеет.

Чтобы вы учли это с самого начала.

  • Нет API управления воспроизведением: у встроенного плеера нельзя вызвать play, pause или seek и нельзя слушать его события. Интеграция — это iframe; время начала и видео в плейлисте передаются в URL.
  • Нет API загрузки и управления: загружайте и раскладывайте видео в консоли.
  • Нет DASH и DRM. Шифрование — HLS AES-128 или SAMPLE-AES.
  • Нет живого сигнала с камеры или энкодера: трансляции и каналы выпускают в эфир загруженные видео.
Работает ли без сборки?

Да. Это обычные ES-модули: импортируйте пакет из npm в своём сборщике или с ESM CDN в теге script.

Какой тариф нужен?

Embed и данные канала работают на всех тарифах. Прямые HLS-ссылки и подписанные ссылки — на Pro и Business.

Куда ведут ссылки?

По умолчанию — на watch.dodocast.com и stream.dodocast.com. На время раннего доступа передайте выданные вам хосты в опции hosts.

Это открытый код?

Да, MIT. Issues и pull requests на GitHub приветствуются.

Скоро запуск

До вашего канала — одна загрузка.

Мы открываем dodocast для первых партнёров: медиа, образование, события, корпоративное ТВ. Расскажите, что хотите выпустить в эфир.

или напишите на hello@dodocast.com