像各云盘一样,视频网站如何做到在线不同清晰度切换?

我看到对于视频网站 切换不同清晰度的解决方案都是弄多个源文件,比如480、720、1080。

但是-----------
我们用百度网盘、阿里网盘、迅雷的云盘,都可以在线播放并且切换不同的清晰度,我们在往云盘空间添加视频的时候,他不可能顺便给你转码多份,然后存起来吧?人家何必浪费这个空间?
尤其是迅雷的云盘,我们把视频添加到云盘以后,直接点击就能原画播放,也可以不同清晰度播放。

那么像这种云盘他们是怎么做到不同清晰度切换的?

我自己尝试用 FFmpeg 写了一份实时转换的接口,可是当转换的时候,CPU 使用率飙涨,如果各个云盘厂商使用的是这种解决方案,恐怕几十几百个用户在线播放视频,处理器使用率就居高不下了,望大佬指教。

附我写的代码,语言是 Node.JS,当用户点击进度条,就会把点击的位置,算出时分秒,叫做startTime 字段传给该接口,然后 FFmpeg 从 startTime 转码到视频结尾,比如用户点击了视频的1分30秒处,该视频总时长为10分,那么 startTime 就是0:1:30.000,把 startTime 赋值给seekInput函数,seekInput可以理解为跳过视频开头多久

阅读 2.8k
2 个回答

至少据我所知,阿里云盘应该是在服务器转码了,看下图,它返回了两个分辨率的视频。
image.png

基本上都是在服务器转码分别保存 480, 720, 1080 ....

你要知道硬盘不值钱, 值钱的是流量和CPU


上传一个新视频, 分别在队列中等待被转码成多种码率分辨率的视频. 普通人预览给你看就480, vip就给你原画质 或者高清码率的视频. 极大的减少带宽的消耗, 并且你也能看不是吗

硬盘不值钱, 并且他们对储存也是做过优化的, 网盘这种业务, 大多数视频他上面都有人上传过了的, md5,hash 命中重复的视频资源就给你添加一条数据库记录就可以了. 再把你上传的重复文件删掉

(秒传就是用文件md5之类的标识去已存在的媒体资源中去撞, 撞到了就可以免上传)

推荐问题
宣传栏