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 控制台目前仅提供英文和俄文界面。