Giter VIP home page Giter VIP logo

cf-ffmpeg-transcode's Introduction

什么时候我来转码?

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

cf-ffmpeg-transcode's People

Contributors

makewheels avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.