dodocast开发者播放器 SDK

播放器 SDK用于你的网站和服务器。

@dodocast/player 把 dodocast 播放器放到你的页面上,生成 HLS 直链,读取 24/7 频道正在播放和即将播放的内容,并在你的后端为私密视频链接签名。零依赖,自带 TypeScript 类型,MIT 许可证。

# 安装 npm install @dodocast/player
import { mount } from '@dodocast/player' mount('#player', { kind: 'video', code: 'abc123XYZ0', start: 90 })
功能

四项任务,都是普通函数。

任务函数适用于
链接与嵌入watchUrl()、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+
嵌入

与控制台相同的嵌入代码。

embedHtml() 返回控制台 “Embed” 按钮给出的代码;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 秒轮询一次状态;没有推送通道。
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.js、Safari 和电视提供 HLS 直链。

streamUrl() 生成清单 URL。公开内容可以直接播放;其他内容在你于服务器上为链接签名之前都会返回 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) }
签名链接

由你的后端决定谁能观看。

在控制台的 Settings → Signing keys 中创建密钥。你的服务器为一条视频、播放列表、直播或频道签发令牌,其余交给播放器。

  • 头部 { 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:无法对嵌入的播放器调用播放、暂停或跳转,也无法监听它的事件。集成方式就是 iframe;开始时间和播放列表条目写在 URL 中。
  • 没有上传或管理 API:请在控制台中上传和整理视频。
  • 不支持 DASH,也没有 DRM。加密方式为 HLS AES-128 或 SAMPLE-AES。
  • 不接收摄像机或编码器的实时信号:直播和频道播出的是已上传的视频。
不需要构建步骤也能用吗?

可以。它是纯 ES 模块:在打包工具中从 npm 导入,或在 script 标签中从 ESM CDN 导入。

需要哪个套餐?

所有套餐都支持嵌入和频道数据。HLS 直链和签名链接适用于 Pro 和 Business 套餐。

链接指向哪里?

默认指向 watch.dodocast.com 和 stream.dodocast.com。内测期间,请通过 hosts 选项传入分配给你的主机地址。

是开源的吗?

是的,MIT 许可证。欢迎在 GitHub 上提交 issue 和 pull request。

即将上线

离你的频道,只差一次上传。

我们正在向早期合作伙伴开放 dodocast:媒体、教育、活动、企业内部电视。告诉我们你想播出什么。

或发送邮件至 hello@dodocast.com

dodocast 控制台目前仅提供英文和俄文界面。