dodocastDesarrolladoresPlayer SDK

Player SDKpara tu sitio y tu servidor.

@dodocast/player pone el reproductor de dodocast en tus páginas, crea enlaces HLS directos, lee lo que un canal 24/7 emite ahora y a continuación, y firma enlaces a vídeo privado en tu backend. Sin dependencias, con tipos de TypeScript incluidos y licencia MIT.

# instalación npm install @dodocast/player
import { mount } from '@dodocast/player' mount('#player', { kind: 'video', code: 'abc123XYZ0', start: 90 })
Qué hace

Cuatro tareas, funciones simples.

TareaFuncionesFunciona con
Enlaces y embedswatchUrl(), embedUrl(), embedHtml(), mount() — tamaño adaptable o fijo, hora de inicio, ítem de la lista, secreto del enlace privadovídeos, listas de reproducción, emisiones, canales 24/7
Enlaces HLS directosstreamUrl() — fMP4/CMAF, MPEG-TS, byte-range para vídeosvídeos, emisiones, canales 24/7; Pro y Business
Datos del canalgetChannelState() (ahora y a continuación), getChannelGuide() (hasta dos semanas), progress()canales 24/7 publicados
Enlaces firmadossignToken(), signedStreamUrl(), signedPlaylistItemUrl() de @dodocast/player/server — JWT, HS256, hasta 24 htu propio contenido; Node.js 18+
Embed

El mismo embed que en la consola.

embedHtml() devuelve el marcado del botón «Embed» de la consola; mount() lo coloca en un elemento de tu página.

  • Adaptable por defecto, con cualquier relación de aspecto: aspect: [9, 16] para vídeo vertical.
  • Empieza un vídeo en un segundo concreto con start y abre una lista en un ítem con item.
  • Dónde puede aparecer el reproductor se define por vídeo en la consola: en todas partes, en ninguna o en hasta 50 dominios.
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 })
Canales 24/7

Un widget de «ahora al aire» en pocas líneas.

Cada canal publicado sirve su estado y su guía de programación en JSON abierto. El SDK lee ambos y te da un valor de progreso basado en el reloj del servidor.

  • getChannelState(): al aire o no, el ítem actual y el siguiente, el programa con horario actual y el siguiente.
  • getChannelGuide(): las próximas 24 horas por defecto, o cualquier ventana de hasta dos semanas con from y to.
  • Consulta el estado cada 10–30 segundos; no hay canal de notificaciones 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, … }]
Tu propio reproductor

HLS directo para hls.js, Safari y televisores.

streamUrl() construye la URL del manifiesto. El contenido público se reproduce directamente desde ella; cualquier otro responde 403 hasta que firmes el enlace en tu servidor.

  • Vídeos: manifiestos fMP4/CMAF, MPEG-TS y byte-range. Emisiones y canales: fMP4/CMAF y MPEG-TS.
  • El contenido cifrado se reproduce en reproductores HLS estándar: la URI de la clave está en el manifiesto.
  • La retención y la finalización las mide el reproductor de dodocast; las visualizaciones en tu propio reproductor cuentan como tráfico.
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) }
Enlaces firmados

Tu backend decide quién lo ve.

Crea una clave en la consola, en Settings → Signing keys. Tu servidor emite un token para un vídeo, una lista, una emisión o un canal; el reproductor hace el resto.

  • Cabecera { alg: HS256, kid }, payload { code, iat, exp }, vida útil de hasta 24 horas.
  • El secreto se usa como cadena, exactamente como lo muestra la consola. Nunca lo envíes a un navegador.
  • Hay ejemplos en Python, PHP y Kotlin en la guía de enlaces firmados.
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/…
Aún no disponible

Lo que el SDK no hace.

Para que lo tengas en cuenta desde el principio.

  • Sin API de reproducción: no puedes llamar a play, pause ni seek en un reproductor insertado ni escuchar sus eventos. La integración es el iframe; la hora de inicio y el ítem de la lista van en la URL.
  • Sin API de subida ni de gestión: sube y organiza los vídeos en la consola.
  • Sin DASH ni DRM. El cifrado es HLS AES-128 o SAMPLE-AES.
  • Sin entrada de cámara en directo ni de codificador: las emisiones y los canales emiten vídeos subidos.
¿Funciona sin paso de compilación?

Sí. Son módulos ES simples: impórtalo desde npm en tu bundler o desde un CDN de ESM en una etiqueta script.

¿Qué plan necesito?

Los embeds y los datos del canal funcionan en todos los planes. Los enlaces HLS directos y los enlaces firmados están en Pro y Business.

¿A dónde apuntan los enlaces?

A watch.dodocast.com y stream.dodocast.com por defecto. Durante el acceso anticipado, pasa los hosts que te dimos con la opción hosts.

¿Es de código abierto?

Sí, MIT. Los issues y pull requests son bienvenidos en GitHub.

Próximo lanzamiento

Tu canal está a una subida de distancia.

Abrimos dodocast a los primeros socios: media, educación, eventos, TV interna. Cuéntanos qué quieres poner al aire.

o escribe a hello@dodocast.com

La consola de dodocast está disponible por ahora solo en inglés y ruso.