如何设计一款优秀的短视频 SDK

2017 年,短视频成为了创业的新风口,各类短视频 App 如雨后春笋般前后上线,视频愈来愈像文字、图片同样,成为每个 App 不可或缺的一部分。
1. 包体必定要尽量小
如何作到尽量的减少 SDK 的包体呢 ?
- 尽一切努力使用 Android/iOS 系统 原生的 API ,不怕难用,不怕踩坑
- 良好的模块划分, 不一样的功能生成不一样的动态库 ,客户可选择性的拆卸和裁剪
- 所使用的第三方库,充分配置编译选项和功能裁剪,只打包必须的功能、单独抽离所需的模块
2. SDK 必定要开放
使用第三方的 SDK,最怕像个黑盒,过于封闭,想配置的参数没法配置,须要的状态也没有回调,直接致使产品经理给出的 UI 和交互方案没法实现。所以,SDK 的开放性,愈来愈成为开发者选型的关键因素。
那么,SDK 如何作到尽量的开放呢 ?
- 凡可配置的参数,一概提供配置 ,好比:摄像头参数、编解码参数、美颜参数、混音参数等等
- 凡可回调的数据,一概提供回调 ,好比:摄像头采集的视频帧、纹理 ID,麦克风采集的音频帧等等
- 凡运行过程当中的状态,一概提供通知 ,好比:拍摄状态、转码进度、取消事件等等
另外,还须要尽量地跟 SDK 上下游厂商创建良好的合做关系,好比 美颜、滤镜、人脸贴纸特效、大眼瘦脸等供应商,让客户能够随时快速接入和替换任意一家厂商。
3. 性能要好
虽然随着时间的推移,手机的性能愈来愈强大,可是 CPU 居高不下、发热厉害、内存消耗大、运行速度慢的 App 终究仍是会失去不少宝贵的用户。
SDK 如何作到更好的性能呢 ?其实就一条:充分地利用 GPU,尽一切可能减小 CPU 消耗?
- 音视频编解码尽量地使用 硬编/硬解
- 视频/图像的处理,尽量使用 OpenGL ,包括:美颜、滤镜、水印、剪裁、旋转等等
- 尽量更高效地编写 OpenGL 代码,使用一些提升性能的特性,包括:VBO, VAO, FBO, PBO 等等
- 动态管理 so,没有用到的不加载;动态管理内存, 使用时再分配
- 合并处理流程,各类音视频特效和处理,依次记录状态,待保存的时候,再调用算法处理
4. UI 和 SDK 逻辑要完全的分离
优秀的 SDK,必定要尽量避免把 UI 的界面和逻辑包含进去,否则 SDK 的使用者,很难知足产品经理的 UI 和交互设计要求,作出差别化的效果。
那么,SDK 如何作到与 UI 逻辑完全地分离呢 ?
须要充分分解每个短视频的功能需求,搞清楚每个需求的实现原理,哪部分是 UI 的,哪部分是核心的,前者写到 DEMO 上,然后者则写入 SDK 里面。
就拿短视频剪辑这个功能点来举个例子,下图所示是短视频的一个热点功能,对短视频截取中间某一段片断。
仔细思考这个功能点,其实关键点在于:
1. 获取视频中的连续图像在列表中进行展现
2. 绘制左右游标,以肯定剪辑的起始和结束的时间点
3. 读取视频文件,丢弃时间区间之外的视频帧,保留剩余视频帧
属于 UI 的部分:
1. 用列表显示视频帧图像
2. 绘制左右游标,支持手势拖动
3. 根据视频的总时长和游标的位置,计算出起始和结束的时间点
属于 SDK 的部分:
1. 提供视频的时长
2. 提供视频帧总数
3. 提供解码后的每一帧视频数据
4. 提供剪辑函数,参数为:起始和结束的时间戳
5. 完成剪辑处理,输出剪辑后的视频文件
这样分离好了以后,再去编写 SDK 的接口和 UI 的 demo 代码,就很是清晰了。
5. 稳定可靠,有更好的可支持性
优秀的 App 和 SDK,首先一点就是要稳定可靠,由于 没有人会喜欢常常崩溃的程序 。不过,没有人敢说本身的程序是完美的,不会有任何 BUG 的,可是,具有良好的可支持性的产品,每每更容易受到亲赖。
什么是可支持性 ? 举个例子,就像家里买的某些品牌的洗衣机或者空调,在出故障的时候,液晶屏幕上会打出一些错误码,当你给售后打电话的时候,售后每每可以根据描述的信息以及错误代码很快地定位到问题或者给出临时的解决方案。
如何让短视频 SDK 具备更好的可支持性呢 ?关键在于一套健全而规范的日志系统,能够有效提升技术支持和开发者排查问题的速度和效率,那么,设计这样一套 完善的日志系统,有哪些关键点呢 ?
- 支持配置 SDK 的输出日志级别,如:ERROR, WARN, INFO, DEBUG, VERBOSE
- SDK 初始化的时候输出关键的排障信息,如:应用包名,SDK 版本,设备机型,系统 OS 版本,关键配置等
- 规范的日志格式,如:<SDK TAG>:<Module TAG>:<Class TAG>:<Message>,能够快速方便地过滤出各个模块的运行状态
- 健全的问题手册/文档,让每个错误码都有文档可依,开发者能够完成简单初步的问题分析
6. 小结
总而言之,设计一款优秀而且口碑好的短视频 SDK,并非简简单单堆积一些功能就够了,其背后仍是要花费很多心血的。
相关文章
相关标签/搜索