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,并不是简简单单堆积一些功能就够了,其背后还是要花费不少心血的。

如何设计一款优秀的短视频 SDK的更多相关文章

  1. 短视频 SDK 架构设计实践

    作者简介 孔维乐,七牛云客户端团队 Android 平台高级开发工程师,专注音视频,图形图像领域.OpenGL 专家,先后参与直播推流及连麦 SDK 的开发,主导短视频 SDK 的架构设计与实现, 对 ...

  2. 短视频sdk:选择一个靠谱的短视频SDK 你需要了解这些

    2017 年,短视频成为了内容创业的新风口,各种短视频 App 如雨后春笋般先后上线.随着互联网内容消费升级,视频越来越像文字.图片一样,成为每一个 App 不可或缺的一部分. 为了能够更好地聚焦于业 ...

  3. 短视频 SDK 功能点技术实现方式详解

    第三方短视频解决方案作为快速切入短视频行业的首选方式,选择一款功能齐全.性能优异的短视频解决方案十分重要. 今天我们来谈谈短视频 SDK 6大重要功能点及其技术实现方式. 短视频拍摄 断点续拍 指在拍 ...

  4. 短视频 SDK 6大功能技术实现方式详解

    第三方短视频解决方案作为快速切入短视频行业的首选方式,选择一款功能齐全.性能优异的短视频解决方案十分重要. 今天我们来谈谈短视频 SDK 6大重要功能点及其技术实现方式. 短视频拍摄 断点续拍 指在拍 ...

  5. 开发者选择短视频SDK,为何青睐七牛云?

    从文字到图片再到视频的互联网内容媒介发展途径,随着 5g 技术的逐渐落地愈发清晰.短视频市场中的角力也随着诸多资本和创业者的涌入,进入到白热化阶段.这样的情况下,选择合适的短视频SDK产品就显得尤为重 ...

  6. 短视频SDK超级简单易用

    超级简单易用的短视频SDK来自RDSDK.COM.锐动天地为开发者提供短视频编辑.视频直播.特效.录屏.编解码.视频转换,等多种解决方案,涵盖PC.iOS.Android多平台.以市场为导向,不断打磨 ...

  7. 蓝松短视频SDK支持AE模板, 可做类似微商视频, 小柿饼的效果等

    AE模板: 是指设计师用Adobe After Effect做好各种视频动画,比如炫酷视频,文艺/搞笑的场景,相册效果等,根据我们的指导文件导出.蓝松SDK会解析导出的文件,自动还原成AE设计时的动画 ...

  8. 杭州蓝松科技---短视频SDK介绍

    蓝松短视频的口号和 更新周期: 我们的口号是:  蓝松短视频  任意个性化. 我们是杭州蓝松科技,  专业做视频短视频SDK的技术团队. 我们提供 Android/IOS平台上的 短视频编辑SDK,  ...

  9. 国内最简单的短视频SDK

    最近阿里百川和趣拍一起合作推出了一个短视频SDK.之前很多厂商可能都是用的Vitamio的短视频SDK.之后我考察过,也做过一些调查,发现Vitamio真的奇贵无比,屌丝公司根本用不起,阿里和趣拍这下 ...

随机推荐

  1. HTML(二)

    html段落.换行与字符实体 html段落 <p>标签定义一个文本段落,一个段落含有默认的上下间距,段落之间会用这种默认间距隔开,代码如下: <!DOCTYPE html> & ...

  2. Moo University - Financial Aid [POJ2010] [堆]

    题意: 在C头牛里选N头牛,每头牛需要花掉一定经费ai才能得到一定得bi分,在不超过经费F的情况下,使得N头牛的得分中位数最大.(1 <= N <= 19,999,奇数) (N <= ...

  3. Expedition [POJ2431] [贪心]

    题目大意: 有n个加油站,每个加油站的加油的油量有限,距离终点都有一个距离. 一个卡车的油箱无限,每走一个单元要消耗一单元的油,问卡车到达终点的最少加多少次油. 分析: 我们希望的是走到没油的时候就尽 ...

  4. PAT Basic 1008

    1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A​0​​A​1​​⋯A​N ...

  5. Centos服务器端口无法访问

    使用GPRS A6 模块进行TCP连接的时候,一度认为A6模块坏掉了 最终只是服务器端口都被防火墙堵住了 使用之前一直用的  service iptables stop  找不到iptables 原来 ...

  6. python之继承与派生

    1 继承 继承的概念:继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继承 继 ...

  7. CSS关键词的值-currentColor关键字提示文字(当前颜色)

    currentColor关键字 currentColor关键字相当于一个CSS变量. currentColor关键字与CSS变量也是有区别的: (1)他只可以能接受<color>值的地方使 ...

  8. MySQL 数据库-索引注意事项

        索引注意事项 (1)最左前缀原则 如果查询的时候,查询条件精确匹配索引的左边连续一列或几列,则可以命中索引. (2)避免where 子句中对字段施加函数,如to_date(create_tim ...

  9. 打开KVM Console的一些注意事项

    今天早上跟思科CIMC里的KVM console较劲了很久,终于成功的打开了KVM console. 总结了下面的一些注意事项.如果你也遇到了KVM console打不开,那么可以尝试一下. 我不想花 ...

  10. Gradle sync failed: /Applications/Android Studio.app/Contents/gradle/gradle-2.14.1/lib/plugins/gradle-diagnostics-2.14.1.jar (No such file or directory) Consult IDE log for more details (Help | Sh

    上面出现的错误是,我从Android Studio 2.2 升级到2.3后,出现的问题, 找到方法: http://stackoverflow.com/questions/30526613/andro ...