1,不改码率,暂定小于12000kbps。否则直接扔给阿里云接口
2,codec是mp4支持的其中一个:264,265,vp9,av1
特别是264,在不改码率,不改分辨率的情况下,1分钟一个
1,当用户上传文件完成时,video-2022通过ffprobe云函数 获取视频信息,判断,如果需要我用云函数来转码: 调起master,传入inputKey和转码参数。 master可能需要使用性能模式的云函数。
云函数master下载对象存储文件,分别抽取音频视频,保存到nas
因为对象存储只有简单的上传下载操作, 所以用aws S3 sdk,为了迁移云厂商兼容性
2,对视频分片,也是保存到nas。启动多个线程,并发启动worker, completable future同步等待worker返回结果。
调起worker时,给参数:inputPath,outputPath,转码参数。
等到所有worker都完成时,合并分片,视频文件就绪。
合并视频音频文件,转码完成,生成final.mp4
根据条件判断是否需要再转HLS,如果不需要, 直接把final.mp4上传对象存储。 如果需要HLS,master转HLS,上传文件到对象存储。
删除本次mission所有nas文件
1,转码参数,怎么判断,怎么传,怎么解耦,怎么盲处理?
2,maser性能如何,启动多个worker,靠多线程
或者靠阿里云的异步任务,这我不想用啊,不想被绑架, 云函数不了解
答:这个解决了,经过我的测试,可以瞬间启动100个容器
3,再者,还是云函数调用的问题,worker运行结束,返回结果, master能收到,是吧。 这个任务调度,如果用springboot里面的东西,就简单了, 但是现在要解耦,最后是全用云函数做到底。
答:不用,就纯云函数,应该可以,代码正在写。外部调master 是http异步。master调用worker是http同步等待结果汇总到主线程
4,java启动慢,其实应该用python,这次就继续用java了, 但实际上没差别,因为最终是调用ffmpeg
还有worker性能如何,虽然可能我只给他16秒视频, 但是它能在一分钟内转完16秒吗?
答:这个得具体测试,不同视频不一样, 如果要改codec肯定耗性能。实测一分钟能改完
5,音频转码,是不是也要分片?那时长,有另外的设置吧。 相当于有视频worker集群,还有音频worker集群, 只不过audio集群更少
如果都能完成,分片时长,这个参数有讲究, 要找成本和速度的平衡点。甚至可能是,不同视频,有不同时长分割
6,同一时间启动100个worker一起读写nas,nas性能如何? 要不要先一次性复制nas文件到云函数虚拟机本地,在本地转完, 再复制到nas。关键这个nas,还没有观测性能的东西。 其实啊,比如是16秒一片,其实我不是为了16秒一片自己看, 我是为了给ffmpeg转码,如果ffmpeg有随机值切分就好了, 稍微随机一些,可以让worker不在同一时间读写nas, 这就好比Redis雪崩面试题
答:实测nas并发拷贝,速度会有影响,但是是70ms和150ms的区别, 终究可以忽略。启动会一起启动,结束每个碎片结束时间不一样, 自然就没有雪崩问题了
7.2022年4月19日14:40:48 容器虚拟化网络速度瓶颈
我万万没想到,容器的虚拟化,的网络, 会导致下载上传对象存储变慢,那这个也没什么太好的办法。 只能是我从代码角度优化:
一来是,下载的时候,多线程并发
二来是,hls转碎片的时候,同步上传,这需要再开一个线程扫描 destFolder