我们目前做直播录播的时候,有一些视频文件服务商直接存在 cdn 上面,形如
http://www.example.com/replay/20220101-001/replay.m3u8
这个直播的回放视频,里面带的 slice 是相对路径
0001.ts
0002.ts
实际的存放地址在
http://www.example.com/replay/20220101-001/0001.ts
http://www.example.com/replay/20220101-001/0002.ts
总之,我需要获取 m3u8+ts ,做后期的剪裁拼接。
现在专门有一台机器做存储,部署了 minio
那么如何把远程的文件下载到 minio 里面?
现有方案:
在 minio 的服务器启动了一个下载服务 aria2 ,通过接口奖数据直接灌到对应的文件夹,用 minio 检查数据是不是 ready
-
优点:
- 之前没有 minio 的时候就是这么搞的,aria2 有不错的多线程下载速度以及重试策略,可以当一个黑盒子
- 数据从外网到内网传输一次直接落盘
-
缺点:
- 依赖 aria2 一个额外的服务
- 指定 aria2 的下载目录有一个额外的 mapping ,需要在业务代码中指定物理目录
- 对于 aria2 无法监控
- 需要后置检查:是不是真的落盘到具体目录了
改进方案:
不再依赖 aria2 ,业务机器直接下载文件内容之后,putObject 到 minio
-
优点:
- 去除依赖
- 结果进度可控,put 成功即可认为存储
- 存储和获取同构,外部路径都可以直接从 minio 直接出
-
缺点
- 业务侧需要执行下载操作,可靠性不如 aria2
- 数据需要在内网再传输一次
想问下各位大佬有啥好的解决方案吗?
我觉得我的核心需求是,希望 minio/s3 的 api 支持一个 putObject from url 但是如果这个不支持,就得我自己手动实现了。