1.综述
社交载体从文字发展到静态图片,现又来到了视频的时代。在视频时代,每个移动端app中的多媒体组件所需要承接的业务也越来越复杂,而且一家公司可能会出多款app,因此一个好的多媒体组件需要有灵活的扩展性以及方便的可移植性。根据这些需求,我们把一个多媒体组件(或者叫音视频组件)拆分成源、渲染组件以及输出几个部分。
2.源(source)
目前移动端可能接受到的视频源有摄像头录制的数据以及从手机存储(包括SD卡)中的文件,未来可能还有AR设备或者其他外接设备所捕捉的数据(纯YY)。因此我们需要一个通用的接口来封装视频的输入源。并且从不同输入员获取到的数据送去渲染(可能还包括一些预处理,如色彩格式转换、图像分析等)的过程有点像生产者-消费者模型,因此我们还需要有一个管理数据缓冲队列的组件来调控整个处理过程。
3.渲染(render)
我们把视频数据的预处理、添加额外特效(诸如动态贴纸、滤镜、美颜等等)统称为渲染,可能与传统的“渲染”定义不太一样,可以认为是一个“加特效”的过程。不同的特效的实现过程不尽相同,因此如何统一管理所有的特效;如何方便的修改、添加、禁止一个特效是“渲染”这个模块需要考虑的。这边还会涉及到与c层的交互,因此渲染模块会是整个视频处理中最复杂也是最核心的模块。
4.输出(sink)
当所有处理完成之后,最后需要做的就是将这个数据通过一定的方式显示出来,或者写入某个文件,或者推流到服务器上,这个工作就交由输出模块来完成。因为“输出”的形式也是多种多样的,因此这边也需要有一个统一的管理以及良好的扩展。
图像处理流程关于渲染的分层
1.上层业务
诸如动态贴纸、滤镜、ar等等特效在不同的项目中有着完全不一样的配置,包括数量、顺序、交互、资源等等,因此这些做为强业务向的配置逻辑需要有独立的管理类去控制。
2.公共业务
虽然在不同项目中配置项各有各的不同,但是绘制的内容基本是可以枚举的,因此动态贴纸、滤镜、ar等这些会被归为公共业务。
3.底层库
对于绘制的基础功能则是一个通用的、抽象的接口,可参考安卓系统GUI系统来设计整个绘制底层框架
应用层与底层的职责分工
网友评论