从一个文件到一个播放器
它是什么
点播是一个已经做完的文件,谁来要就给谁播 —— 这和正在进行的直播是两回事。你上传文件,我们据此生成套餐允许的每一档画质和一张封面,你拿到一个交给播放器的地址,以及一段可以贴进页面的代码。
它如何运作
文件分片上传,因此中断的上传会从停下的那一片继续,而不是从头再来。最后一片到达后,转码任务排进承载平台其余部分的同一批节点:一次处理生成整套梯度,并切成 6 秒一片。产物存入存储,经 Shield 分发 —— 所以每个分片在每个位置只从存储取一次,之后由该位置应答附近的所有人:在存储这一端,一个观众和一万个观众的成本相同。
画质
梯度从你上传的分辨率开始,向下展开。我们从不向上拉伸:720p 的文件最高就是 720p,选择 4K 也不会凭空造出画面里原本没有的细节。每一档都是一次独立编码,所以一个视频能有几档由套餐决定。播放器在第一个分片时选定一档,并随网络变化在各档之间切换,画面不会因此中断。
各套餐的画质上限
| 套餐 | 最高画质 | 每个视频的档数 |
|---|---|---|
| Free | 720p | 2 |
| Pro | 1080p | 4 |
| Business | 2160p(4K) | 6 |
| Unlimited | 2160p(4K) | 6 |
播放
播放端是一个 HLS 清单,任何支持 HLS 的播放器都能直接用,包括 Safari 与各家移动浏览器内置的那个。我们自己的播放器只需两行代码,额外提供清晰度菜单、画中画,以及观众在觉得不对劲时可以打开的统计面板。私有视频只能通过带签名且会过期的地址访问:可以让控制台替你签,也可以持有播放密钥自己签,这样每位观众都能拿到不同的链接。
通过 API
curl -X POST https://dash.yunzheng.space/api/v1/vod/assets \
-H "Authorization: Bearer $ORBIT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Launch keynote","visibility":"unlisted"}'
# -> {"asset_id":"ovd_...","state":"uploading"}
curl -X POST .../vod/assets/$ID/upload \
-d '{"size":734003200,"content_type":"video/mp4"}'
# -> {"upload_id":"ovu_...","part_size":8388608}
curl -X PUT .../vod/assets/$ID/upload/$UPLOAD/parts/1 --data-binary @part-001
curl -X POST .../vod/assets/$ID/upload/$UPLOAD/complete
https://vod.yunzheng.space/a/$ID/master.m3u8各套餐包含什么
| 套餐 | 视频数 | 存储 | 每月转码时长 | 每月分发流量 |
|---|---|---|---|---|
| Free | 10 | 5 GB | 60 分钟 | 20 GB |
| Pro | 200 | 200 GB | 3,000 分钟 | 1 TB |
| Business | 2,000 | 2 TB | 30,000 分钟 | 10 TB |
| Unlimited | 不计量 | 不计量 | 不计量 | 不计量 |
常见问题
有免费额度吗?
有。每个账号起步就有 10 个视频、5 GB 存储、每月 60 分钟转码与 20 GB 分发流量,画质上限 720p。
转码要多久?
在生成四档画质的套餐上,大致与视频本身的时长相当;档数更多则更久,因为每一档都是一次独立编码。运行期间控制台会显示状态,最后一档完成的那一刻,播放地址就开始应答。
原始文件会保留吗?
会。重新转码就是以它为源,它与由它生成的各档画质一起计入你的存储用量。删除视频时两者一并删除。
能用自己的播放器吗?
可以。那个地址就是标准的 HLS 清单,里面没有任何私有的东西。我们提供播放器是为了省掉你自己写清晰度菜单,而不是因为必须用它。
它和 Stream 有什么区别?
Stream 承载的是正在进行的直播;VOD 提供的是已经做完的文件。两者共用播放器和同一张边缘网络 —— 区别在于:被观看的东西,在有人来要之前是否已经完整存在。
不公开的视频需要密钥吗?
不需要。不公开的含义是地址无法被猜到,拿到地址的人都能观看。需要签名地址的是「私有」,而那个地址会过期。