短视频 SDK 架构中主要做的一些事情,这其中最重要的就是短视频 SDK 的架构设计,包括架构设计理念、架构图、整体数据流程、模块架构设计等。今天小编就简单介绍一下短视频APP开发中,选择什么样的厂家,厂家SDK 架构设计。
短视频SDK架构
Android 短视频 SDK 的架构图,可以划分为四层。第一层为应用层(基于 SDK 开发的应用);第二层为 SDK 对外的接口层(均以 PLShortVideo 为前缀);第三层为核心层,主要是内部的一些模块(其中分 Java 和 Native 两块);第四层主要是 Android 系统层。
整体数据流程图;输入模块支持通过两种方式采集数据,一种是通过摄像头和麦克风采集数据,采集到的数据可以进行数据处理(美颜、人脸识别等),另一种则是通过文件导入并进行解码处理;编辑模块有着十分丰富的功能比如添加字幕、MV 特效、添加背景音乐等等;编码模块主要支持 H.264 软编/硬编以及 ACC 软编/硬编;编码之后的数据会进行 MP4 封包,此后进入输出模块,可以存储到本地也可以使用 HTTP 进行上传。
录制模块的重点在于帧数据获取,除了可以通过摄像头获取视频帧,还可以通过屏幕录制获取视频帧,而音频帧数据主要还是通过麦克风进行获取;虚线部分的 Filter 模块主要实现了内置美颜/滤镜功能,另外因为有纹理和 YUV 数据的 CallBack 回调机制,所以也支持第三方库的美颜、滤镜、特效等功能;处理后的数据会经过 OpenGL 进行裁剪,缩放,旋转等操作,这些工作虽然可以由 CPU 来进行,但是会比较耗时,利用 GPU 是更明智的选择;最后得到纹理后,会被分成两路,一路渲染显示,另一路进行编码封装,这两个线程共享同一个纹理,这样的处理大大减少了资源的占用,提高了 SDK 的工作效率。
首先需要导入一个视频文件(使用短视频 SDK 拍摄或者从外部导入的视频文件),解包之后会得到相应的帧数据,接着分别通过音视频解码器得到 PCM 和纹理,然后把它们送进编辑引擎,在这里面可以进行各种各样的处理(水印、文字特效、背景音乐、多音频混音等)数据经过编辑之后,与录制相同会分两路,其中一路进行播放渲染,另一路会进行转码保存。
通过摄像头采集的数据无需解码,而 MV 视频文件的帧数据则需要解码后才可以进行处理。SurfaceTexture 的主要作用是将解码后的数据帧进行回调通知你可以在 OpenGL 线程中更新纹理了,这个通知可以是多线程同时进行的操作,所以在帧回调时一定要对其进行上锁,防止出现 MV 画面之间不同步的问题。更新之后得到相应的纹理,将其进行混合就能得出最后的 MV 特效图。
日志系统主要是为了方便排障,快速定位问题以及调试问题,我们会将 SDK 版本、设备机型、系统版本,关键配置等一一进行输出,以方便用户根据这些信息进行排障。
只有选择好科学合理的短视频SDK架构,才能配合好短视频APP开发出稳定的短视频系统,短视频APP开发结合短视频SDK架构打造出一套完整的短视频系统功能。