sequenceDiagram
up主->>+后端: 获取上传凭证
后端-->>后端: 向阿里云STS请求AssumeRole
后端->>up主: 返回STS凭证
up主->>阿里云OSS: 直传对象存储
up主->>后端: 通知上传完成
后端->>-阿里云OSS: 获取源视频文件信息
阿里云OSS->>后端: 返回源视频文件信息
后端-->>+后端: 通过云函数 / 阿里云MPS转码视频
后端->>阿里云OSS: 获取转码m3u8和ts文件信息
阿里云OSS->>后端: 返回转码文件信息
后端->>-后端: 解析HLS保存数据库
观众->>后端: 获取HLS播放信息
后端->>观众: 返回 ts地址 301重定向到OSS
观众->>阿里云OSS: 前端播放器直接从OSS下载ts
观众->>观众: 前端播放器播放
转码
谁转?
有三种方式
如果码率很低,直接用ffmpeg,也就是云函数,这样最快
其次可以用阿里云的视频转码接口
最快的方式是GPU的云函数
回调
云函数,和阿里云接口,都有回调,我都有统一回调处理
冗余加速
播放
自适应码率
接入了Apple的自适应码率,之前用户的痛点是,1080加载慢,720加载快但是不清楚
交给自适应自动切换,当然要写接口,这把之前获取播放地址逻辑都改了
cdn?
预热,我试过,慢。cdn没有缓存不如直接访问对象存储了,那现在就是直接访问的
统计
heartbeat保存当前进度,下次打开的时候,再调接口获取上次离开的时的进度,设置到播放器
前端
目前还是用的最原始的HTML,不会vue,以后有机会可以改造一下,前端确实很重要,用户只能看到前端。
后端我还想接入RocketMQ呢
小程序
小程序可以用在微信上分享,现在接入了小程序,上传页面有小程序码可以分享
安卓
又单独做了App可以上传
加签种类:
- 用户请求后端
- 后端应用内部调用
- 开放第三方接口
后端应用内部调用,比如云函数回调
urlEncode(base64(HmacSHA256(
url中的参数,去掉sign字段,按字母排序 + "\n"
body + "\n" )))
public static String hmac(String key, String data) {
HMac hMac = SecureUtil.hmacSha256(key);
return hMac.digestBase64(data, true);
}
FROM centos:7
RUN yum install -y java-11-openjdk python3 python3-pip ffmpeg clang gcc
RUN python3 --version
RUN pip3 install -i https://mirrors.aliyun.com/pypi/simple/ yt-dlp
docker build -t video-2022-youtube-base-image:1.0 .
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
docker rmi --force $(docker images -q)
登录香港仓库
sudo docker login [email protected] registry.cn-hongkong.aliyuncs.com
打标签 tag
docker tag video-2022-youtube-base-image:1.0 registry.cn-hongkong.aliyuncs.com/b4/video-2022-youtube-base-image:1.0
推送
docker push registry.cn-hongkong.aliyuncs.com/b4/video-2022-youtube-base-image:1.0