前言
在开发一个上传点播系统时,自己第一次接触到了阿里云的 OSS 对象存储服务和媒体处理服务,在这个过程中,我学到了很多相关的经验和知识。
正文
其实,这个上传点播系统是项目中的用户需求的一部分,我们在讨论和设计方案的时候,前后权衡了两种具体的实现方案。接下来详细介绍一下。
第一种方案,全权委托阿里云
这种方案,我们自己的开发工作工作量最少,我们只需要开发一个云存储和多媒体处理的网关服务,把前端页面上传的视频文件和音频文件上传到阿里云的对象存储服务,然后,再调用阿里云的媒体处理服务接口,完成对应媒体文件的转码任务。最后,拿到目标文件地址,返回给播放器满足用户播放需求。方案实现示意图如下:
虽然该方案的开发工作量少是优势,但是也引出了另外一个问题,那就成本也比较高。为什么这么说呢,我们根据具体的业务场景分析一下其中的原因。首先,考虑到并发转码的费用较高(这是第一个现实问题),因此,用户上传的大量视频文件不可能完成实时转码,并生成目标文件。这样造成的结果就是我们需要保存原始文件一段时间,尽管用户没有下载需求,我们也不能立即删除它们,这就导致了一定量多余存储费用的产生(这是第二个现实问题)。所以,这套方案的成本分布情况是并发转码占大头,原始文件存储占少部分,剩下的是点播费用。
基于第一种方案的上述问题,我们讨论出了第二套实现方案。
第二种方案,半委托阿里云。
这种方案,我们自己的开发工作量稍微会增加一些(其实是很多,哈哈)我们需要自己开发一个多媒体转码服务,将上传的音频文件和视频文件统一转码成 m3u8 文件,同时保证音频编码格式是 aac,视频编码格式是 h264,然后再把 m3u8 和 ts 分片文件上传到阿里云的对象存储服务 OSS,然后把上传文件的存储地址返回给播放器满足用户的播放需求。方案实现示意图如下:
可以看得出来,这种方案减少了调用阿里云多媒体处理的接口,节省了多媒体处理相关的费用(这一点非常符合公司降本增效的企业文化),解决了方案一中的第一个问题。另外,我们不需要把原始媒体文件上传到 OSS 云存储,而是在本地完成转码,把最终的目标文件上传到 OSS 云存储,这样就解决了方案一中的第二个问题。
结论
综上所述,我们选择了第二种方案,半委托方式。在这个过程中我们体验了阿里云的对象存储服务能力和多媒体处理能力,就是多媒体处理费用稍微有些高,但是这也无可厚非,毕竟这样的定价在市面上也算中规中矩。了解音视频的小伙伴都知道,多媒体转码会消耗大量的服务器CPU资源,费用高也是可以理解的。